event_debug(("%s: key: %s val: %s\n", __func__, key, value));
- if (strchr(value, '\r') != NULL || strchr(value, '\n') != NULL) {
+ if (strchr(value, '\r') != NULL || strchr(value, '\n') != NULL ||
+ strchr(key, '\r') != NULL || strchr(key, '\n') != NULL) {
/* drop illegal headers */
event_debug(("%s: dropping illegal header\n"));
return (-1);
exit(1);
}
+void
+http_bad_header_test()
+{
+ struct evkeyvalq headers;
+
+ fprintf(stdout, "Testing HTTP Header filtering: ");
+
+ TAILQ_INIT(&headers);
+
+ if (evhttp_add_header(&headers, "One", "Two") != 0)
+ goto fail;
+
+ if (evhttp_add_header(&headers, "One\r", "Two") != -1)
+ goto fail;
+
+ if (evhttp_add_header(&headers, "One\n", "Two") != -1)
+ goto fail;
+
+ if (evhttp_add_header(&headers, "One", "Two\r") != -1)
+ goto fail;
+
+ if (evhttp_add_header(&headers, "One", "Two\n") != -1)
+ goto fail;
+
+ fprintf(stdout, "OK\n");
+ return;
+fail:
+ fprintf(stdout, "FAILED\n");
+ exit(1);
+}
+
void
http_suite(void)
{
+ http_bad_header_test();
http_basic_test();
http_connection_test(0 /* not-persistent */);
http_connection_test(1 /* persistent */);