From 031101ca50c3dc098b359d98083d70aa10f477df Mon Sep 17 00:00:00 2001 From: Samuel Williams Date: Thu, 28 Dec 2023 12:30:03 +1300 Subject: [PATCH 1/2] Add more methods to `SocketForwarder`. --- lib/openssl/ssl.rb | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/lib/openssl/ssl.rb b/lib/openssl/ssl.rb index e557b8b48..ccc945f2f 100644 --- a/lib/openssl/ssl.rb +++ b/lib/openssl/ssl.rb @@ -252,6 +252,14 @@ def peeraddr to_io.peeraddr end + def local_address + to_io.local_address + end + + def remote_address + to_io.remote_address + end + def setsockopt(level, optname, optval) to_io.setsockopt(level, optname, optval) end @@ -271,6 +279,26 @@ def closed? def do_not_reverse_lookup=(flag) to_io.do_not_reverse_lookup = flag end + + def close_on_exec=(value) + to_io.close_on_exec = value + end + + def close_on_exec? + to_io.close_on_exec? + end + + def wait(*args) + to_io.wait(*args) + end + + def wait_readable(*args) + to_io.wait_readable(*args) + end + + def wait_writable(*args) + to_io.wait_writable(*args) + end end def verify_certificate_identity(cert, hostname) From cac0d196aa2286acdccba17974779eecd5e72bda Mon Sep 17 00:00:00 2001 From: Samuel Williams Date: Mon, 1 Jan 2024 22:50:32 +1300 Subject: [PATCH 2/2] Add support for `gets(chomp: true)`. --- lib/openssl/buffering.rb | 8 ++++++-- test/openssl/test_pair.rb | 11 +++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/lib/openssl/buffering.rb b/lib/openssl/buffering.rb index 9570f14f3..68aa7bc97 100644 --- a/lib/openssl/buffering.rb +++ b/lib/openssl/buffering.rb @@ -229,7 +229,7 @@ def read_nonblock(maxlen, buf=nil, exception: true) # # Unlike IO#gets the separator must be provided if a limit is provided. - def gets(eol=$/, limit=nil) + def gets(eol=$/, limit=nil, chomp: false) idx = @rbuffer.index(eol) until @eof break if idx @@ -244,7 +244,11 @@ def gets(eol=$/, limit=nil) if size && limit && limit >= 0 size = [size, limit].min end - consume_rbuff(size) + line = consume_rbuff(size) + if chomp && line + line.chomp!(eol) + end + line end ## diff --git a/test/openssl/test_pair.rb b/test/openssl/test_pair.rb index 14786100d..b61688392 100644 --- a/test/openssl/test_pair.rb +++ b/test/openssl/test_pair.rb @@ -115,6 +115,17 @@ def test_gets } end + def test_gets_chomp + ssl_pair {|s1, s2| + s1 << "line1\r\nline2\r\nline3\r\n" + s1.close + + assert_equal("line1", s2.gets("\r\n", chomp: true)) + assert_equal("line2\r\n", s2.gets("\r\n", chomp: false)) + assert_equal("line3", s2.gets(chomp: true)) + } + end + def test_gets_eof_limit ssl_pair {|s1, s2| s1.write("hello")