Project

General

Profile

Actions

Bug #12660

closed

[PATCH] openssl: avoid undefined behavior on empty SSL_write

Added by normalperson (Eric Wong) over 5 years ago. Updated about 5 years ago.

Status:
Closed
Priority:
Normal
Target version:
-
[ruby-core:76751]

Description

SSL_write(3ssl) manpage has this in the WARNINGS section:

   When calling SSL_write() with num=0 bytes to be sent the
   behaviour is undefined.

And indeed, the new test case demonstrates failures when
empty strings are used. So, match the behavior of IO#write,
IO#write_nonblock, and IO#syswrite by returning zero, as the
OpenSSL::SSL::SSLSocket API already closely mimics the IO one.

  • ext/openssl/ossl_ssl.c (ossl_ssl_write_internal): avoid undefined behavior
  • test/openssl/test_pair.rb (test_write_zero): new test

Comments? Will commit in a week or so if no response.


Files

Updated by rhenium (Kazuki Yamaguchi) over 5 years ago

Thanks! Looks fine to me. Please commit.

Actions #2

Updated by Anonymous over 5 years ago

  • Status changed from Open to Closed

Applied in changeset r55822.


openssl: avoid undefined behavior on empty SSL_write

SSL_write(3ssl) manpage has this in the WARNINGS section:

   When calling SSL_write() with num=0 bytes to be sent the
   behaviour is undefined.

And indeed, the new test case demonstrates failures when
empty strings are used. So, match the behavior of IO#write,
IO#write_nonblock, and IO#syswrite by returning zero, as the
OpenSSL::SSL::SSLSocket API already closely mimics the IO one.

  • ext/openssl/ossl_ssl.c (ossl_ssl_write_internal): avoid undefined behavior
  • test/openssl/test_pair.rb (test_write_zero): new test [ruby-core:76751] [Bug #12660]

Updated by normalperson (Eric Wong) over 5 years ago

k@rhe.jp wrote:

Thanks! Looks fine to me. Please commit.

Thanks for quick review :> r55822

Updated by nagachika (Tomoyuki Chikanaga) over 5 years ago

  • Backport changed from 2.1: REQUIRED, 2.2: REQUIRED, 2.3: REQUIRED to 2.1: REQUIRED, 2.2: REQUIRED, 2.3: DONE

ruby_2_3 r55961 merged revision(s) 55822.

Updated by usa (Usaku NAKAMURA) about 5 years ago

  • Backport changed from 2.1: REQUIRED, 2.2: REQUIRED, 2.3: DONE to 2.1: REQUIRED, 2.2: DONE, 2.3: DONE

ruby_2_2 r56300 merged revision(s) 55822.

Actions

Also available in: Atom PDF