X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_functions.c;h=079996986697c361a73f6c6a9e6ce520d24db4cc;hp=1f94df95a317757f252acb79f417cfe69acdced2;hb=dcc8cebf561d1e69e77b85fcd73b6a6c56b44748;hpb=51669004bbd20bcb4cd9d509799ff65e3998ea47 diff --git a/http_functions.c b/http_functions.c index 1f94df9..0799969 100644 --- a/http_functions.c +++ b/http_functions.c @@ -6,7 +6,7 @@ | modification, are permitted provided that the conditions mentioned | | in the accompanying LICENSE file are met. | +--------------------------------------------------------------------+ - | Copyright (c) 2004-2007, Michael Wallner | + | Copyright (c) 2004-2010, Michael Wallner | +--------------------------------------------------------------------+ */ @@ -43,6 +43,7 @@ PHP_FUNCTION(http_date) { long t = -1; + char *date; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &t) != SUCCESS) { RETURN_FALSE; @@ -52,7 +53,12 @@ PHP_FUNCTION(http_date) t = HTTP_G->request.time; } - RETURN_STRING(http_date(t), 0); + if (!(date = http_date(t))) { + http_error_ex(HE_WARNING, HTTP_E_INVALID_PARAM, "Could not compose date of timestamp %ld", t); + RETURN_FALSE; + } + + RETURN_STRING(date, 0); } /* }}} */ @@ -185,11 +191,12 @@ PHP_FUNCTION(http_build_str) \ if (rs_array) { \ HashPosition pos; \ - zval **value; \ + zval **value_ptr; \ \ - FOREACH_VAL(pos, supported, value) { \ - convert_to_string_ex(value); \ - add_assoc_double(rs_array, Z_STRVAL_PP(value), 1.0); \ + FOREACH_VAL(pos, supported, value_ptr) { \ + zval *value = http_zsep(IS_STRING, *value_ptr); \ + add_assoc_double(rs_array, Z_STRVAL_P(value), 1.0); \ + zval_ptr_dtor(&value); \ } \ } \ } \ @@ -256,7 +263,7 @@ PHP_FUNCTION(http_negotiate_content_type) Send HTTP status code. */ PHP_FUNCTION(http_send_status) { - int status = 0; + long status = 0; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &status) != SUCCESS) { RETURN_FALSE; @@ -675,10 +682,9 @@ PHP_FUNCTION(http_parse_cookie) if (allowed_extras_array) { allowed_extras = ecalloc(zend_hash_num_elements(Z_ARRVAL_P(allowed_extras_array)) + 1, sizeof(char *)); FOREACH_VAL(pos, allowed_extras_array, entry) { - ZVAL_ADDREF(*entry); - convert_to_string_ex(entry); - allowed_extras[i++] = estrndup(Z_STRVAL_PP(entry), Z_STRLEN_PP(entry)); - zval_ptr_dtor(entry); + zval *data = http_zsep(IS_STRING, *entry); + allowed_extras[i++] = estrndup(Z_STRVAL_P(data), Z_STRLEN_P(data)); + zval_ptr_dtor(&data); } } @@ -733,15 +739,18 @@ PHP_FUNCTION(http_parse_params) RETURN_FALSE; } - params = ecalloc(1, sizeof(zval)); + MAKE_STD_ZVAL(params); array_init(params); if (SUCCESS != http_parse_params(param, flags, Z_ARRVAL_P(params))) { - zval_dtor(params); - FREE_ZVAL(params); + zval_ptr_dtor(¶ms); RETURN_FALSE; } + object_init(return_value); add_property_zval(return_value, "params", params); +#ifdef ZEND_ENGINE_2 + zval_ptr_dtor(¶ms); +#endif } /* }}} */ @@ -853,7 +862,7 @@ PHP_FUNCTION(http_persistent_handles_ident) zval **bodyonly; \ \ /* check if only the body should be returned */ \ - if (options && (SUCCESS == zend_hash_find(Z_ARRVAL_P(options), "bodyonly", sizeof("bodyonly"), (void *) &bodyonly)) && zval_is_true(*bodyonly)) { \ + if (options && (SUCCESS == zend_hash_find(Z_ARRVAL_P(options), "bodyonly", sizeof("bodyonly"), (void *) &bodyonly)) && i_zend_is_true(*bodyonly)) { \ http_message *msg = http_message_parse(PHPSTR_VAL(&request.conv.response), PHPSTR_LEN(&request.conv.response)); \ \ if (msg) { \