]> gitweb.factorcode.org Git - factor.git/commitdiff
io.sockets.secure.openssl: fix do-ssl-write for failed writes.
authorJohn Benediktsson <mrjbq7@gmail.com>
Mon, 27 Dec 2021 16:16:20 +0000 (08:16 -0800)
committerJohn Benediktsson <mrjbq7@gmail.com>
Mon, 27 Dec 2021 16:16:20 +0000 (08:16 -0800)
SSL_write will return <= 0 for errors, but some errors are not
retryable so only consume the buffer if the return value was > 0.

basis/io/sockets/secure/openssl/openssl.factor

index 9d56fab25d1a4b3505a72ca270b783824e6bea43..fd0c4207b7411e83ceaa383ef7fe46dc897d8f53 100644 (file)
@@ -325,7 +325,9 @@ M: ssl-handle refill
 ! Output ports
 : do-ssl-write ( buffer ssl-handle -- event/f )
     2dup handle>> swap [ buffer@ ] [ buffer-length ] bi SSL_write
-    [ check-ssl-error ] keep swap [ 2nip ] [ swap buffer-consume f ] if* ;
+    [ check-ssl-error ] keep swap [ 2nip ] [
+        dup 0 > [ swap buffer-consume ] [ 2drop ] if f
+    ] if* ;
 
 M: ssl-handle drain
     dup maybe-handshake [ buffer>> ] dip do-ssl-write ;