mike Wed Mar 8 22:04:48 2006 UTC
Modified files:
/php-src/ext/standard http.c
Log:
MFB: Fix bug #36656 (http_build_query generates invalid URIs due to use of
square brackets)
http://cvs.php.net/viewcvs.cgi/php-src/ext/standard/http.c?r1=1.19&r2=1.20&diff_format=u
Index: php-src/ext/standard/http.c
diff -u php-src/ext/standard/http.c:1.19 php-src/ext/standard/http.c:1.20
--- php-src/ext/standard/http.c:1.19 Thu Mar 2 13:12:45 2006
+++ php-src/ext/standard/http.c Wed Mar 8 22:04:48 2006
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: http.c,v 1.19 2006/03/02 13:12:45 dmitry Exp $ */
+/* $Id: http.c,v 1.20 2006/03/08 22:04:48 mike Exp $ */
#include "php_http.h"
#include "php_ini.h"
@@ -85,7 +85,7 @@
if (Z_TYPE_PP(zdata) == IS_ARRAY || Z_TYPE_PP(zdata) ==
IS_OBJECT) {
if (key_type == HASH_KEY_IS_STRING) {
ekey = php_url_encode(key.s, key_len,
&ekey_len);
- newprefix_len = key_suffix_len + ekey_len +
key_prefix_len + 1;
+ newprefix_len = key_suffix_len + ekey_len +
key_prefix_len + 3 /* %5B */;
newprefix = emalloc(newprefix_len + 1);
p = newprefix;
@@ -102,13 +102,14 @@
memcpy(p, key_suffix, key_suffix_len);
p += key_suffix_len;
}
-
- *(p++) = '[';
+ *(p++) = '%';
+ *(p++) = '5';
+ *(p++) = 'B';
*p = '\0';
} else {
/* Is an integer key */
ekey_len = spprintf(&ekey, 12, "%ld", idx);
- newprefix_len = key_prefix_len + num_prefix_len
+ ekey_len + key_suffix_len + 1;
+ newprefix_len = key_prefix_len + num_prefix_len
+ ekey_len + key_suffix_len + 3 /* %5B */;
newprefix = emalloc(newprefix_len + 1);
p = newprefix;
@@ -128,11 +129,13 @@
memcpy(p, key_suffix, key_suffix_len);
p += key_suffix_len;
}
- *(p++) = '[';
+ *(p++) = '%';
+ *(p++) = '5';
+ *(p++) = 'B';
*p = '\0';
}
ht->nApplyCount++;
- php_url_encode_hash_ex(HASH_OF(*zdata), formstr, NULL,
0, newprefix, newprefix_len, "]", 1, (Z_TYPE_PP(zdata) == IS_OBJECT ? *zdata :
NULL), arg_sep TSRMLS_CC);
+ php_url_encode_hash_ex(HASH_OF(*zdata), formstr, NULL,
0, newprefix, newprefix_len, "%5D", 3, (Z_TYPE_PP(zdata) == IS_OBJECT ? *zdata
: NULL), arg_sep TSRMLS_CC);
ht->nApplyCount--;
efree(newprefix);
} else if (Z_TYPE_PP(zdata) == IS_NULL || Z_TYPE_PP(zdata) ==
IS_RESOURCE) {
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php