From f19e2c0d79d559bf8fa07a670915894d85c3c2db Mon Sep 17 00:00:00 2001 From: Oskar Eichler Date: Thu, 27 Aug 2026 23:56:44 +0300 Subject: [PATCH 1/2] Normalize EHLO capability keywords without changing parameters --- lib/net/smtp.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/net/smtp.rb b/lib/net/smtp.rb index cca06e6..d77f037 100644 --- a/lib/net/smtp.rb +++ b/lib/net/smtp.rb @@ -1104,7 +1104,7 @@ def capabilities h = {} @string.lines.drop(1).each do |line| k, *v = line[4..-1].split(' ') - h[k] = v + h[k&.upcase] = v end h end From 87674f00f7ea77e03dc16421db05a310afa80c67 Mon Sep 17 00:00:00 2001 From: Oskar Eichler <62393985+OskarEichler@users.noreply.github.com> Date: Fri, 28 Aug 2026 15:24:23 +0300 Subject: [PATCH 2/2] Add regression coverage for normalize ehlo capability keywords without changing parameters --- test/net/smtp/test_response.rb | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/test/net/smtp/test_response.rb b/test/net/smtp/test_response.rb index 3cf909a..84da1c1 100644 --- a/test/net/smtp/test_response.rb +++ b/test/net/smtp/test_response.rb @@ -24,6 +24,15 @@ def test_capabilities_value assert_equal ['1234'], res.capabilities['SIZE'] end + def test_capabilities_normalize_keyword_case_only + res = Response.parse("250-fixture\n250-smtputf8\n250 size MiXeD\n") + assert_equal({ + "SMTPUTF8" => [], + "SIZE" => ["MiXeD"], + }, + res.capabilities) + end + def test_capabilities_multi res = Response.parse("250-ubuntu-desktop\n250-SIZE 1 2 3\n250 DSN\n") assert_equal %w{1 2 3}, res.capabilities['SIZE']