Skip to content

Commit 8c5bdc9

Browse files
authored
🔀 Merge pull request #479 from ruby/sequence_set/fix-include_p-invalid-input
🐛 Fix `SequenceSet#include?` handling of invalid inputs
2 parents dc8004d + adaa4d1 commit 8c5bdc9

File tree

2 files changed

+18
-12
lines changed

2 files changed

+18
-12
lines changed

lib/net/imap/sequence_set.rb

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -528,17 +528,17 @@ def ===(other)
528528
def cover?(other) input_to_tuples(other).none? { !include_tuple?(_1) } end
529529

530530
# Returns +true+ when a given number or range is in +self+, and +false+
531-
# otherwise. Returns +false+ unless +number+ is an Integer, Range, or
532-
# <tt>*</tt>.
531+
# otherwise. Returns +nil+ when +number+ isn't a valid SequenceSet
532+
# element (Integer, Range, <tt>*</tt>, +sequence-set+ string).
533533
#
534534
# set = Net::IMAP::SequenceSet["5:10,100,111:115"]
535535
# set.include? 1 #=> false
536536
# set.include? 5..10 #=> true
537537
# set.include? 11..20 #=> false
538538
# set.include? 100 #=> true
539539
# set.include? 6 #=> true, covered by "5:10"
540-
# set.include? 4..9 #=> true, covered by "5:10"
541-
# set.include? "4:9" #=> true, strings are parsed
540+
# set.include? 6..9 #=> true, covered by "5:10"
541+
# set.include? "6:9" #=> true, strings are parsed
542542
# set.include? 4..9 #=> false, intersection is not sufficient
543543
# set.include? "*" #=> false, use #limit to re-interpret "*"
544544
# set.include? -1 #=> false, -1 is interpreted as "*"
@@ -547,11 +547,14 @@ def cover?(other) input_to_tuples(other).none? { !include_tuple?(_1) } end
547547
# set.include? :* #=> true
548548
# set.include? "*" #=> true
549549
# set.include? -1 #=> true
550-
# set.include? 200.. #=> true
551-
# set.include? 100.. #=> false
550+
# set.include?(200..) #=> true
551+
# set.include?(100..) #=> false
552552
#
553553
# Related: #include_star?, #cover?, #===
554-
def include?(element) include_tuple? input_to_tuple element end
554+
def include?(element)
555+
tuple = input_to_tuple element rescue nil
556+
!!include_tuple?(tuple) if tuple
557+
end
555558

556559
alias member? include?
557560

test/net/imap/test_sequence_set.rb

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -794,13 +794,16 @@ def obj.to_sequence_set; 192_168.001_255 end
794794
end
795795

796796
test "#include?" do
797-
assert SequenceSet["2:4"].include?(3)
798-
assert SequenceSet["2,*:12"].include? :*
799-
assert SequenceSet["2,*:12"].include?(-1)
797+
assert_equal true, SequenceSet["2:4"].include?(3)
798+
assert_equal true, SequenceSet["2,*:12"].include?(:*)
799+
assert_equal true, SequenceSet["2,*:12"].include?(-1)
800+
assert_nil SequenceSet["1:*"].include?("hopes and dreams")
801+
assert_nil SequenceSet["1:*"].include?(:wat?)
802+
assert_nil SequenceSet["1:*"].include?([1, 2, 3])
800803
set = SequenceSet.new Array.new(100) { rand(1..1500) }
801804
rev = (~set).limit(max: 1_501)
802-
set.numbers.each do assert set.include?(_1) end
803-
rev.numbers.each do refute set.include?(_1) end
805+
set.numbers.each do assert_equal true, set.include?(_1) end
806+
rev.numbers.each do assert_equal false, set.include?(_1) end
804807
end
805808

806809
test "#cover?" do

0 commit comments

Comments
 (0)