cvs: php-src /ext/spl spl_array.c /ext/spl/tests array_018.phpt
| From: | Marcus Boerger | Date: | Mon, 03 Oct 2005 17:58:47 +0000 |
| Subject: | cvs: php-src /ext/spl spl_array.c /ext/spl/tests array_018.phpt | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-34269@lists.php.net to get a copy of this message | ||
helly Mon Oct 3 13:58:47 2005 EDT
Added files:
/php-src/ext/spl/tests array_018.phpt
Modified files:
/php-src/ext/spl spl_array.c
Log:
- Throw an exception if an illegal string value is being used in ArrayObject::offsetSet()
http://cvs.php.net/diff.php/php-src/ext/spl/spl_array.c?r1=1.83&r2=1.84&ty=u
Index: php-src/ext/spl/spl_array.c
diff -u php-src/ext/spl/spl_array.c:1.83 php-src/ext/spl/spl_array.c:1.84
--- php-src/ext/spl/spl_array.c:1.83 Mon Oct 3 09:34:00 2005
+++ php-src/ext/spl/spl_array.c Mon Oct 3 13:58:44 2005
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: spl_array.c,v 1.83 2005/10/03 13:34:00 helly Exp $ */
+/* $Id: spl_array.c,v 1.84 2005/10/03 17:58:44 helly Exp $ */
#ifdef HAVE_CONFIG_H
# include "config.h"
@@ -305,6 +305,10 @@
case IS_STRING:
case IS_BINARY:
case IS_UNICODE:
+ if (*(char*)Z_UNIVAL_P(offset) == '\0') {
+ zend_throw_exception(U_CLASS_ENTRY(spl_ce_InvalidArgumentException), "An offset must not
begin with \\0 or be empty", 0 TSRMLS_CC);
+ return;
+ }
value->refcount++;
zend_u_symtable_update(spl_array_get_hash_table(intern, 0 TSRMLS_CC), Z_TYPE_P(offset),
Z_UNIVAL_P(offset), Z_UNILEN_P(offset)+1, (void**)&value, sizeof(void*), NULL);
return;
http://cvs.php.net/co.php/php-src/ext/spl/tests/array_018.phpt?r=1.1&p=1
Index: php-src/ext/spl/tests/array_018.phpt
+++ php-src/ext/spl/tests/array_018.phpt
--TEST--
SPL: ArrayObject and \0
--SKIPIF--
<?php if (!extension_loaded("spl")) print "skip"; ?>
--FILE--
<?php
try
{
$foo = new ArrayObject();
$foo->offsetSet("\0", "Foo");
}
catch (Exception $e)
{
var_dump($e->getMessage());
}
var_dump($foo);
try
{
$foo = new ArrayObject();
$data = explode("=", "=Foo");
$foo->offsetSet($data[0], $data[1]);
}
catch (Exception $e)
{
var_dump($e->getMessage());
}
var_dump($foo);
?>
===DONE===
--EXPECTF--
string(44) "An offset must not begin with \0 or be empty"
object(ArrayObject)#%d (0) {
}
string(44) "An offset must not begin with \0 or be empty"
object(ArrayObject)#%d (0) {
}
===DONE===
--UEXPECTF--
unicode(44) "An offset must not begin with \0 or be empty"
object(ArrayObject)#%d (0) {
}
unicode(44) "An offset must not begin with \0 or be empty"
object(ArrayObject)#%d (0) {
}
===DONE===