- Fix crash with non string property
[m6w6/ext-http] / php_http_std_defs.h
index cf3e15fe97b07c251e6a8910c33049accc98684e..0c5a9e5b3aa875f8587fc8c9977850cef5f1c638 100644 (file)
@@ -6,7 +6,7 @@
     | modification, are permitted provided that the conditions mentioned |
     | in the accompanying LICENSE file are met.                          |
     +--------------------------------------------------------------------+
-    | Copyright (c) 2004-2006, Michael Wallner <mike@php.net>            |
+    | Copyright (c) 2004-2010, Michael Wallner <mike@php.net>            |
     +--------------------------------------------------------------------+
 */
 
@@ -58,6 +58,13 @@ typedef int STATUS;
                Z_ARRVAL(zv) = (ht); \
        }
 
+#ifndef MAKE_COPY_ZVAL
+# define MAKE_COPY_ZVAL(ppzv, pzv) \
+       *(pzv) = **(ppzv);            \
+       zval_copy_ctor((pzv));        \
+       INIT_PZVAL((pzv));
+#endif
+    
 /* return bool (v == SUCCESS) */
 #define RETVAL_SUCCESS(v) RETVAL_BOOL(SUCCESS == (v))
 #define RETURN_SUCCESS(v) RETURN_BOOL(SUCCESS == (v))
