diff options
| author | 刘学利 <[email protected]> | 2023-12-28 09:48:42 +0000 |
|---|---|---|
| committer | 刘学利 <[email protected]> | 2023-12-28 09:48:42 +0000 |
| commit | 8f3bde2163664e68a9fd7374d64cb935447f1b40 (patch) | |
| tree | 2fb96fbaf7c0930820f8f8c0b6756959ee16fe16 /src | |
| parent | 387130984a39e6546b2c6a83c26e9871a1850bea (diff) | |
TSG-18234: Only parse externions of server name /encrypted server name / encrypted client hello / alpnv3.0.4
Diffstat (limited to 'src')
| -rw-r--r-- | src/SSL_Message.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/src/SSL_Message.c b/src/SSL_Message.c index d4e81b2..d3bff89 100644 --- a/src/SSL_Message.c +++ b/src/SSL_Message.c @@ -372,37 +372,39 @@ int ssl_parse_client_hello(struct ssl_client_hello *chello, unsigned char *paylo chello->extensions.len=(unsigned short)BtoL2BytesNum((const char *)(payload+offset)); offset+=sizeof(chello->extensions.len); - for(int i=0; payload_len-offset >= 4 && i < MAX_EXTENSION_NUM; i++) // min len of ext is 4 byte + int ex_offset=0; + for(int i=0; payload_len-offset >= 4 && ex_offset < MAX_EXTENSION_NUM; i++) // min len of ext is 4 byte { - one_ltv=ssl_parse_ltv2(&(chello->extensions.extension[i]), payload+offset, payload_len-offset); + one_ltv=ssl_parse_ltv2(&(chello->extensions.extension[ex_offset]), payload+offset, payload_len-offset); if(one_ltv==-1) { return SSL_FLASE; } offset+=one_ltv; - chello->extensions.num++; - switch(chello->extensions.extension[i].type) + switch(chello->extensions.extension[ex_offset].type) { case SERVER_NAME_EXT_TYPE: - ssl_parse_server_name(chello, &(chello->extensions.extension[i])); + ssl_parse_server_name(chello, &(chello->extensions.extension[ex_offset++])); break; case SESSION_TICKET_EXT_TYPE: - chello->session_ticket=&(chello->extensions.extension[i]); + chello->session_ticket=&(chello->extensions.extension[ex_offset++]); break; case ENCRPTED_SERVER_NAME_EXT_TYPE: - ssl_parse_encrypt_server_name(chello, &(chello->extensions.extension[i])); + ssl_parse_encrypt_server_name(chello, &(chello->extensions.extension[ex_offset++])); break; case ENCRPTED_CLIENT_HELLO_EXT_TYPE: - chello->encrypt_chello=&(chello->extensions.extension[i]); + chello->encrypt_chello=&(chello->extensions.extension[ex_offset++]); break; case ALPN_EXT_TYPE: - chello->alpn=&(chello->extensions.extension[i]); + chello->alpn=&(chello->extensions.extension[ex_offset++]); break; default: break; } } + + chello->extensions.num=ex_offset; } return SSL_TRUE; } |
