diff options
author | Dr. Stephen Henson <steve@openssl.org> | 2012-04-06 11:18:40 +0000 |
---|---|---|
committer | Dr. Stephen Henson <steve@openssl.org> | 2012-04-06 11:18:40 +0000 |
commit | b2284ed34af2ceeffb450d1e5180c9377c49a6f0 (patch) | |
tree | 7fc2b2664afa684d55cb021f6594c751db68bc32 /ssl/t1_lib.c | |
parent | a43526302f3049f2eed3fc2ea538c14a5f3ff956 (diff) | |
download | openssl-b2284ed34af2ceeffb450d1e5180c9377c49a6f0.tar.gz |
Submitted by: Peter Sylvester <peter.sylvester@edelweb.fr>
Localize client hello extension parsing in t1_lib.c
Diffstat (limited to 'ssl/t1_lib.c')
-rw-r--r-- | ssl/t1_lib.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/ssl/t1_lib.c b/ssl/t1_lib.c index 73924392f9..b75b028b41 100644 --- a/ssl/t1_lib.c +++ b/ssl/t1_lib.c @@ -1175,8 +1175,8 @@ unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *p, unsigned cha return ret; } -int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, int n, int *al) - { +static int ssl_scan_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, int n, int *al) + { unsigned short type; unsigned short size; unsigned short len; @@ -1669,6 +1669,23 @@ int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, in return 1; } +int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, int n) + { + int al = -1; + if (ssl_scan_clienthello_tlsext(s, p, d, n, &al) <= 0) + { + ssl3_send_alert(s,SSL3_AL_FATAL,al); + return 0; + } + + if (ssl_check_clienthello_tlsext(s) <= 0) + { + SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,SSL_R_CLIENTHELLO_TLSEXT); + return 0; + } + return 1; +} + #ifndef OPENSSL_NO_NEXTPROTONEG /* ssl_next_proto_validate validates a Next Protocol Negotiation block. No * elements of zero length are allowed and the set of elements must exactly fill |