From 228d2b0351d8140f72e2ed8750a04e47fa1fcb87 Mon Sep 17 00:00:00 2001 From: Arnaud Le Blanc Date: Mon, 13 Aug 2012 22:25:20 +0200 Subject: [PATCH 1/4] [ext] use only read_property handler --- ext/twig/twig.c | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/ext/twig/twig.c b/ext/twig/twig.c index 498392daf..a32f3a316 100644 --- a/ext/twig/twig.c +++ b/ext/twig/twig.c @@ -278,22 +278,8 @@ zval *TWIG_GET_ARRAY_ELEMENT(zval *class, char *prop_name, int prop_name_length zval *TWIG_PROPERTY(zval *object, zval *propname TSRMLS_DC) { - char *prot_name; - int prot_name_length; zval *tmp = NULL; - tmp = TWIG_GET_ARRAY_ELEMENT(object, Z_STRVAL_P(propname), Z_STRLEN_P(propname) TSRMLS_CC); - if (tmp) { - return tmp; - } - - zend_mangle_property_name(&prot_name, &prot_name_length, "*", 1, Z_STRVAL_P(propname), Z_STRLEN_P(propname), 0); - tmp = TWIG_GET_ARRAY_ELEMENT(object, prot_name, prot_name_length TSRMLS_CC); - efree(prot_name); - if (tmp) { - return tmp; - } - if (Z_OBJ_HT_P(object)->read_property) { #if PHP_VERSION_ID >= 50400 tmp = Z_OBJ_HT_P(object)->read_property(object, propname, BP_VAR_IS, NULL TSRMLS_CC); From 67042276440a077e0176a8de01a6243eae4010c6 Mon Sep 17 00:00:00 2001 From: Arnaud Le Blanc Date: Mon, 13 Aug 2012 22:28:14 +0200 Subject: [PATCH 2/4] [ext] made ext consistent with 8ec73cf4759f90b961de1732da1732e60c1dbfff --- ext/twig/twig.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/ext/twig/twig.c b/ext/twig/twig.c index a32f3a316..3c340f2ba 100644 --- a/ext/twig/twig.c +++ b/ext/twig/twig.c @@ -670,6 +670,15 @@ PHP_FUNCTION(twig_template_get_attributes) INIT_PZVAL(&zitem); ZVAL_STRINGL(&zitem, item, item_len, 0); + switch (is_numeric_string(item, item_len, &Z_LVAL(zitem), &Z_DVAL(zitem), 0)) { + case IS_LONG: + Z_TYPE(zitem) = IS_LONG; + break; + case IS_DOUBLE: + ZVAL_LONG(&zitem, zend_dval_to_lval(Z_DVAL(zitem))); + break; + } + if (!type) { type = "any"; } From d6fc86a8456177cc68f50b2e7aa5034bddc0afa9 Mon Sep 17 00:00:00 2001 From: Victor Berchet Date: Mon, 30 Jul 2012 17:02:03 +0200 Subject: [PATCH 3/4] [Tests] Test accessing a public property when \ArrayAccess is implemented Test case for GH-792 --- test/Twig/Tests/TemplateTest.php | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/test/Twig/Tests/TemplateTest.php b/test/Twig/Tests/TemplateTest.php index 4213e2b65..978a5be2f 100644 --- a/test/Twig/Tests/TemplateTest.php +++ b/test/Twig/Tests/TemplateTest.php @@ -102,6 +102,7 @@ class Twig_Tests_TemplateTest extends PHPUnit_Framework_TestCase $magicPropertyObject = new Twig_TemplateMagicPropertyObject(); $propertyObject = new Twig_TemplatePropertyObject(); $propertyObject1 = new Twig_TemplatePropertyObjectAndIterator(); + $propertyObject2 = new Twig_TemplatePropertyObjectAndArrayAccess(); $methodObject = new Twig_TemplateMethodObject(); $magicMethodObject = new Twig_TemplateMagicMethodObject(); @@ -129,6 +130,7 @@ class Twig_Tests_TemplateTest extends PHPUnit_Framework_TestCase array($methodObject, $anyType), array($propertyObject, $anyType), array($propertyObject1, $anyType), + array($propertyObject2, $anyType), ); $tests = array(); @@ -318,6 +320,29 @@ class Twig_TemplatePropertyObjectAndIterator extends Twig_TemplatePropertyObject } } +class Twig_TemplatePropertyObjectAndArrayAccess extends Twig_TemplatePropertyObject implements \ArrayAccess +{ + private $data = array(); + + public function offsetExists($offset) + { + return array_key_exists($offset, $this->data); + } + + public function offsetGet($offset) + { + return $this->offsetExists($offset) ? $this->data[$offset] : 'n/a'; + } + + public function offsetSet($offset, $value) + { + } + + public function offsetUnset($offset) + { + } +} + class Twig_TemplateMethodObject { public function getDefined() From 8fa97bb526b5b639449267af9906126a615034f9 Mon Sep 17 00:00:00 2001 From: Arnaud Le Blanc Date: Thu, 23 Aug 2012 13:32:55 +0200 Subject: [PATCH 4/4] php5.2 fix --- ext/twig/twig.c | 3 ++- test/Twig/Tests/TemplateTest.php | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/ext/twig/twig.c b/ext/twig/twig.c index 3c340f2ba..bcde29b73 100644 --- a/ext/twig/twig.c +++ b/ext/twig/twig.c @@ -675,7 +675,8 @@ PHP_FUNCTION(twig_template_get_attributes) Z_TYPE(zitem) = IS_LONG; break; case IS_DOUBLE: - ZVAL_LONG(&zitem, zend_dval_to_lval(Z_DVAL(zitem))); + Z_TYPE(zitem) = IS_DOUBLE; + convert_to_long(&zitem); break; } diff --git a/test/Twig/Tests/TemplateTest.php b/test/Twig/Tests/TemplateTest.php index 978a5be2f..9c5b909ee 100644 --- a/test/Twig/Tests/TemplateTest.php +++ b/test/Twig/Tests/TemplateTest.php @@ -320,7 +320,7 @@ class Twig_TemplatePropertyObjectAndIterator extends Twig_TemplatePropertyObject } } -class Twig_TemplatePropertyObjectAndArrayAccess extends Twig_TemplatePropertyObject implements \ArrayAccess +class Twig_TemplatePropertyObjectAndArrayAccess extends Twig_TemplatePropertyObject implements ArrayAccess { private $data = array();