|
29 | 29 | #include "zend_globals.h"
|
30 | 30 |
|
31 | 31 |
|
32 |
| -PHPAPI void php_register_variable(char *var, char *strval, zval *track_vars_array ELS_DC PLS_DC) |
| 32 | +PHPAPI void php_register_variable(char *var, char *strval, zval *track_vars_array ELS_DC PLS_DC) { |
| 33 | + php_register_variable_safe(var, strval, strlen(strval), track_vars_array ELS_CC PLS_CC); |
| 34 | +} |
| 35 | + |
| 36 | +/* binary-safe version */ |
| 37 | +PHPAPI void php_register_variable_safe(char *var, char *strval, int str_len, zval *track_vars_array ELS_DC PLS_DC) |
33 | 38 | {
|
34 | 39 | zval new_entry;
|
35 | 40 |
|
36 | 41 | /* Prepare value */
|
37 |
| - new_entry.value.str.len = strlen(strval); |
| 42 | + new_entry.value.str.len = str_len; |
38 | 43 | if (PG(magic_quotes_gpc)) {
|
39 | 44 | new_entry.value.str.val = php_addslashes(strval, new_entry.value.str.len, &new_entry.value.str.len, 0);
|
40 | 45 | } else {
|
@@ -198,11 +203,12 @@ SAPI_POST_HANDLER_FUNC(php_std_post_handler)
|
198 | 203 | while (var) {
|
199 | 204 | val = strchr(var, '=');
|
200 | 205 | if (val) { /* have a value */
|
| 206 | + int val_len; |
| 207 | + |
201 | 208 | *val++ = '\0';
|
202 |
| - /* FIXME: XXX: not binary safe, discards returned length */ |
203 | 209 | php_url_decode(var, strlen(var));
|
204 |
| - php_url_decode(val, strlen(val)); |
205 |
| - php_register_variable(var, val, array_ptr ELS_CC PLS_CC); |
| 210 | + val_len = php_url_decode(val, strlen(val)); |
| 211 | + php_register_variable_safe(var, val, val_len, array_ptr ELS_CC PLS_CC); |
206 | 212 | }
|
207 | 213 | var = php_strtok_r(NULL, "&", &strtok_buf);
|
208 | 214 | }
|
@@ -282,11 +288,12 @@ void php_treat_data(int arg, char *str, zval* destArray ELS_DC PLS_DC SLS_DC)
|
282 | 288 | while (var) {
|
283 | 289 | val = strchr(var, '=');
|
284 | 290 | if (val) { /* have a value */
|
| 291 | + int val_len; |
| 292 | + |
285 | 293 | *val++ = '\0';
|
286 |
| - /* FIXME: XXX: not binary safe, discards returned length */ |
287 | 294 | php_url_decode(var, strlen(var));
|
288 |
| - php_url_decode(val, strlen(val)); |
289 |
| - php_register_variable(var, val, array_ptr ELS_CC PLS_CC); |
| 295 | + val_len = php_url_decode(val, strlen(val)); |
| 296 | + php_register_variable_safe(var, val, val_len, array_ptr ELS_CC PLS_CC); |
290 | 297 | }
|
291 | 298 | if (arg == PARSE_COOKIE) {
|
292 | 299 | var = php_strtok_r(NULL, ";", &strtok_buf);
|
|
0 commit comments