summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS1
-rw-r--r--ext/session/php_session.h9
2 files changed, 8 insertions, 2 deletions
diff --git a/NEWS b/NEWS
index 2fcf90cffb..44023082c2 100644
--- a/NEWS
+++ b/NEWS
@@ -103,6 +103,7 @@ PHP NEWS
missing). (Tony)
- Fixed bug #40285 (The PDO prepare parser goes into an infinite loop in
some instances). (Ilia)
+- Fixed Bug #40274 (Sessions fail with numeric root keys). (Ilia)
- Fixed bug #40259 (ob_start call many times - memory error). (Dmitry)
- Fixed bug #40231 (file_exists incorrectly reports false). (Dmitry)
- Fixed bug #40228 (ZipArchive::extractTo does create empty directories
diff --git a/ext/session/php_session.h b/ext/session/php_session.h
index f0e365cffb..0ad48e8fa8 100644
--- a/ext/session/php_session.h
+++ b/ext/session/php_session.h
@@ -223,11 +223,16 @@ PHPAPI const ps_serializer *_php_find_ps_serializer(char *name TSRMLS_DC);
#define PS_ENCODE_LOOP(code) do { \
HashTable *_ht = Z_ARRVAL_P(PS(http_session_vars)); \
+ int key_type; \
\
for (zend_hash_internal_pointer_reset(_ht); \
- zend_hash_get_current_key_ex(_ht, &key, &key_length, &num_key, 0, NULL) == HASH_KEY_IS_STRING; \
+ (key_type = zend_hash_get_current_key_ex(_ht, &key, &key_length, &num_key, 0, NULL)) != HASH_KEY_NON_EXISTANT; \
zend_hash_move_forward(_ht)) { \
- key_length--; \
+ if (key_type == HASH_KEY_IS_LONG) { \
+ php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Skipping numeric key %ld.", num_key); \
+ continue; \
+ } \
+ key_length--; \
if (php_get_session_var(key, key_length, &struc TSRMLS_CC) == SUCCESS) { \
code; \
} \