summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--suhosin.c43
1 files changed, 24 insertions, 19 deletions
diff --git a/suhosin.c b/suhosin.c
index 7fbefc8..f5dde65 100644
--- a/suhosin.c
+++ b/suhosin.c
@@ -660,38 +660,43 @@ return_plain:
660static PHP_FUNCTION(suhosin_get_raw_cookies) 660static PHP_FUNCTION(suhosin_get_raw_cookies)
661{ 661{
662 char *var, *val, *res; 662 char *var, *val, *res;
663 zval *array_ptr = return_value; 663 zval *array_ptr = return_value;
664 char *strtok_buf = NULL; 664 char *strtok_buf = NULL;
665 int val_len; 665 int val_len;
666 666
667 array_init(array_ptr); 667 array_init(array_ptr);
668 SDEBUG("get_raw_cookies %s", SUHOSIN_G(raw_cookie));
669 if (SUHOSIN_G(raw_cookie)) {
670 res = estrdup(SUHOSIN_G(raw_cookie));
671 } else {
672 return;
673 }
674
675 var = php_strtok_r(res, ";", &strtok_buf);
676 668
677 while (var) { 669 if (SUHOSIN_G(raw_cookie)) {
678 SDEBUG("raw cookie: %s", var); 670 res = estrdup(SUHOSIN_G(raw_cookie));
671 } else {
672 return;
673 }
674
675 var = NULL;
676 while (var != res) {
677 var = strrchr(res, ';');
678 if (var) {
679 *var++ = '\0';
680 } else {
681 var = res;
682 }
683 if (!*var) { continue; }
684
679 val = strchr(var, '='); 685 val = strchr(var, '=');
680 if (val) { /* have a value */ 686 if (val) { /* have a value */
681 *val++ = '\0'; 687 *val++ = '\0';
682 php_url_decode(var, strlen(var)); 688 php_url_decode(var, strlen(var));
683 val_len = php_url_decode(val, strlen(val)); 689 val_len = php_url_decode(val, strlen(val));
684 php_register_variable_safe(var, val, val_len, array_ptr TSRMLS_CC);
685 } else { 690 } else {
686 php_url_decode(var, strlen(var)); 691 php_url_decode(var, strlen(var));
687 val_len = 0; 692 val_len = 0;
688 val = ""; 693 val = "";
689 php_register_variable_safe(var, "", 0, array_ptr TSRMLS_CC);
690 } 694 }
691 var = php_strtok_r(NULL, ";", &strtok_buf); 695 php_register_variable_safe(var, val, val_len, array_ptr TSRMLS_CC);
696
692 } 697 }
693 698
694 efree(res); 699 efree(res);
695} 700}
696/* }}} */ 701/* }}} */
697 702