dgaudet 98/05/25 15:55:40
Modified: src/main http_protocol.c
Log:
- style correction
- eliminate an unneeded extra MAX_STRING_LEN buffer
- add some XXX comments
Revision Changes Path
1.215 +25 -19 apache-1.3/src/main/http_protocol.c
Index: http_protocol.c
===================================================================
RCS file: /export/home/cvs/apache-1.3/src/main/http_protocol.c,v
retrieving revision 1.214
retrieving revision 1.215
diff -u -r1.214 -r1.215
--- http_protocol.c 1998/05/21 04:11:27 1.214
+++ http_protocol.c 1998/05/25 22:55:39 1.215
@@ -662,8 +662,9 @@
"request failed for %s, reason: URI too long",
ap_get_remote_host(r->connection, r->per_dir_config,
REMOTE_NAME));
/* hack to deal with the HTTP_REQUEST_TIME_OUT setting up above: */
- if (r->status == HTTP_REQUEST_TIME_OUT)
- r->status = HTTP_OK;
+ if (r->status == HTTP_REQUEST_TIME_OUT) {
+ r->status = HTTP_OK;
+ }
r->request_time = time(NULL);
ap_die (HTTP_REQUEST_URI_TOO_LARGE, r);
return 0;
@@ -718,38 +719,42 @@
/*
* Read header lines until we get the empty separator line, a read error,
- * the connection closes (EOF), or we timeout. Should we also check for
- * overflow (len == MAX_STRING_LEN-1)?
+ * the connection closes (EOF), or we timeout.
*/
while ((len = getline(field, MAX_STRING_LEN, c->client, 1)) > 0) {
char *copy = ap_palloc(r->pool, len + 1);
memcpy(copy, field, len + 1);
if (!(value = strchr(copy, ':'))) { /* Find the colon separator */
- /* if there's none, this request is screwed up.
- * a hack to deal with how we set HTTP_REQUEST_TIME_OUT earlier.*/
- if (r->status == HTTP_REQUEST_TIME_OUT)
- r->status = HTTP_OK;
-
- ap_die (HTTP_BAD_REQUEST, r);
- return;
+ /* if there's none, this request is screwed up.
+ * a hack to deal with how we set HTTP_REQUEST_TIME_OUT earlier.*/
+ if (r->status == HTTP_REQUEST_TIME_OUT)
+ r->status = HTTP_OK;
+
+ ap_die (HTTP_BAD_REQUEST, r);
+ return;
}
*value = '\0';
++value;
+ /* XXX: RFC2068 defines only SP and HT as whitespace, this test is
+ * wrong... and so are many others probably.
+ */
while (isspace(*value))
++value; /* Skip to start of value */
+ /* XXX: should strip trailing whitespace as well */
+
ap_table_mergen(r->headers_in, copy, value);
/* the header was too long; at the least we should skip extra data */
if (len >= MAX_STRING_LEN - 1) {
- char junk[MAX_STRING_LEN];
- while ((len = getline(junk, MAX_STRING_LEN, c->client, 1))
- >= MAX_STRING_LEN - 1) /* soak up the extra data */
- ;
- if (len == 0) /* time to exit the larger loop as well */
- break;
+ while ((len = getline(field, MAX_STRING_LEN, c->client, 1))
+ >= MAX_STRING_LEN - 1) {
+ /* soak up the extra data */
+ }
+ if (len == 0) /* time to exit the larger loop as well */
+ break;
}
}
}
@@ -798,8 +803,10 @@
ap_keepalive_timeout("read request line", r);
if (!read_request_line(r)) {
ap_kill_timeout(r);
- if (r->status != HTTP_REQUEST_TIME_OUT) /* we must have had an error.*/
+ if (r->status != HTTP_REQUEST_TIME_OUT) {
+ /* we must have had an error.*/
ap_log_transaction(r);
+ }
return NULL;
}
if (!r->assbackwards) {
@@ -832,7 +839,6 @@
if ((access_status = ap_run_post_read_request(r))) {
ap_die(access_status, r);
ap_log_transaction(r);
-
return NULL;
}