]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
BIO_write_ex: No error only on 0 bytes to write
authorTomas Mraz <tomas@openssl.org>
Wed, 9 Jun 2021 11:48:21 +0000 (13:48 +0200)
committerTomas Mraz <tomas@openssl.org>
Fri, 11 Jun 2021 07:51:14 +0000 (09:51 +0200)
Fixes #15682

Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/15672)

crypto/bio/bio_lib.c
doc/man3/BIO_read.pod

index cdce122796031fb4bfb8f5f6981003eaed4e28ee..af7ad05bcab72e362ea549b58ced22e3813214f4 100644 (file)
@@ -393,7 +393,13 @@ int BIO_write(BIO *b, const void *data, int dlen)
 
 int BIO_write_ex(BIO *b, const void *data, size_t dlen, size_t *written)
 {
-    return bio_write_intern(b, data, dlen, written) >= 0;
+    if (dlen == 0) {
+        /* no error */
+        if (written != NULL)
+            *written = 0;
+        return 1;
+    }
+    return bio_write_intern(b, data, dlen, written) > 0;
 }
 
 int BIO_puts(BIO *b, const char *buf)
index 08104b1b92d161f9a64b528f388cb9a0689c1019..a2d8ab3af0e60f0e65dfc1dbc4738f173bf2d650 100644 (file)
@@ -27,7 +27,7 @@ stored in I<*readbytes>.
 
 BIO_write_ex() attempts to write I<dlen> bytes from I<data> to BIO I<b>.
 If successful then the number of bytes written is stored in I<*written>
-unless I<written> is NULL. No data is written if I<b> is NULL.
+unless I<written> is NULL.
 
 BIO_read() attempts to read I<len> bytes from BIO I<b> and places
 the data in I<buf>.
@@ -59,7 +59,7 @@ BIO_puts() attempts to write a NUL-terminated string I<buf> to BIO I<b>.
 BIO_read_ex() returns 1 if data was successfully read, and 0 otherwise.
 
 BIO_write_ex() returns 1 if no error was encountered writing data, 0 otherwise.
-Write to NULL B<BIO> is not considered as an error.
+Requesting to write 0 bytes is not considered an error.
 
 BIO_write() returns -2 if the "write" operation is not implemented by the BIO
 or -1 on other errors.
@@ -114,6 +114,9 @@ keep the '\n' at the end of the line in the buffer.
 
 BIO_get_line() was added in OpenSSL 3.0.
 
+BIO_write_ex() returns 1 if the size of the data to write is 0 and the
+I<written> parameter of the function can be NULL since OpenSSL 3.0.
+
 =head1 COPYRIGHT
 
 Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved.