From: Michael Wallner Date: Tue, 26 Jul 2005 16:44:27 +0000 (+0000) Subject: - fix possible mem-leak in http_absolute_uri() X-Git-Tag: RELEASE_0_11_0~18 X-Git-Url: https://git.m6w6.name/?a=commitdiff_plain;h=49d78c4319400a470f70440e5ce06fc6df3245ac;p=m6w6%2Fext-http - fix possible mem-leak in http_absolute_uri() - make url and request method configurable through HttpRequest::setOptions() --- diff --git a/http_request_object.c b/http_request_object.c index bef6e7f..73b0319 100644 --- a/http_request_object.c +++ b/http_request_object.c @@ -602,7 +602,7 @@ PHP_METHOD(HttpRequest, setOptions) old_opts = GET_PROP(obj, options); - /* headers and cookies need extra attention -- thus cannot use array_merge() directly */ + /* some options need extra attention -- thus cannot use array_merge() directly */ FOREACH_KEYVAL(opts, key, idx, opt) { if (key) { if (!strcmp(key, "headers")) { @@ -615,6 +615,16 @@ PHP_METHOD(HttpRequest, setOptions) if (SUCCESS == zend_hash_find(Z_ARRVAL_P(old_opts), "cookies", sizeof("cookies"), (void **) &cookies)) { array_merge(*opt, *cookies); } + } else if ((!strcasecmp(key, "url")) || (!strcasecmp(key, "uri"))) { + if (Z_TYPE_PP(opt) != IS_STRING) { + convert_to_string_ex(opt); + } + UPD_PROP(obj, string, url, Z_STRVAL_PP(opt)); + } else if (!strcmp(key, "method")) { + if (Z_TYPE_PP(opt) != IS_LONG) { + convert_to_long_ex(opt); + } + UPD_PROP(obj, long, method, Z_LVAL_PP(opt)); } else { if (!strcmp(key, "ondebug")) { SET_PROP(obj, dbg_user_cb, *opt); diff --git a/http_url_api.c b/http_url_api.c index 64bc6bd..d3f32e7 100644 --- a/http_url_api.c +++ b/http_url_api.c @@ -53,7 +53,7 @@ PHP_HTTP_API char *_http_absolute_url_ex( php_url *purl = NULL, furl; size_t full_len = 0; zval *zhost = NULL; - char *scheme = NULL, *uri, *URL = ecalloc(1, HTTP_URI_MAXLEN + 1); + char *scheme = NULL, *uri, *URL; if ((!url || !url_len) && ( (!(url = SG(request_info).request_uri)) || @@ -62,6 +62,7 @@ PHP_HTTP_API char *_http_absolute_url_ex( return NULL; } + URL = ecalloc(1, HTTP_URI_MAXLEN + 1); uri = estrndup(url, url_len); if (!(purl = php_url_parse(uri))) { http_error_ex(E_WARNING, HTTP_E_PARSE, "Could not parse supplied URL: %s", url);