Project

General

Profile

Bug #13935 » ruby_2_3-0003-ssl-prevent-SSLSocket-sysread-from-leaking-uninitial.patch

rhenium (Kazuki Yamaguchi), 09/24/2017 04:48 PM

View differences:

ext/openssl/ossl_ssl.c
}
ilen = NUM2INT(len);
if(NIL_P(str)) str = rb_str_new(0, ilen);
else{
StringValue(str);
rb_str_modify(str);
rb_str_resize(str, ilen);
if (NIL_P(str))
str = rb_str_new(0, ilen);
else {
StringValue(str);
if (RSTRING_LEN(str) >= ilen)
rb_str_modify(str);
else
rb_str_modify_expand(str, ilen - RSTRING_LEN(str));
}
if(ilen == 0) return str;
OBJ_TAINT(str);
rb_str_set_len(str, 0);
if (ilen == 0)
return str;
GetSSL(self, ssl);
GetOpenFile(ossl_ssl_get_io(self), fptr);
if (ssl) {
for (;;){
nread = SSL_read(ssl, RSTRING_PTR(str), RSTRING_LENINT(str));
nread = SSL_read(ssl, RSTRING_PTR(str), ilen);
switch(ssl_get_error(ssl, nread)){
case SSL_ERROR_NONE:
goto end;
......
end:
rb_str_set_len(str, nread);
OBJ_TAINT(str);
return str;
}
test/openssl/test_pair.rb
}
end
def test_read_with_outbuf
ssl_pair { |s1, s2|
s1.write("abc\n")
buf = ""
ret = s2.read(2, buf)
assert_same ret, buf
assert_equal "ab", ret
buf = "garbage"
ret = s2.read(2, buf)
assert_same ret, buf
assert_equal "c\n", ret
buf = "garbage"
assert_equal :wait_readable, s2.read_nonblock(100, buf, exception: false)
assert_equal "", buf
s1.close
buf = "garbage"
assert_equal nil, s2.read(100, buf)
assert_equal "", buf
}
end
def write_nonblock(socket, meth, str)
ret = socket.send(meth, str)
ret.is_a?(Symbol) ? 0 : ret
(4-4/8)