]> granicus.if.org Git - php/commitdiff
- Added support for unknown POST content types (Zeev)
authorZeev Suraski <zeev@php.net>
Thu, 16 Sep 1999 23:18:15 +0000 (23:18 +0000)
committerZeev Suraski <zeev@php.net>
Thu, 16 Sep 1999 23:18:15 +0000 (23:18 +0000)
- Introduce the convert_to_*_ex() API in strlen()

13 files changed:
ChangeLog
ChangeLog.TODO
cgi_main.c
ext/standard/string.c
main/SAPI.c
main/SAPI.h
main/config.w32.h
main/main.c
main/php_content_types.c
main/rfc1867.c
mod_php4.c
php4dll.dsp
php4dllts.dsp

index 438c3bb4dbc35c0087817ce321f20b0981b0ad96..7fedf7dfcb4f583b54e64969f70a7d8f23dbcbd1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,7 @@ PHP 4.0 CHANGE LOG                                                    ChangeLog
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 
 ?? ?? 1999, Version 4.0 Beta 3
+- Added support for unknown POST content types (Zeev)
 - Added "wddx" serialization handler for session module (Sascha)
   (automatically enabled, if you compile with --with-wddx)
 - Fixed deserializing objects (Thies)
index 413b1ff765ee03b9c371aedaaa69a4d0f6f351a5..17b9223544aec658a93cd280e3bd9cac39fbba7f 100644 (file)
@@ -35,12 +35,6 @@ March 1 1999, Version 3.0.7
   variables.
 - Clean up apxs build
 - Add INSTALL.REDHAT file to walk RedHat users through the install
-- Added optional second argument to mysql_fetch_array();  MYSQL_ASSOC will
-  cause the resulting array to contain the associative indices only,
-  MYSQL_NUM will cause the array to contain the numeric indices only (like
-  mysql_fetch_row()) and MYSQL_BOTH would cause them both to be defined
-  (default).
-- Backport the Zend debugging memory manager into the PHP 3.0.x tree.
 - Add function_exists() function.
 - Add another version of WDDX module
   (we need to pick a single implementation here)
@@ -76,8 +70,6 @@ March 1 1999, Version 3.0.7
 - Fix bug in pdf_close() function
 - Add WDDX support (see http://www.wddx.org for more info)
 - Add similar_text() function
-- Constructors of parent classes weren't accessible to derived classes (as
-  of 3.0.6).  Fixed.
 - Introduce simple regex compilation cache
 
 
index 6056d4fd8d3a1f78c128540a83e21305ce4b54ee..4a165b80c553ff01ac5263a729c11ee4d1a22e69 100644 (file)
@@ -143,7 +143,9 @@ static sapi_module_struct sapi_module = {
        sapi_cgi_send_header,                   /* send header handler */
 
        sapi_cgi_read_post,                             /* read POST data */
-       sapi_cgi_read_cookies                   /* read Cookies */
+       sapi_cgi_read_cookies,                  /* read Cookies */
+
+       STANDARD_SAPI_MODULE_PROPERTIES
 };
 
 
