Permalink
Browse files

Fixed bug #35509 (string constant as array key has different behavior…

… inside object)
  • Loading branch information...
1 parent 6abf54a commit 9ee0707cfaa13756e5e36309dbcd9d3edbc5ded3 Dmitry Stogov committed Dec 5, 2005
Showing with 41 additions and 10 deletions.
  1. +2 −0 NEWS
  2. +31 −0 Zend/tests/bug35509.phpt
  3. +2 −10 Zend/zend_execute_API.c
  4. +6 −0 Zend/zend_hash.h
View
2 NEWS
@@ -24,6 +24,8 @@ PHP NEWS
- Fixed bug #35543 (php crash when calling non existing method of a class
that extends PDO). (Tony)
- Fixed bug #35539 (typo in error message for ErrorException). (Tony)
+- Fixed bug #35509 (string constant as array key has different behavior inside
+ object). (Dmitry)
- Fixed bug #35508 (PDO fails when unknown fetch mode specified). (Tony)
- Fixed bug #35499 (strtotime() does not handle whitespace around the date
string). (Ilia)
View
@@ -0,0 +1,31 @@
+--TEST--
+Bug #35509 (string constant as array key has different behavior inside object)
+--FILE--
+<?php
+class mytest
+{
+ const classConstant = '01';
+
+ private $classArray = array( mytest::classConstant => 'value' );
+
+ public function __construct()
+ {
+ print_r($this->classArray);
+ }
+}
+
+$classtest = new mytest();
+
+define( "normalConstant", '01' );
+$normalArray = array( normalConstant => 'value' );
+print_r($normalArray);
+?>
+--EXPECT--
+Array
+(
+ [01] => value
+)
+Array
+(
+ [01] => value
+)
View
@@ -501,17 +501,9 @@ ZEND_API int zval_update_constant(zval **pp, void *arg TSRMLS_DC)
*element = new_val;
switch (const_value.type) {
- case IS_STRING: {
- long lval;
- double dval;
-
- if (is_numeric_string(const_value.value.str.val, const_value.value.str.len, &lval, &dval, 0) == IS_LONG) {
- zend_hash_update_current_key(p->value.ht, HASH_KEY_IS_LONG, NULL, 0, lval);
- } else {
- zend_hash_update_current_key(p->value.ht, HASH_KEY_IS_STRING, const_value.value.str.val, const_value.value.str.len+1, 0);
- }
+ case IS_STRING:
+ zend_symtable_update_current_key(p->value.ht, const_value.value.str.val, const_value.value.str.len+1);
break;
- }
case IS_BOOL:
case IS_LONG:
zend_hash_update_current_key(p->value.ht, HASH_KEY_IS_LONG, NULL, 0, const_value.value.lval);
View
@@ -353,6 +353,12 @@ static inline int zend_symtable_exists(HashTable *ht, char *arKey, uint nKeyLeng
return zend_hash_exists(ht, arKey, nKeyLength);
}
+static inline int zend_symtable_update_current_key(HashTable *ht, char *arKey, uint nKeyLength)
+{
+ HANDLE_NUMERIC(arKey, nKeyLength, zend_hash_update_current_key(ht, HASH_KEY_IS_LONG, NULL, 0, idx));
+ return zend_hash_update_current_key(ht, HASH_KEY_IS_STRING, arKey, nKeyLength, 0);
+}
+
#endif /* ZEND_HASH_H */
/*

0 comments on commit 9ee0707

Please sign in to comment.