summaryrefslogtreecommitdiff
path: root/src/SSL_Message.c
diff options
context:
space:
mode:
author刘学利 <[email protected]>2023-12-28 09:48:42 +0000
committer刘学利 <[email protected]>2023-12-28 09:48:42 +0000
commit8f3bde2163664e68a9fd7374d64cb935447f1b40 (patch)
tree2fb96fbaf7c0930820f8f8c0b6756959ee16fe16 /src/SSL_Message.c
parent387130984a39e6546b2c6a83c26e9871a1850bea (diff)
TSG-18234: Only parse externions of server name /encrypted server name / encrypted client hello / alpnv3.0.4
Diffstat (limited to 'src/SSL_Message.c')
-rw-r--r--src/SSL_Message.c20
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;
}