• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1--- openssl-1.0.0.orig/ssl/t1_lib.c	15 Jun 2010 17:25:15 -0000	1.64.2.14
2+++ openssl-1.0.0/ssl/t1_lib.c	15 Nov 2010 15:26:19 -0000
3@@ -714,14 +714,23 @@
4 				switch (servname_type)
5 					{
6 				case TLSEXT_NAMETYPE_host_name:
7-					if (s->session->tlsext_hostname == NULL)
8+					if (!s->hit)
9 						{
10-						if (len > TLSEXT_MAXLEN_host_name ||
11-							((s->session->tlsext_hostname = OPENSSL_malloc(len+1)) == NULL))
12+						if(s->session->tlsext_hostname)
13+							{
14+							*al = SSL_AD_DECODE_ERROR;
15+							return 0;
16+							}
17+						if (len > TLSEXT_MAXLEN_host_name)
18 							{
19 							*al = TLS1_AD_UNRECOGNIZED_NAME;
20 							return 0;
21 							}
22+						if ((s->session->tlsext_hostname = OPENSSL_malloc(len+1)) == NULL)
23+							{
24+							*al = TLS1_AD_INTERNAL_ERROR;
25+							return 0;
26+							}
27 						memcpy(s->session->tlsext_hostname, sdata, len);
28 						s->session->tlsext_hostname[len]='\0';
29 						if (strlen(s->session->tlsext_hostname) != len) {
30@@ -734,7 +743,8 @@
31
32 						}
33 					else
34-						s->servername_done = strlen(s->session->tlsext_hostname) == len
35+						s->servername_done = s->session->tlsext_hostname
36+							&& strlen(s->session->tlsext_hostname) == len
37 							&& strncmp(s->session->tlsext_hostname, (char *)sdata, len) == 0;
38
39 					break;
40@@ -765,15 +775,22 @@
41 				*al = TLS1_AD_DECODE_ERROR;
42 				return 0;
43 				}
44-			s->session->tlsext_ecpointformatlist_length = 0;
45-			if (s->session->tlsext_ecpointformatlist != NULL) OPENSSL_free(s->session->tlsext_ecpointformatlist);
46-			if ((s->session->tlsext_ecpointformatlist = OPENSSL_malloc(ecpointformatlist_length)) == NULL)
47+			if (!s->hit)
48 				{
49-				*al = TLS1_AD_INTERNAL_ERROR;
50-				return 0;
51+				if(s->session->tlsext_ecpointformatlist)
52+					{
53+					*al = TLS1_AD_DECODE_ERROR;
54+					return 0;
55+					}
56+				s->session->tlsext_ecpointformatlist_length = 0;
57+				if ((s->session->tlsext_ecpointformatlist = OPENSSL_malloc(ecpointformatlist_length)) == NULL)
58+					{
59+					*al = TLS1_AD_INTERNAL_ERROR;
60+					return 0;
61+					}
62+				s->session->tlsext_ecpointformatlist_length = ecpointformatlist_length;
63+				memcpy(s->session->tlsext_ecpointformatlist, sdata, ecpointformatlist_length);
64 				}
65-			s->session->tlsext_ecpointformatlist_length = ecpointformatlist_length;
66-			memcpy(s->session->tlsext_ecpointformatlist, sdata, ecpointformatlist_length);
67 #if 0
68 			fprintf(stderr,"ssl_parse_clienthello_tlsext s->session->tlsext_ecpointformatlist (length=%i) ", s->session->tlsext_ecpointformatlist_length);
69 			sdata = s->session->tlsext_ecpointformatlist;
70@@ -794,15 +811,22 @@
71 				*al = TLS1_AD_DECODE_ERROR;
72 				return 0;
73 				}
74-			s->session->tlsext_ellipticcurvelist_length = 0;
75-			if (s->session->tlsext_ellipticcurvelist != NULL) OPENSSL_free(s->session->tlsext_ellipticcurvelist);
76-			if ((s->session->tlsext_ellipticcurvelist = OPENSSL_malloc(ellipticcurvelist_length)) == NULL)
77+			if (!s->hit)
78 				{
79-				*al = TLS1_AD_INTERNAL_ERROR;
80-				return 0;
81+				if(s->session->tlsext_ellipticcurvelist)
82+					{
83+					*al = TLS1_AD_DECODE_ERROR;
84+					return 0;
85+					}
86+				s->session->tlsext_ellipticcurvelist_length = 0;
87+				if ((s->session->tlsext_ellipticcurvelist = OPENSSL_malloc(ellipticcurvelist_length)) == NULL)
88+					{
89+					*al = TLS1_AD_INTERNAL_ERROR;
90+					return 0;
91+					}
92+				s->session->tlsext_ellipticcurvelist_length = ellipticcurvelist_length;
93+				memcpy(s->session->tlsext_ellipticcurvelist, sdata, ellipticcurvelist_length);
94 				}
95-			s->session->tlsext_ellipticcurvelist_length = ellipticcurvelist_length;
96-			memcpy(s->session->tlsext_ellipticcurvelist, sdata, ellipticcurvelist_length);
97 #if 0
98 			fprintf(stderr,"ssl_parse_clienthello_tlsext s->session->tlsext_ellipticcurvelist (length=%i) ", s->session->tlsext_ellipticcurvelist_length);
99 			sdata = s->session->tlsext_ellipticcurvelist;
100