diff options
author | denis <> | 2007-01-24 20:13:30 +0000 |
---|---|---|
committer | denis <> | 2007-01-24 20:13:30 +0000 |
commit | 4fc8dd75be7e511823d6ff529411896b1b5e1c7e (patch) | |
tree | 051d4d695decd74735d31fddee2439b3f5818d04 | |
parent | 2d0215d79307deeaecff5494da115adafde5bccc (diff) |
Copy request before expanding url-encoded bytes
-rw-r--r-- | opentracker.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/opentracker.c b/opentracker.c index 2299844..17584ab 100644 --- a/opentracker.c +++ b/opentracker.c | |||
@@ -40,6 +40,9 @@ static char static_scratch[8192]; | |||
40 | #ifdef _DEBUG_FDS | 40 | #ifdef _DEBUG_FDS |
41 | static char fd_debug_space[0x10000]; | 41 | static char fd_debug_space[0x10000]; |
42 | #endif | 42 | #endif |
43 | #ifdef _DEBUG_HTTPERROR | ||
44 | static char debug_request[8192]; | ||
45 | #endif | ||
43 | 46 | ||
44 | static void carp(const char* routine) { | 47 | static void carp(const char* routine) { |
45 | buffer_puts(buffer_2,routine); | 48 | buffer_puts(buffer_2,routine); |
@@ -135,7 +138,7 @@ void httperror(int64 s,struct http_data* h,const char* title,const char* message | |||
135 | size_t reply_size = sprintf( static_scratch, "HTTP/1.0 %s\r\nContent-Type: text/html\r\nConnection: close\r\nContent-Length: %zd\r\n\r\n<title>%s</title>\n", | 138 | size_t reply_size = sprintf( static_scratch, "HTTP/1.0 %s\r\nContent-Type: text/html\r\nConnection: close\r\nContent-Length: %zd\r\n\r\n<title>%s</title>\n", |
136 | title, strlen(message)+strlen(title)+16-4,title+4); | 139 | title, strlen(message)+strlen(title)+16-4,title+4); |
137 | #ifdef _DEBUG_HTTPERROR | 140 | #ifdef _DEBUG_HTTPERROR |
138 | fprintf( stderr, "DEBUG: invalid request was: %s\n", (char*)array_start( &h->r ) ); | 141 | fprintf( stderr, "DEBUG: invalid request was: %s\n", debug_request ); |
139 | #endif | 142 | #endif |
140 | senddata(s,h,static_scratch,reply_size); | 143 | senddata(s,h,static_scratch,reply_size); |
141 | } | 144 | } |
@@ -169,6 +172,10 @@ void httpresponse(int64 s,struct http_data* h) | |||
169 | array_cat0(&h->r); | 172 | array_cat0(&h->r); |
170 | c = array_start(&h->r); | 173 | c = array_start(&h->r); |
171 | 174 | ||
175 | #ifdef _DEBUG_HTTPERROR | ||
176 | memcpy( debug_request, array_start(&h->r), array_bytes(&h->r) ); | ||
177 | #endif | ||
178 | |||
172 | if (byte_diff(c,4,"GET ")) { | 179 | if (byte_diff(c,4,"GET ")) { |
173 | e400: | 180 | e400: |
174 | return httperror(s,h,"400 Invalid Request","This server only understands GET."); | 181 | return httperror(s,h,"400 Invalid Request","This server only understands GET."); |
@@ -481,6 +488,10 @@ void handle_read( int64 clientsocket ) { | |||
481 | 488 | ||
482 | array_catb(&h->r,static_scratch,l); | 489 | array_catb(&h->r,static_scratch,l); |
483 | 490 | ||
491 | #ifdef _DEBUG_HTTPERROR | ||
492 | memcpy( debug_request, "500!\0", 5 ); | ||
493 | #endif | ||
494 | |||
484 | if( array_failed(&h->r)) | 495 | if( array_failed(&h->r)) |
485 | httperror(clientsocket,h,"500 Server Error","Request too long."); | 496 | httperror(clientsocket,h,"500 Server Error","Request too long."); |
486 | else if (array_bytes(&h->r)>8192) | 497 | else if (array_bytes(&h->r)>8192) |