diff options
| -rw-r--r-- | src/lib/libssl/src/ssl/t1_lib.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/lib/libssl/src/ssl/t1_lib.c b/src/lib/libssl/src/ssl/t1_lib.c index 5d401c3572..0528309132 100644 --- a/src/lib/libssl/src/ssl/t1_lib.c +++ b/src/lib/libssl/src/ssl/t1_lib.c | |||
| @@ -452,6 +452,7 @@ int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, in | |||
| 452 | } | 452 | } |
| 453 | n2s(data, idsize); | 453 | n2s(data, idsize); |
| 454 | dsize -= 2 + idsize; | 454 | dsize -= 2 + idsize; |
| 455 | size -= 2 + idsize; | ||
| 455 | if (dsize < 0) | 456 | if (dsize < 0) |
| 456 | { | 457 | { |
| 457 | *al = SSL_AD_DECODE_ERROR; | 458 | *al = SSL_AD_DECODE_ERROR; |
| @@ -490,9 +491,14 @@ int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, in | |||
| 490 | } | 491 | } |
| 491 | 492 | ||
| 492 | /* Read in request_extensions */ | 493 | /* Read in request_extensions */ |
| 494 | if (size < 2) | ||
| 495 | { | ||
| 496 | *al = SSL_AD_DECODE_ERROR; | ||
| 497 | return 0; | ||
| 498 | } | ||
| 493 | n2s(data,dsize); | 499 | n2s(data,dsize); |
| 494 | size -= 2; | 500 | size -= 2; |
| 495 | if (dsize > size) | 501 | if (dsize != size) |
| 496 | { | 502 | { |
| 497 | *al = SSL_AD_DECODE_ERROR; | 503 | *al = SSL_AD_DECODE_ERROR; |
| 498 | return 0; | 504 | return 0; |
