cvs: php4(PHP_4_2_0) /main rfc1867.c
| From: | Stefan Esser | Date: | Sun, 23 Jun 2002 17:26:03 +0000 |
| Subject: | cvs: php4(PHP_4_2_0) /main rfc1867.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-12466@lists.php.net to get a copy of this message | ||
sesser Sun Jun 23 13:26:03 2002 EDT
Modified files: (Branch: PHP_4_2_0)
/php4/main rfc1867.c
Log:
MFH: several fixes to fileupload code
Index: php4/main/rfc1867.c
diff -u php4/main/rfc1867.c:1.94.2.4 php4/main/rfc1867.c:1.94.2.5
--- php4/main/rfc1867.c:1.94.2.4 Sat May 11 07:58:52 2002
+++ php4/main/rfc1867.c Sun Jun 23 13:26:03 2002
@@ -16,7 +16,7 @@
| Jani Taskinen <sniper@php.net> |
+----------------------------------------------------------------------+
*/
-/* $Id: rfc1867.c,v 1.94.2.4 2002/05/11 11:58:52 zeev Exp $ */
+/* $Id: rfc1867.c,v 1.94.2.5 2002/06/23 17:26:03 sesser Exp $ */
/*
* This product includes software developed by the Apache Group
@@ -158,7 +158,7 @@
*/
static int fill_buffer(multipart_buffer *self TSRMLS_DC)
{
- int bytes_to_read, actual_read = 0;
+ int bytes_to_read, total_read = 0, actual_read = 0;
/* shift the existing data if necessary */
if (self->bytes_in_buffer > 0 && self->buf_begin != self->buffer) {
@@ -171,7 +171,7 @@
bytes_to_read = self->bufsize - self->bytes_in_buffer;
/* read the required number of bytes */
- if (bytes_to_read > 0) {
+ while (bytes_to_read > 0) {
char *buf = self->buffer + self->bytes_in_buffer;
@@ -181,10 +181,14 @@
if (actual_read > 0) {
self->bytes_in_buffer += actual_read;
SG(read_post_bytes) += actual_read;
+ total_read += actual_read;
+ bytes_to_read -= actual_read;
+ } else {
+ break;
}
}
- return actual_read;
+ return total_read;
}
@@ -334,7 +338,12 @@
/* add header to table */
char *key = line;
- char *value = strchr(line, ':');
+ char *value = NULL;
+
+ /* space in the beginning means same header */
+ if (!isspace(line[0])) {
+ value = strchr(line, ':');
+ }
if (value) {
*value = 0;
@@ -343,7 +352,7 @@
entry.value = estrdup(value);
entry.key = estrdup(key);
- } else if (zend_llist_remove_tail(header)) { /* If no ':' on the line, add to previous
line */
+ } else if (header->count) { /* If no ':' on the line, add to previous line */
prev_len = strlen(prev_entry.value);
cur_len = strlen(line);
@@ -354,6 +363,10 @@
entry.value[cur_len + prev_len] = '\0';
entry.key = estrdup(prev_entry.key);
+
+ zend_llist_remove_tail(header);
+ } else {
+ continue;
}
zend_llist_add_element(header, &entry);
@@ -400,7 +413,9 @@
++pos;
}
}
- ++pos;
+ if (*pos) {
+ ++pos;
+ }
} else ++pos;
}
@@ -706,15 +721,21 @@
/* If file_uploads=off, skip the file part */
if (!PG(file_uploads)) {
- efree(filename);
- if (param) efree(param);
+ if (filename) {
+ efree(filename);
+ }
+ if (param) {
+ efree(param);
+ }
continue;
}
/* Return with an error if the posted data is garbled */
if (!param) {
sapi_module.sapi_error(E_WARNING, "File Upload Mime headers garbled");
- efree(filename);
+ if (filename) {
+ efree(filename);
+ }
SAFE_RETURN;
}
@@ -729,7 +750,9 @@
cancel_upload = 0;
if(strlen(filename) == 0) {
+#ifdef DEBUG_FILE_UPLOAD
sapi_module.sapi_error(E_NOTICE, "No file uploaded");
+#endif
cancel_upload = UPLOAD_ERROR_D;
}
@@ -822,7 +845,7 @@
s = NULL;
/* Possible Content-Type: */
- if (!(cd = php_mime_get_hdr_value(header, "Content-Type")) || filename ==
"") {
+ if (cancel_upload || !(cd = php_mime_get_hdr_value(header, "Content-Type"))) {
cd = "";
} else {
/* fix for Opera 6.01 */