diff options
author | Jean Boussier <[email protected]> | 2024-04-16 14:52:58 +0200 |
---|---|---|
committer | git <[email protected]> | 2024-05-05 08:00:00 +0000 |
commit | 7d42010fad4be2dbb26bd7608a75aa1c51d5f9ef (patch) | |
tree | 9be9332fe99a42a88bc8fc00e2a0f5b8ce139f1a /ext/openssl | |
parent | fca6c55a535094a49cf16d00519120d57928b1a2 (diff) |
[ruby/openssl] read: don't clear buffer when nothing can be read
To be consistent with regular Ruby IOs:
```ruby
r, _ = IO.pipe
buf = "garbage".b
r.read_nonblock(10, buf, exception: false) # => :wait_readable
p buf # => "garbage"
```
Ref: https://github.com/redis-rb/redis-client/commit/98b8944460a11f8508217bda71cfc10cb2190d4d
https://github.com/ruby/openssl/commit/08452993d6
Diffstat (limited to 'ext/openssl')
-rw-r--r-- | ext/openssl/ossl_ssl.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/ext/openssl/ossl_ssl.c b/ext/openssl/ossl_ssl.c index 9f374b65ff..d68c64d5fb 100644 --- a/ext/openssl/ossl_ssl.c +++ b/ext/openssl/ossl_ssl.c @@ -1958,9 +1958,11 @@ ossl_ssl_read_internal(int argc, VALUE *argv, VALUE self, int nonblock) else rb_str_modify_expand(str, ilen - RSTRING_LEN(str)); } - rb_str_set_len(str, 0); - if (ilen == 0) - return str; + + if (ilen == 0) { + rb_str_set_len(str, 0); + return str; + } VALUE io = rb_attr_get(self, id_i_io); |