use our url parser
[m6w6/ext-http] / php_http_message.c
index 70dcae82c933e68c9927b1dd5ed404a61b086e07..c96531748c166ad8c86407e7d4c278650055fcad 100644 (file)
@@ -940,6 +940,7 @@ static HashTable *php_http_message_object_get_props(zval *object TSRMLS_DC)
        HashTable *props = zend_get_std_object_handlers()->get_properties(object TSRMLS_CC);
        zval array, *parent, *body;
        char *version;
+       int verlen;
 
        PHP_HTTP_MESSAGE_OBJECT_INIT(obj);
        INIT_PZVAL_ARRAY(&array, props);
@@ -963,7 +964,8 @@ static HashTable *php_http_message_object_get_props(zval *object TSRMLS_DC)
        } while(0)
 
        ASSOC_PROP(long, "type", obj->message->type);
-       ASSOC_STRINGL_EX("httpVersion", version, spprintf(&version, 0, "%u.%u", obj->message->http.version.major, obj->message->http.version.minor), 0);
+       verlen = spprintf(&version, 0, "%u.%u", obj->message->http.version.major, obj->message->http.version.minor);
+       ASSOC_STRINGL_EX("httpVersion", version, verlen, 0);
 
        switch (obj->message->type) {
                case PHP_HTTP_REQUEST:
@@ -1039,13 +1041,15 @@ static PHP_METHOD(HttpMessage, __construct)
 
                if (s && php_http_message_parser_init(&p TSRMLS_CC)) {
                        unsigned flags = (greedy ? PHP_HTTP_MESSAGE_PARSER_GREEDY : 0);
+                       php_http_buffer_t buf;
 
-                       if (PHP_HTTP_MESSAGE_PARSER_STATE_FAILURE == php_http_message_parser_parse_stream(&p, s, flags, &msg)) {
+                       php_http_buffer_init_ex(&buf, 0x1000, PHP_HTTP_BUFFER_INIT_PREALLOC);
+                       if (PHP_HTTP_MESSAGE_PARSER_STATE_FAILURE == php_http_message_parser_parse_stream(&p, &buf, s, flags, &msg)) {
                                if (!EG(exception)) {
                                        php_http_throw(bad_message, "Could not parse message from stream", NULL);
                                }
                        }
-
+                       php_http_buffer_dtor(&buf);
                        php_http_message_parser_dtor(&p);
                }