]> granicus.if.org Git - php/commitdiff
fix for #20198:
authorHartmut Holzgraefe <hholzgra@php.net>
Fri, 8 Nov 2002 08:41:52 +0000 (08:41 +0000)
committerHartmut Holzgraefe <hholzgra@php.net>
Fri, 8 Nov 2002 08:41:52 +0000 (08:41 +0000)
"always_populate_raw_post_data = On" breaks HTTP file uploads

main/SAPI.c
main/php_content_types.c

index 7d0392465c07b75ca7fa483221a3e68210244758..b2bb58a2884f626bf86323dbaf8977dd317f308a 100644 (file)
@@ -150,15 +150,19 @@ static void sapi_read_post_data(TSRMLS_D)
                }
        }
 
+       /* now try to find an appropriate POST content handler */
        if (zend_hash_find(&known_post_content_types, content_type, content_type_length+1, (void **) &post_entry)==SUCCESS) {
+               /* found one, register it for use */
                SG(request_info).post_entry = post_entry;
                post_reader_func = post_entry->post_reader;
        } else {
+               /* fallback */
+               SG(request_info).post_entry = NULL;
                if (!sapi_module.default_post_reader) {
+                       /* no default reader ? */
                        sapi_module.sapi_error(E_WARNING, "Unsupported content type:  '%s'", content_type);
                        return;
                }
-               SG(request_info).post_entry = NULL;
        }
        if (oldchar) {
                *(p-1) = oldchar;
index dfbb3ffee652c1e404936238bdec672afc481662..487627afb06132a2391cd1c994509673bb3aaf05 100644 (file)
@@ -37,12 +37,25 @@ static sapi_post_entry php_post_entries[] = {
  */
 SAPI_API SAPI_POST_READER_FUNC(php_default_post_reader)
 {
-       char *data;
+       char *data = NULL;
 
        if(PG(always_populate_raw_post_data)) {
-               if(!SG(request_info).post_data) sapi_read_standard_form_data(TSRMLS_C);
-               data = estrndup(SG(request_info).post_data, SG(request_info).post_data_length);
-               SET_VAR_STRINGL("HTTP_RAW_POST_DATA", data, SG(request_info).post_data_length);
+               if(NULL == SG(request_info).post_data) { /* no data yet */
+                       if(NULL == SG(request_info).post_entry) {
+                               /* no post handler registered, so we just swallow the data */
+                               sapi_read_standard_form_data(TSRMLS_C);
+                               data = SG(request_info).post_data;
+                               SG(request_info).post_data = NULL;
+                               SG(request_info).post_data_length = 0;
+                       }
+               } else {
+                       /* copy existing post data */
+                       data = estrndup(SG(request_info).post_data, SG(request_info).post_data_length);
+               }
+               
+               if(data) {
+                       SET_VAR_STRINGL("HTTP_RAW_POST_DATA", data, SG(request_info).post_data_length);
+               }
        }
 }
 /* }}} */