mirror of https://github.com/openssl/openssl.git
Release zero length handshake fragment records
If we are processing a hanshake fragment and we end up with a zero length record, then we still need to release it to avoid an infinite loop. Fixes #20821 Reviewed-by: Todd Short <todd.short@me.com> Reviewed-by: Tomas Mraz <tomas@openssl.org> (Merged from https://github.com/openssl/openssl/pull/20824)
This commit is contained in:
parent
1c35e39ac0
commit
c20d923b46
|
|
@ -939,9 +939,13 @@ int ssl3_read_bytes(SSL *ssl, int type, int *recvd_type, unsigned char *buf,
|
||||||
if (n > 0) {
|
if (n > 0) {
|
||||||
memcpy(dest + *dest_len, rr->data + rr->off, n);
|
memcpy(dest + *dest_len, rr->data + rr->off, n);
|
||||||
*dest_len += n;
|
*dest_len += n;
|
||||||
if (!ssl_release_record(s, rr, n))
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
* We release the number of bytes consumed, or the whole record if it
|
||||||
|
* is zero length
|
||||||
|
*/
|
||||||
|
if ((n > 0 || rr->length == 0) && !ssl_release_record(s, rr, n))
|
||||||
|
return -1;
|
||||||
|
|
||||||
if (*dest_len < dest_maxlen)
|
if (*dest_len < dest_maxlen)
|
||||||
goto start; /* fragment was too small */
|
goto start; /* fragment was too small */
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue