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; |
