diff options
Diffstat (limited to 'src/lib/libssl/t1_lib.c')
-rw-r--r-- | src/lib/libssl/t1_lib.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/lib/libssl/t1_lib.c b/src/lib/libssl/t1_lib.c index bfd4731365..a649dafba9 100644 --- a/src/lib/libssl/t1_lib.c +++ b/src/lib/libssl/t1_lib.c | |||
@@ -2441,16 +2441,20 @@ tls1_process_heartbeat(SSL *s) | |||
2441 | unsigned int payload; | 2441 | unsigned int payload; |
2442 | unsigned int padding = 16; /* Use minimum padding */ | 2442 | unsigned int padding = 16; /* Use minimum padding */ |
2443 | 2443 | ||
2444 | /* Read type and payload length first */ | ||
2445 | hbtype = *p++; | ||
2446 | n2s(p, payload); | ||
2447 | pl = p; | ||
2448 | |||
2449 | if (s->msg_callback) | 2444 | if (s->msg_callback) |
2450 | s->msg_callback(0, s->version, TLS1_RT_HEARTBEAT, | 2445 | s->msg_callback(0, s->version, TLS1_RT_HEARTBEAT, |
2451 | &s->s3->rrec.data[0], s->s3->rrec.length, | 2446 | &s->s3->rrec.data[0], s->s3->rrec.length, |
2452 | s, s->msg_callback_arg); | 2447 | s, s->msg_callback_arg); |
2453 | 2448 | ||
2449 | /* Read type and payload length first */ | ||
2450 | if (1 + 2 + 16 > s->s3->rrec.length) | ||
2451 | return 0; /* silently discard */ | ||
2452 | hbtype = *p++; | ||
2453 | n2s(p, payload); | ||
2454 | if (1 + 2 + payload + 16 > s->s3->rrec.length) | ||
2455 | return 0; /* silently discard per RFC 6520 sec. 4 */ | ||
2456 | pl = p; | ||
2457 | |||
2454 | if (hbtype == TLS1_HB_REQUEST) | 2458 | if (hbtype == TLS1_HB_REQUEST) |
2455 | { | 2459 | { |
2456 | unsigned char *buffer, *bp; | 2460 | unsigned char *buffer, *bp; |