index 6c3ceb5f466b4861d8fd96a5701533b8ea515559..2e26fa46fd9aa9ebd6a8e117192e471ccf065f5a 100644 (file)
@@ -82,13 +82,13 @@ PHP_FUNCTION(bin2hex)
    Get string length */
 PHP_FUNCTION(strlen)
 {
-       pval *str;
+       pval **str;
        
-       if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &str) == FAILURE) {
+       if (ARG_COUNT(ht) != 1 || getParametersEx(1, &str) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
-       convert_to_string(str);
-       RETVAL_LONG(str->value.str.len);
+       convert_to_string_ex(str);
+       RETVAL_LONG((*str)->value.str.len);
 }
 /* }}} */
 
index 852dfd40f37157d114d4f2b01ce41de58b5e01c3..3b94176b87ac841ae3ac9af2aad2d74bc5468cd0 100644 (file)
@@ -41,7 +41,6 @@ SAPI_POST_READER_FUNC(sapi_read_standard_form_data);
 
 static sapi_post_content_type_reader supported_post_content_types[] = {
        { DEFAULT_POST_CONTENT_TYPE,    sizeof(DEFAULT_POST_CONTENT_TYPE)-1,    sapi_read_standard_form_data },
-       { MULTIPART_CONTENT_TYPE,               sizeof(MULTIPART_CONTENT_TYPE)-1,               rfc1867_post_reader     },
        { NULL, 0, NULL }
 };
 
@@ -65,14 +64,11 @@ SAPI_API void (*sapi_error)(int error_type, const char *message, ...);
 
 SAPI_API void sapi_startup(sapi_module_struct *sf)
 {
-       sapi_post_content_type_reader *post_content_type_reader=supported_post_content_types;
-
        sapi_module = *sf;
        zend_hash_init(&known_post_content_types, 5, NULL, NULL, 1);
-       while (post_content_type_reader->content_type) {
-               sapi_register_post_reader(post_content_type_reader);
-               post_content_type_reader++;
-       }
+
+       sapi_register_post_reader(supported_post_content_types);
+
 #ifdef ZTS
        sapi_globals_id = ts_allocate_id(sizeof(sapi_globals_struct), NULL, NULL);
 #endif
@@ -100,6 +96,8 @@ static void sapi_read_post_data(SLS_D)
        char *content_type = estrndup(SG(request_info).content_type, content_type_length);
        char *p;
        char oldchar=0;
+       void (*post_reader_func)(char *content_type_dup SLS_DC);
+
 
        /* dedicated implementation for increased performance:
         * - Make the content type lowercase
@@ -120,14 +118,19 @@ static void sapi_read_post_data(SLS_D)
                }
        }
 
-       if (zend_hash_find(&known_post_content_types, content_type, content_type_length+1, (void **) &post_content_type_reader)==FAILURE) {
-               sapi_module.sapi_error(E_COMPILE_ERROR, "Unsupported content type:  '%s'", content_type);
-               return;
+       if (zend_hash_find(&known_post_content_types, content_type, content_type_length+1, (void **) &post_content_type_reader)==SUCCESS) {
+               post_reader_func = post_content_type_reader->post_reader;
+       } else {
+               if (!sapi_module.default_post_reader) {
+                       sapi_module.sapi_error(E_COMPILE_ERROR, "Unsupported content type:  '%s'", content_type);
+                       return;
+               }
+               post_reader_func = sapi_module.default_post_reader;
        }
        if (oldchar) {
                *(p-1) = oldchar;
        }
-       post_content_type_reader->post_reader(content_type SLS_CC);
+       post_reader_func(content_type SLS_CC);
        efree(content_type);
 }
 
@@ -154,6 +157,7 @@ SAPI_POST_READER_FUNC(sapi_read_standard_form_data)
                }
        }
        SG(request_info).post_data[total_read_bytes] = 0;  /* terminating NULL */
+       SG(request_info).post_data_length = total_read_bytes;
 }
 
 
@@ -295,6 +299,20 @@ SAPI_API int sapi_send_headers()
 }
 
 
