Browse Source

Don't copy the strtok parameter

migration/unlabaled-1.67.2
Sascha Schumann 25 years ago
parent
commit
f6ed403fde
  1. 5
      ext/standard/basic_functions.c
  2. 1
      ext/standard/basic_functions.h
  3. 8
      ext/standard/string.c

5
ext/standard/basic_functions.c

@ -849,6 +849,7 @@ PHP_RINIT_FUNCTION(basic)
{
memset(BG(strtok_table), 0, 256);
BG(strtok_string) = NULL;
BG(strtok_zval) = NULL;
BG(locale_string) = NULL;
BG(user_compare_func_name) = NULL;
BG(array_walk_func_name) = NULL;
@ -892,8 +893,10 @@ PHP_RINIT_FUNCTION(basic)
PHP_RSHUTDOWN_FUNCTION(basic)
{
STR_FREE(BG(strtok_string));
if (BG(strtok_zval))
zval_ptr_dtor(BG(strtok_zval));
BG(strtok_string) = NULL;
BG(strtok_zval) = NULL;
#ifdef HAVE_PUTENV
zend_hash_destroy(&BG(putenv_ht));
#endif

1
ext/standard/basic_functions.h

@ -141,6 +141,7 @@ typedef signed int php_int32;
typedef struct {
HashTable *user_shutdown_function_names;
HashTable putenv_ht;
zval **strtok_zval;
char *strtok_string;
char *locale_string;
char *strtok_last;

8
ext/standard/string.c

@ -829,8 +829,12 @@ PHP_FUNCTION(strtok)
tok = args[1];
convert_to_string_ex(str);
STR_FREE(BG(strtok_string));
BG(strtok_last) = BG(strtok_string) = estrndup(Z_STRVAL_PP(str), Z_STRLEN_PP(str));
zval_add_ref(str);
if (BG(strtok_zval))
zval_ptr_dtor(BG(strtok_zval));
BG(strtok_zval) = str;
BG(strtok_last) = BG(strtok_string) = Z_STRVAL_PP(str);
BG(strtok_len) = Z_STRLEN_PP(str);
break;
}

Loading…
Cancel
Save