--- tables/apr_tables.c (revision 1876740) +++ tables/apr_tables.c (working copy) @@ -1102,6 +1102,7 @@ apr_table_entry_t **last; int i; int dups_found; + apr_uint32_t cookie_checksum; if (flags == APR_OVERLAP_TABLES_ADD) { return; @@ -1131,6 +1132,8 @@ */ sort_array = table_mergesort(t->a.pool, sort_array, t->a.nelts); + COMPUTE_KEY_CHECKSUM("Cookie", cookie_checksum); + /* Process any duplicate keys */ dups_found = 0; sort_next = sort_array; @@ -1154,6 +1157,11 @@ apr_table_entry_t **next = last; char *new_val; char *val_dst; + char separator = ','; + if ((*last)->key_checksum == cookie_checksum + && !strcasecmp((*last)->key, "Cookie")) { + separator = ';'; + } do { len += strlen((*next)->val); len += 2; /* for ", " or trailing null */ @@ -1170,7 +1178,7 @@ break; } else { - *val_dst++ = ','; + *val_dst++ = separator; *val_dst++ = ' '; } }