about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2016-08-06 10:35:59 +0000
committerEric Wong <e@80x24.org>2016-08-06 10:35:59 +0000
commit49bb21c176deb97904490409f15708f6a011008a (patch)
treebe34a04ba2fc31ea38cb7b95ce179516b065730e
parent30140c431bed104fa26c8a8d5ba510c926700df6 (diff)
downloadyahns-49bb21c176deb97904490409f15708f6a011008a.tar.gz
Sometimes apps may trigger zero-byte chunks in the response
body for whatever reason.  We should maintain consistent
behavior with the rest of kgio; and Ruby OpenSSL::SSL::SSLSocket
should maintain consistent behavior with the core IO class:

	https://bugs.ruby-lang.org/issues/12660
-rw-r--r--lib/yahns/openssl_client.rb4
1 files changed, 3 insertions, 1 deletions
diff --git a/lib/yahns/openssl_client.rb b/lib/yahns/openssl_client.rb
index 439bc75..0d376bd 100644
--- a/lib/yahns/openssl_client.rb
+++ b/lib/yahns/openssl_client.rb
@@ -38,12 +38,14 @@ module Yahns::OpenSSLClient # :nodoc:
   end
 
   def kgio_trywrite(buf)
+    len = buf.bytesize
+    return if len == 0
     buf = @ssl_blocked = buf.dup
     case rv = @ssl.write_nonblock(buf, exception: false)
     when :wait_readable, :wait_writable
       return rv # do not clear ssl_blocked
     when Integer
-      rv = buf.bytesize == rv ? nil : buf.byteslice(rv, buf.bytesize - rv)
+      rv = len == rv ? nil : buf.byteslice(rv, len - rv)
     end
     @ssl_blocked = nil
     rv