mirror of
https://github.com/php/php-src.git
synced 2025-08-18 15:08:55 +02:00
- Fix Bug #40872 (inconsistency in offsetSet, offsetExists treatment of string enclosed integers)
This commit is contained in:
parent
cd7a656a9b
commit
a4ee3cbff7
2 changed files with 32 additions and 4 deletions
|
@ -460,7 +460,7 @@ static int spl_array_has_dimension_ex(int check_inherited, zval *object, zval *o
|
|||
{
|
||||
spl_array_object *intern = (spl_array_object*)zend_object_store_get_object(object TSRMLS_CC);
|
||||
long index;
|
||||
zval *rv;
|
||||
zval *rv, **tmp;
|
||||
|
||||
if (check_inherited && intern->fptr_offset_has) {
|
||||
SEPARATE_ARG_IF_REF(offset);
|
||||
|
@ -480,9 +480,7 @@ static int spl_array_has_dimension_ex(int check_inherited, zval *object, zval *o
|
|||
case IS_STRING:
|
||||
case IS_UNICODE:
|
||||
if (check_empty) {
|
||||
zval **tmp;
|
||||
HashTable *ht = spl_array_get_hash_table(intern, 0 TSRMLS_CC);
|
||||
if (zend_u_hash_find(ht, Z_TYPE_P(offset), Z_UNIVAL_P(offset), Z_UNILEN_P(offset)+1, (void **) &tmp) != FAILURE && zend_is_true(*tmp)) {
|
||||
if (zend_symtable_find(spl_array_get_hash_table(intern, 0 TSRMLS_CC), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, (void **) &tmp) != FAILURE && zend_is_true(*tmp)) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
|
|
30
ext/spl/tests/bug40872.phpt
Executable file
30
ext/spl/tests/bug40872.phpt
Executable file
|
@ -0,0 +1,30 @@
|
|||
--TEST--
|
||||
Bug #40872 (inconsistency in offsetSet, offsetExists treatment of string enclosed integers)
|
||||
--FILE--
|
||||
<?php
|
||||
class Project {
|
||||
public $id;
|
||||
|
||||
function __construct($id) {
|
||||
$this->id = $id;
|
||||
}
|
||||
}
|
||||
|
||||
class ProjectsList extends ArrayIterator {
|
||||
public function add(Project $item) {
|
||||
$this->offsetSet($item->id, $item);
|
||||
}
|
||||
}
|
||||
|
||||
$projects = new ProjectsList();
|
||||
$projects->add(new Project('1'));
|
||||
$projects->add(new Project(2));
|
||||
|
||||
var_dump($projects->offsetExists(1));
|
||||
var_dump($projects->offsetExists('2'));
|
||||
?>
|
||||
===DONE===
|
||||
--EXPECT--
|
||||
bool(true)
|
||||
bool(true)
|
||||
===DONE===
|
Loading…
Add table
Add a link
Reference in a new issue