Skip to content

Commit 8285049

Browse files
committed
🥅 Raise ArgumentError on multiple search charset args
1 parent 3bdd1f9 commit 8285049

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

lib/net/imap.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3151,6 +3151,10 @@ def enforce_logindisabled?
31513151
end
31523152

31533153
def search_args(keys, charset = nil)
3154+
# NOTE: not handling combined RETURN and CHARSET for raw strings
3155+
if charset && keys in /\ACHARSET\b/i | Array[/\ACHARSET\z/i, *]
3156+
raise ArgumentError, "multiple charset arguments"
3157+
end
31543158
args = normalize_searching_criteria(keys)
31553159
args.prepend("CHARSET", charset) if charset
31563160
args

test/net/imap/test_imap.rb

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1265,6 +1265,24 @@ def seqset_coercible.to_sequence_set
12651265
end
12661266
end
12671267

1268+
test("#search/#uid_search with invalid arguments") do
1269+
with_fake_server do |server, imap|
1270+
server.on "SEARCH" do |cmd| cmd.fail_no "should fail before this" end
1271+
server.on "UID SEARCH" do |cmd| cmd.fail_no "should fail before this" end
1272+
1273+
assert_raise(ArgumentError) do
1274+
imap.search(["charset", "foo", "ALL"], "bar")
1275+
end
1276+
assert_raise(ArgumentError) do
1277+
imap.search("charset foo ALL", "bar")
1278+
end
1279+
# Parsing return opts is too complicated, for now.
1280+
# assert_raise(ArgumentError) do
1281+
# imap.search("return () charset foo ALL", "bar")
1282+
# end
1283+
end
1284+
end
1285+
12681286
test("missing server SEARCH response") do
12691287
with_fake_server do |server, imap|
12701288
server.on "SEARCH", &:done_ok

0 commit comments

Comments
 (0)