+SAPI_API int sapi_register_post_readers(sapi_post_content_type_reader *post_content_type_readers)
+{
+       sapi_post_content_type_reader *p=post_content_type_readers;
+
+       while (p->content_type) {
+               if (sapi_register_post_reader(p)==FAILURE) {
+                       return FAILURE;
+               }
+               p++;
+       }
+       return SUCCESS;
+}
+
+
 SAPI_API int sapi_register_post_reader(sapi_post_content_type_reader *post_content_type_reader)
 {
        return zend_hash_add(&known_post_content_types, post_content_type_reader->content_type, post_content_type_reader->content_type_len+1, (void *) post_content_type_reader, sizeof(sapi_post_content_type_reader), NULL);
@@ -305,3 +323,11 @@ SAPI_API void sapi_unregister_post_reader(sapi_post_content_type_reader *post_co
 {
        zend_hash_del(&known_post_content_types, post_content_type_reader->content_type, post_content_type_reader->content_type_len+1);
 }
+
+
+SAPI_API int sapi_register_default_post_reader(void (*default_post_reader)(char *content_type_dup SLS_DC))
+{
+       sapi_module.default_post_reader = default_post_reader;
+       return SUCCESS;
+}
+
index 95d82a8747a2544ccabf29a1d6f44c433ce50fbe..0433cca55b054e3a50e2365a609bc136e3c3f2ec 100644 (file)
@@ -63,6 +63,7 @@ typedef struct {
        char *post_data;
        char *cookie_data;
        uint content_length;
+       uint post_data_length;
 
        char *path_translated;
        char *request_uri;
@@ -118,8 +119,10 @@ SAPI_API void sapi_deactivate(SLS_D);
 SAPI_API int sapi_add_header(char *header_line, uint header_line_len);
 SAPI_API int sapi_send_headers();
 
+SAPI_API int sapi_register_post_readers(sapi_post_content_type_reader *post_content_type_readers);
 SAPI_API int sapi_register_post_reader(sapi_post_content_type_reader *post_content_type_reader);
 SAPI_API void sapi_unregister_post_reader(sapi_post_content_type_reader *post_content_type_reader);
+SAPI_API int sapi_register_default_post_reader(void (*default_post_reader)(char *content_type_dup SLS_DC));
 
 struct _sapi_module_struct {
        char *name;
@@ -137,6 +140,8 @@ struct _sapi_module_struct {
 
        int (*read_post)(char *buffer, uint count_bytes SLS_DC);
        char *(*read_cookies)(SLS_D);
+
+       void (*default_post_reader)(char *content_type_dup SLS_DC);
 };
 
 
@@ -157,4 +162,6 @@ struct _sapi_module_struct {
 
 SAPI_POST_READER_FUNC(sapi_read_standard_form_data);
 
+#define STANDARD_SAPI_MODULE_PROPERTIES NULL
+
 #endif /* _NEW_SAPI_H */
index a9ffa533f2cc829ed1565466f8cbc97af65e9fbf..4160aa6c656308e45481b49d83c526bf615e7283 100644 (file)
 #define HAVE_BINDLIB 1
 
 /* set to enable bcmath */
-#define WITH_BCMATH 0
+#define WITH_BCMATH 1
+
+/* set to enable bundled PCRE library */
+#define HAVE_BUNDLED_PCRE      1
+
 /* should be added to runtime config*/
 #define PHP3_URL_FOPEN 1
 
index 6903623fa2011ec16c0ed5a839253a04b116ec22..c135b98e9ed6aa67e5a8ce462b8a30efe3ab487f 100644 (file)
@@ -64,6 +64,8 @@
 #include "zend_highlight.h"
 #include "zend_indent.h"
 
+#include "php_content_types.h"
+
 #if USE_SAPI
 #include "serverapi/sapi.h"
 void *gLock;
@@ -876,6 +878,7 @@ int php_module_startup(sapi_module_struct *sf)
        zuv.short_tags = (unsigned char) PG(short_tags);
        zuv.asp_tags = (unsigned char) PG(asp_tags);
        zend_set_utility_values(&zuv);
+       php_startup_SAPI_content_types();
 
        if (module_startup_modules() == FAILURE) {
                php_printf("Unable to start modules\n");
index 8ee79dc0e5e2e114eee51bd32939042c8b15df92..40787b5b659ff1e8a89b6ee8c9d14d2b3511dc7d 100644 (file)
@@ -5,10 +5,21 @@
 static sapi_post_content_type_reader php_post_content_types[] = {
        { MULTIPART_CONTENT_TYPE,               sizeof(MULTIPART_CONTENT_TYPE)-1,               rfc1867_post_reader     },
        { NULL, 0, NULL }
+};
+
+
+SAPI_POST_READER_FUNC(php_default_post_reader)
+{
+       ELS_FETCH();
+
+       sapi_read_standard_form_data(content_type_dup SLS_CC);
+       SET_VAR_STRINGL("HTTP_RAW_POST_DATA", SG(request_info).post_data, SG(request_info).post_data_length);
 }
 
+
 int php_startup_SAPI_content_types()
 {
        sapi_register_post_readers(php_post_content_types);
+       sapi_register_default_post_reader(php_default_post_reader);
        return SUCCESS;
 }
index d8ba333130cf6e2f2e8bd64e8b51d2f8b031483a..d210d091a9adc53c2160d0ea1384e459e8dfbd66 100644 (file)
@@ -253,7 +253,7 @@ SAPI_POST_READER_FUNC(rfc1867_post_reader)
 
        sapi_read_standard_form_data(content_type_dup SLS_CC);
        if (SG(request_info).post_data) {
-               php_mime_split(SG(request_info).post_data, SG(request_info).content_length, boundary);
+               php_mime_split(SG(request_info).post_data, SG(request_info).post_data_length, boundary);
                efree(SG(request_info).post_data);
                SG(request_info).post_data = NULL;
        }
index 77fff0e5d4309ff9ba56c11faccfa5e49f75310e..1d78fa0e58b7488d87d66f03489069269ac7d7e8 100644 (file)
@@ -193,7 +193,9 @@ sapi_module_struct sapi_module = {
        NULL,                                                   /* send header handler */
 
        sapi_apache_read_post,                  /* read POST data */
-       sapi_apache_read_cookies                /* read Cookies */
+       sapi_apache_read_cookies,               /* read Cookies */
+
+       STANDARD_SAPI_MODULE_PROPERTIES
 };
 
 
index f3ad32234e564b73c00a1518820c4f31e4fcad19..6e398f40878da9f5b8da2aec3fc0909b8d7e13a1 100644 (file)
@@ -384,6 +384,15 @@ SOURCE=.\ext\odbc\php_odbc.c
 # Begin Source File\r
 \r
 SOURCE=.\ext\pcre\php_pcre.c\r
+\r
+!IF  "$(CFG)" == "php4dll - Win32 Debug"\r
+\r
+# ADD CPP /D "STATIC"\r
+\r
+!ELSEIF  "$(CFG)" == "php4dll - Win32 Release"\r
+\r
+!ENDIF \r
+\r
 # End Source File\r
 # Begin Source File\r
 \r
@@ -595,22 +604,67 @@ SOURCE=.\regex\regfree.c
 # Begin Source File\r
 \r
 SOURCE=.\ext\pcre\pcrelib\chartables.c\r
+\r
+!IF  "$(CFG)" == "php4dll - Win32 Debug"\r
+\r
+# ADD CPP /D "STATIC"\r
+\r
+!ELSEIF  "$(CFG)" == "php4dll - Win32 Release"\r
+\r
+!ENDIF \r
+\r
 # End Source File\r
 # Begin Source File\r
 \r
 SOURCE=.\ext\pcre\pcrelib\get.c\r
+\r
+!IF  "$(CFG)" == "php4dll - Win32 Debug"\r
+\r
+# ADD CPP /D "STATIC"\r
+\r
+!ELSEIF  "$(CFG)" == "php4dll - Win32 Release"\r
+\r
+!ENDIF \r
+\r
 # End Source File\r
 # Begin Source File\r
 \r
 SOURCE=.\ext\pcre\pcrelib\maketables.c\r
+\r
+!IF  "$(CFG)" == "php4dll - Win32 Debug"\r
+\r
+# ADD CPP /D "STATIC"\r
+\r
+!ELSEIF  "$(CFG)" == "php4dll - Win32 Release"\r
+\r
+!ENDIF \r
+\r
 # End Source File\r
 # Begin Source File\r
 \r
 SOURCE=.\ext\pcre\pcrelib\pcre.c\r
+\r
+!IF  "$(CFG)" == "php4dll - Win32 Debug"\r
+\r
+# ADD CPP /D "STATIC"\r
+\r
+!ELSEIF  "$(CFG)" == "php4dll - Win32 Release"\r
+\r
+!ENDIF \r
+\r
 # End Source File\r
 # Begin Source File\r
 \r
 SOURCE=.\ext\pcre\pcrelib\study.c\r
+\r
+!IF  "$(CFG)" == "php4dll - Win32 Debug"\r
+\r
+# ADD CPP /D "STATIC"\r
+\r
+!ELSEIF  "$(CFG)" == "php4dll - Win32 Release"\r
+\r
+!ENDIF \r
+\r
 # End Source File\r
 # End Group\r
 # Begin Group "Header Files No. 3"\r
index 58379866bc32315cdca7f84f76716faeaeb998c0..543efb184efbd7df55274b5ba55137913f24f1c6 100644 (file)
@@ -392,6 +392,15 @@ SOURCE=.\ext\odbc\php_odbc.c
 # Begin Source File\r
 \r
 SOURCE=.\ext\pcre\php_pcre.c\r
+\r
+!IF  "$(CFG)" == "php4dllts - Win32 Debug_TS"\r
+\r
+# ADD CPP /D "STATIC"\r
+\r
+!ELSEIF  "$(CFG)" == "php4dllts - Win32 Release_TS"\r
+\r
+!ENDIF \r
+\r
 # End Source File\r
 # Begin Source File\r
 \r
@@ -582,51 +591,76 @@ SOURCE=.\ext\standard\uniqid.h
 SOURCE=.\ext\standard\url.h\r
 # End Source File\r
 # End Group\r
-# Begin Group "Regular Expressions"\r
+# Begin Group "PCRE"\r
 \r
 # PROP Default_Filter ""\r
-# Begin Source File\r
+# Begin Group "Source Files No. 3"\r
 \r
-SOURCE=.\regex\regcomp.c\r
-# End Source File\r
+# PROP Default_Filter ".c"\r
 # Begin Source File\r
 \r
-SOURCE=.\regex\regerror.c\r
-# End Source File\r
-# Begin Source File\r
+SOURCE=.\ext\pcre\pcrelib\chartables.c\r
 \r
-SOURCE=.\regex\regexec.c\r
-# End Source File\r
-# Begin Source File\r
+!IF  "$(CFG)" == "php4dllts - Win32 Debug_TS"\r
 \r
-SOURCE=.\regex\regfree.c\r
-# End Source File\r
-# End Group\r
-# Begin Group "PCRE"\r
+# ADD CPP /D "STATIC"\r
 \r
-# PROP Default_Filter ""\r
-# Begin Group "Source Files No. 3"\r
+!ELSEIF  "$(CFG)" == "php4dllts - Win32 Release_TS"\r
 \r
-# PROP Default_Filter ".c"\r
-# Begin Source File\r
+!ENDIF \r
 \r
-SOURCE=.\ext\pcre\pcrelib\chartables.c\r
 # End Source File\r
 # Begin Source File\r
 \r
 SOURCE=.\ext\pcre\pcrelib\get.c\r
+\r
+!IF  "$(CFG)" == "php4dllts - Win32 Debug_TS"\r
+\r
+# ADD CPP /D "STATIC"\r
+\r
+!ELSEIF  "$(CFG)" == "php4dllts - Win32 Release_TS"\r
+\r
+!ENDIF \r
+\r
 # End Source File\r
 # Begin Source File\r
 \r
 SOURCE=.\ext\pcre\pcrelib\maketables.c\r
+\r
+!IF  "$(CFG)" == "php4dllts - Win32 Debug_TS"\r
+\r
+# ADD CPP /D "STATIC"\r
+\r
+!ELSEIF  "$(CFG)" == "php4dllts - Win32 Release_TS"\r
+\r
+!ENDIF \r
+\r
 # End Source File\r
 # Begin Source File\r
 \r
 SOURCE=.\ext\pcre\pcrelib\pcre.c\r
+\r
+!IF  "$(CFG)" == "php4dllts - Win32 Debug_TS"\r
+\r
+# ADD CPP /D "STATIC"\r
+\r
+!ELSEIF  "$(CFG)" == "php4dllts - Win32 Release_TS"\r
+\r
+!ENDIF \r
+\r
 # End Source File\r
 # Begin Source File\r
 \r
 SOURCE=.\ext\pcre\pcrelib\study.c\r
+\r
+!IF  "$(CFG)" == "php4dllts - Win32 Debug_TS"\r
+\r
+# ADD CPP /D "STATIC"\r
+\r
+!ELSEIF  "$(CFG)" == "php4dllts - Win32 Release_TS"\r
+\r
+!ENDIF \r
+\r
 # End Source File\r
 # End Group\r
 # Begin Group "Header Files No. 3"\r
@@ -642,6 +676,26 @@ SOURCE=.\ext\pcre\pcrelib\pcre.h
 # End Source File\r
 # End Group\r
 # End Group\r
+# Begin Group "Regular Expressions"\r
+\r
+# PROP Default_Filter ""\r
+# Begin Source File\r
+\r
+SOURCE=.\regex\regcomp.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\regex\regerror.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\regex\regexec.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\regex\regfree.c\r
+# End Source File\r
+# End Group\r
 # End Group\r
 # Begin Group "Win32"\r
 \r