@@ -127,41 +127,40 @@ static int ap_array_same_str_set(apr_array_header_t *s1, apr_array_header_t *s2)
127127}
128128
129129#ifdef HAVE_SSL_CONF_CMD
130- static int array_contains_ssl_param (apr_array_header_t * a ,
131- const char * name , const char * value )
130+ /* Writes a hash of the ssl_ctx_param array to digest. */
131+ static void hash_ssl_params (apr_array_header_t * a ,
132+ unsigned char digest [APR_MD5_DIGESTSIZE ])
132133{
134+ apr_md5_ctx_t ctx ;
133135 int n ;
134136
137+ apr_md5_init (& ctx );
135138 for (n = 0 ; n < a -> nelts ; n ++ ) {
136139 ssl_ctx_param_t * p = & APR_ARRAY_IDX (a , n , ssl_ctx_param_t );
137140
138- if (strcmp (p -> name , name ) == 0 && strcmp (p -> value , value ) == 0 )
139- return 1 ;
141+ apr_md5_update (& ctx , p -> name , strlen (p -> name ));
142+ apr_md5_update (& ctx , "##" , 2 );
143+ apr_md5_update (& ctx , p -> value , strlen (p -> value ));
140144 }
141-
142- return 0 ;
145+ apr_md5_final (digest , & ctx );
143146}
144147
145148/* Return non-zero if the two ssl_ctx_param arrays match exactly, else
146149 * zero. */
147150static int array_cmp_ssl_ctx_params (apr_array_header_t * a1 ,
148151 apr_array_header_t * a2 )
149152{
150- int n ;
153+ unsigned char dig1 [ APR_MD5_DIGESTSIZE ], dig2 [ APR_MD5_DIGESTSIZE ] ;
151154
152155 if (a1 == a2 )
153156 return 1 ;
154157 if (a1 -> nelts != a2 -> nelts )
155158 return 0 ;
156159
157- for ( n = 0 ; n < a1 -> nelts ; n ++ ) {
158- ssl_ctx_param_t * p = & APR_ARRAY_IDX ( a1 , n , ssl_ctx_param_t );
160+ hash_ssl_params ( a1 , dig1 );
161+ hash_ssl_params ( a2 , dig2 );
159162
160- if (!array_contains_ssl_param (a2 , p -> name , p -> value ))
161- return 0 ;
162- }
163-
164- return 1 ;
163+ return strcmp ((char * )dig1 , (char * )dig2 ) == 0 ;
165164}
166165#endif
167166
0 commit comments