Skip to content

Commit a504301

Browse files
committed
Reimplement ssl_ctx_param_t array comparison using a hash.
1 parent 8ef9689 commit a504301

File tree

1 file changed

+13
-14
lines changed

1 file changed

+13
-14
lines changed

modules/ssl/ssl_engine_kernel.c

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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. */
147150
static 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

Comments
 (0)