@@ -83,12 +90,12 @@ typedef int STATUS;
 #define RETURN_PROP(n) RETURN_PROP_EX(getThis(), n)
 #define RETVAL_PROP_EX(this, n) \
        { \
-               zval *__prop = GET_PROP_EX(this, n); \
+               zval *__prop = zend_read_property(THIS_CE, this, ZEND_STRS(#n)-1, 0 TSRMLS_CC); \
                RETVAL_ZVAL(__prop, 1, 0); \
        }
 #define RETURN_PROP_EX(this, n) \
        { \
-               zval *__prop = GET_PROP_EX(this, n); \
+               zval *__prop = zend_read_property(THIS_CE, this, ZEND_STRS(#n)-1, 0 TSRMLS_CC); \
                RETURN_ZVAL(__prop, 1, 0); \
        }
 
@@ -104,11 +111,14 @@ typedef int STATUS;
 /* max URL length */
 #define HTTP_URL_MAXLEN 4096
 
+/* max request method length */
+#define HTTP_REQUEST_METHOD_MAXLEN 31
+
 /* def URL arg separator */
 #define HTTP_URL_ARGSEP "&"
 
 /* send buffer size */
-#define HTTP_SENDBUF_SIZE 8000 /*40960*/
+#define HTTP_SENDBUF_SIZE 40960
 
 /* CURL buffer size */
 #define HTTP_CURLBUF_SIZE 16384
@@ -179,59 +189,17 @@ typedef int STATUS;
 #      define getObject(t, o) getObjectEx(t, o, getThis())
 #      define getObjectEx(t, o, v) t * o = ((t *) zend_object_store_get_object(v TSRMLS_CC))
 #      define putObject(t, o) zend_objects_store_put(o, (zend_objects_store_dtor_t) zend_objects_destroy_object, (zend_objects_free_object_storage_t) _ ##t## _free, NULL TSRMLS_CC);
-#      ifndef WONKY
-#              define freeObject(o) \
-                       if (OBJ_GUARDS(o)) { \
-                               zend_hash_destroy(OBJ_GUARDS(o)); \
-                               FREE_HASHTABLE(OBJ_GUARDS(o)); \
-                       } \
-                       if (OBJ_PROP(o)) { \
-                               zend_hash_destroy(OBJ_PROP(o)); \
-                               FREE_HASHTABLE(OBJ_PROP(o)); \
-                       } \
-                       efree(o);
-#      else
-#              define freeObject(o) \
-                       if (OBJ_PROP(o)) { \
-                               zend_hash_destroy(OBJ_PROP(o)); \
-                               FREE_HASHTABLE(OBJ_PROP(o)); \
-                       } \
+#      define freeObject(o) \
+                       zend_object_std_dtor(&o->zo TSRMLS_CC); \
                        efree(o);
-#      endif
 #      define OBJ_PROP(o) (o)->zo.properties
 #      define OBJ_GUARDS(o) (o)->zo.guards
 
-#      define DCL_STATIC_PROP(a, t, n, v)              zend_declare_property_ ##t(OBJ_PROP_CE, (#n), sizeof(#n)-1, (v), (ZEND_ACC_ ##a | ZEND_ACC_STATIC) TSRMLS_CC)
-#      define DCL_STATIC_PROP_Z(a, n, v)               zend_declare_property(OBJ_PROP_CE, (#n), sizeof(#n)-1, (v), (ZEND_ACC_ ##a | ZEND_ACC_STATIC) TSRMLS_CC)
-#      define DCL_STATIC_PROP_N(a, n)                  zend_declare_property_null(OBJ_PROP_CE, (#n), sizeof(#n)-1, (ZEND_ACC_ ##a | ZEND_ACC_STATIC) TSRMLS_CC)
-#      define GET_STATIC_PROP_EX(ce, n)                zend_std_get_static_property(ce, (#n), sizeof(#n)-1, 0 TSRMLS_CC)
-#      define UPD_STATIC_PROP_EX(ce, t, n, v)  zend_update_static_property_ ##t(ce, #n, sizeof(#n)-1, (v) TSRMLS_CC)
-#      define UPD_STATIC_STRL_EX(ce, n, v, l)  zend_update_static_property_stringl(ce, #n, sizeof(#n)-1, (v), (l) TSRMLS_CC)
-#      define SET_STATIC_PROP_EX(ce, n, v)             zend_update_static_property(ce, #n, sizeof(#n)-1, v TSRMLS_CC)
-#      define GET_STATIC_PROP(n)                               *GET_STATIC_PROP_EX(OBJ_PROP_CE, n)
-#      define UPD_STATIC_PROP(t, n, v)                 UPD_STATIC_PROP_EX(OBJ_PROP_CE, t, n, v)
-#      define SET_STATIC_PROP(n, v)                    SET_STATIC_PROP_EX(OBJ_PROP_CE, n, v)
-#      define UPD_STATIC_STRL(n, v, l)                 UPD_STATIC_STRL_EX(OBJ_PROP_CE, n, v, l)
-
-#      define DCL_PROP(a, t, n, v)                             zend_declare_property_ ##t(OBJ_PROP_CE, (#n), sizeof(#n)-1, (v), (ZEND_ACC_ ##a) TSRMLS_CC)
-#      define DCL_PROP_Z(a, n, v)                              zend_declare_property(OBJ_PROP_CE, (#n), sizeof(#n)-1, (v), (ZEND_ACC_ ##a) TSRMLS_CC)
-#      define DCL_PROP_N(a, n)                                 zend_declare_property_null(OBJ_PROP_CE, (#n), sizeof(#n)-1, (ZEND_ACC_ ##a) TSRMLS_CC)
-#      define UPD_PROP(t, n, v)                                UPD_PROP_EX(getThis(), t, n, v)
-#      define UPD_PROP_EX(this, t, n, v)               zend_update_property_ ##t(OBJ_PROP_CE, this, (#n), sizeof(#n)-1, (v) TSRMLS_CC)
-#      define UPD_STRL(n, v, l)                                zend_update_property_stringl(OBJ_PROP_CE, getThis(), (#n), sizeof(#n)-1, (v), (l) TSRMLS_CC)
-#      define SET_PROP(n, z)                                   SET_PROP_EX(getThis(), n, z)
-#      define SET_PROP_EX(this, n, z)                  zend_update_property(OBJ_PROP_CE, this, (#n), sizeof(#n)-1, (z) TSRMLS_CC)
-#      define GET_PROP(n)                                              GET_PROP_EX(getThis(), n)
-#      define GET_PROP_EX(this, n)                     zend_read_property(OBJ_PROP_CE, this, (#n), sizeof(#n)-1, 0 TSRMLS_CC)
-
-#      define DCL_CONST(t, n, v) zend_declare_class_constant_ ##t(OBJ_PROP_CE, (n), sizeof(n)-1, (v) TSRMLS_CC)
-
 #      define ACC_PROP_PRIVATE(ce, flags)              ((flags & ZEND_ACC_PRIVATE) && (EG(scope) && ce == EG(scope))
 #      define ACC_PROP_PROTECTED(ce, flags)    ((flags & ZEND_ACC_PROTECTED) && (zend_check_protected(ce, EG(scope))))
 #      define ACC_PROP_PUBLIC(flags)                   (flags & ZEND_ACC_PUBLIC)
 #      define ACC_PROP(ce, flags)                              (ACC_PROP_PUBLIC(flags) || ACC_PROP_PRIVATE(ce, flags) || ACC_PROP_PROTECTED(ce, flags))
 
-#      define SET_EH_THROW() SET_EH_THROW_EX(zend_exception_get_default())
 #      define SET_EH_THROW_HTTP() SET_EH_THROW_EX(http_exception_get_default())
 #      define SET_EH_THROW_EX(ex) php_set_error_handling(EH_THROW, ex TSRMLS_CC)
 #      define SET_EH_NORMAL() php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC)
@@ -242,8 +210,8 @@ typedef int STATUS;
 #ifdef ZEND_ENGINE_2
 #      define with_error_handling(eh, ec) \
        { \
-               error_handling_t __eh = PG(error_handling); \
-               zend_class_entry *__ec= PG(exception_class); \
+               error_handling_t __eh = GLOBAL_ERROR_HANDLING; \
+               zend_class_entry *__ec= GLOBAL_EXCEPTION_CLASS; \
                php_set_error_handling(eh, ec TSRMLS_CC);
 #      define end_error_handling() \
                php_set_error_handling(__eh, __ec TSRMLS_CC); \
@@ -289,8 +257,8 @@ typedef int STATUS;
 #define HTTP_E_QUERYSTRING                     13L
 
 #ifdef ZEND_ENGINE_2
-#      define HTTP_BEGIN_ARGS_EX(class, method, ret_ref, req_args)     static ZEND_BEGIN_ARG_INFO_EX(args_for_ ##class## _ ##method , 0, ret_ref, req_args)
-#      define HTTP_BEGIN_ARGS_AR(class, method, ret_ref, req_args)     static ZEND_BEGIN_ARG_INFO_EX(args_for_ ##class## _ ##method , 1, ret_ref, req_args)
+#      define HTTP_BEGIN_ARGS_EX(class, method, ret_ref, req_args)     HTTP_STATIC_ARG_INFO ZEND_BEGIN_ARG_INFO_EX(args_for_ ##class## _ ##method , 0, ret_ref, req_args)
+#      define HTTP_BEGIN_ARGS_AR(class, method, ret_ref, req_args)     HTTP_STATIC_ARG_INFO ZEND_BEGIN_ARG_INFO_EX(args_for_ ##class## _ ##method , 1, ret_ref, req_args)
 #      define HTTP_END_ARGS                                                                            }
 #      define HTTP_EMPTY_ARGS_EX(class, method, ret_ref)                       HTTP_BEGIN_ARGS_EX(class, method, ret_ref, 0) HTTP_END_ARGS
 #      define HTTP_ARGS(class, method)                                                         args_for_ ##class## _ ##method
@@ -307,20 +275,20 @@ typedef int STATUS;
 #ifdef HTTP_HAVE_CURL
 #      ifdef ZEND_ENGINE_2
 #              define HTTP_DECLARE_ARG_PASS_INFO() \
-                       static \
+                       HTTP_STATIC_ARG_INFO \
                        ZEND_BEGIN_ARG_INFO(http_arg_pass_ref_2, 0) \
                                ZEND_ARG_PASS_INFO(0) \
                                ZEND_ARG_PASS_INFO(1) \
                        ZEND_END_ARG_INFO(); \
  \
-                       static \
+                       HTTP_STATIC_ARG_INFO \
                        ZEND_BEGIN_ARG_INFO(http_arg_pass_ref_3, 0) \
                                ZEND_ARG_PASS_INFO(0) \
                                ZEND_ARG_PASS_INFO(0) \
                                ZEND_ARG_PASS_INFO(1) \
                        ZEND_END_ARG_INFO(); \
  \
-                       static \
+                       HTTP_STATIC_ARG_INFO \
                        ZEND_BEGIN_ARG_INFO(http_arg_pass_ref_4, 0) \
                                ZEND_ARG_PASS_INFO(0) \
                                ZEND_ARG_PASS_INFO(0) \
@@ -328,7 +296,7 @@ typedef int STATUS;
                                ZEND_ARG_PASS_INFO(1) \
                        ZEND_END_ARG_INFO(); \
  \
-                       static \
+                       HTTP_STATIC_ARG_INFO \
                        ZEND_BEGIN_ARG_INFO(http_arg_pass_ref_5, 0) \
                                ZEND_ARG_PASS_INFO(0) \
                                ZEND_ARG_PASS_INFO(0) \
@@ -347,13 +315,13 @@ typedef int STATUS;
 #else
 #      ifdef ZEND_ENGINE_2
 #              define HTTP_DECLARE_ARG_PASS_INFO() \
-                       static \
+                       HTTP_STATIC_ARG_INFO \
                        ZEND_BEGIN_ARG_INFO(http_arg_pass_ref_2, 0) \
                                ZEND_ARG_PASS_INFO(0) \
                                ZEND_ARG_PASS_INFO(1) \
                        ZEND_END_ARG_INFO(); \
 \
-                       static \
+                       HTTP_STATIC_ARG_INFO \
                        ZEND_BEGIN_ARG_INFO(http_arg_pass_ref_4, 0) \
                                ZEND_ARG_PASS_INFO(0) \
                                ZEND_ARG_PASS_INFO(0) \
@@ -368,46 +336,14 @@ typedef int STATUS;
 #endif /* HTTP_HAVE_CURL */
 
 
-#ifndef TSRMLS_FETCH_FROM_CTX
-#      ifdef ZTS
-#              define TSRMLS_FETCH_FROM_CTX(ctx)       void ***tsrm_ls = (void ***) ctx
-#      else
-#              define TSRMLS_FETCH_FROM_CTX(ctx)
-#      endif
-#endif
-
-#ifndef TSRMLS_SET_CTX
-#      ifdef ZTS
-#              define TSRMLS_SET_CTX(ctx)      ctx = (void ***) tsrm_ls
-#      else
-#              define TSRMLS_SET_CTX(ctx)
-#      endif
-#endif
-
-#ifndef ZVAL_ZVAL
-#define ZVAL_ZVAL(z, zv, copy, dtor) {  \
-               int is_ref, refcount;           \
-               is_ref = (z)->is_ref;           \
-               refcount = (z)->refcount;       \
-               *(z) = *(zv);                   \
-               if (copy) {                     \
-                       zval_copy_ctor(z);          \
-           }                               \
-               if (dtor) {                     \
-                       if (!copy) {                \
-                               ZVAL_NULL(zv);          \
-                       }                           \
-                       zval_ptr_dtor(&zv);         \
-           }                               \
-               (z)->is_ref = is_ref;           \
-               (z)->refcount = refcount;       \
-       }
+#ifndef HAVE_CURL_SHARE_STRERROR
+#      define curl_share_strerror(dummy) "unknown error"
 #endif
-#ifndef RETVAL_ZVAL
-#define RETVAL_ZVAL(zv, copy, dtor)            ZVAL_ZVAL(return_value, zv, copy, dtor)
+#ifndef HAVE_CURL_EASY_STRERROR
+#      define curl_easy_strerror(dummy) "unknown error"
 #endif
-#ifndef RETURN_ZVAL
-#define RETURN_ZVAL(zv, copy, dtor)            { RETVAL_ZVAL(zv, copy, dtor); return; }
+#ifndef HAVE_CURL_MULTI_STRERROR
+#      define curl_multi_strerror(dummy) "unknown error"
 #endif
 
 #define PHP_MINIT_CALL(func) PHP_MINIT(func)(INIT_FUNC_ARGS_PASSTHRU)