Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:23872 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 5790 invoked by uid 1010); 2 Jun 2006 23:26:19 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 5775 invoked from network); 2 Jun 2006 23:26:19 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 2 Jun 2006 23:26:19 -0000 X-PHP-List-Original-Sender: helly@php.net X-Host-Fingerprint: 81.169.182.136 ajaxatwork.net Linux 2.4/2.6 Received: from ([81.169.182.136:57885] helo=strato.aixcept.de) by pb1.pair.com (ecelerity 2.0 beta r(6323M)) with SMTP id E6/34-22639-919C0844 for ; Fri, 02 Jun 2006 19:26:18 -0400 Received: from baumbart.mbo (dslb-084-063-043-079.pools.arcor-ip.net [84.63.43.79]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by strato.aixcept.de (Postfix) with ESMTP id 9A36435C1E8; Sat, 3 Jun 2006 01:26:13 +0200 (CEST) Date: Sat, 3 Jun 2006 01:28:30 +0200 Reply-To: Marcus Boerger X-Priority: 3 (Normal) Message-ID: <12081163.20060603012830@marcus-boerger.de> To: internals@lists.php.net Cc: Dmitry Stogov , Andi Gutmans , Zeev Suraski MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----------6CFDFA17258F28" Subject: Fix for bug #37667 From: helly@php.net (Marcus Boerger) ------------6CFDFA17258F28 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Hello internals, Bug #37667 describes a problem with returning an array from __get() in write context. property; } } $c = new Class1(); $d = & $c->getProperty(); $d[] = 1; var_dump($c); ?> The engine sees the read to the array property as a write no matter whether it is a read or write operation. I think we should pass the correct mode and then in the get_property handler use the info to protect against writing to a returned array since reading it is pretty fine of course. Right now we use the access type only to silence warnings in case of BP_VAR_IS. No further distincion is done using the access type. So i patched the necessary changes into my HEAD and also verified that the patch does not affect any test case. So it seems quite good. But i do not want to decide here since it is a) a change of behavior and b) it introduces a new error message. Now with the patch applied the above code will result in the following error message: Fatal error: Cannot use array returned from Test::__get('property') in write context in %sbug37667.php on line %d Comments? Best regards, Marcus ------------6CFDFA17258F28 Content-Type: text/plain; name="ze2-bug37667-20060602.diff.txt" Content-transfer-encoding: base64 Content-Disposition: attachment; filename="ze2-bug37667-20060602.diff.txt" SW5kZXg6IFplbmQvemVuZF9leGVjdXRlLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3Jl cG9zaXRvcnkvWmVuZEVuZ2luZTIvemVuZF9leGVjdXRlLmMsdgpyZXRyaWV2aW5nIHJldmlz aW9uIDEuNzQ2CmRpZmYgLXUgLXAgLWQgLXIxLjc0NiB6ZW5kX2V4ZWN1dGUuYwotLS0gWmVu ZC96ZW5kX2V4ZWN1dGUuYwkxIEp1biAyMDA2IDExOjU2OjIzIC0wMDAwCTEuNzQ2CisrKyBa ZW5kL3plbmRfZXhlY3V0ZS5jCTIgSnVuIDIwMDYgMjM6MDU6NDUgLTAwMDAKQEAgLTEyNzIs NyArMTI3Miw3IEBAIHN0YXRpYyB2b2lkIHplbmRfZmV0Y2hfcHJvcGVydHlfYWRkcmVzcygK IAkJCXp2YWwgKnB0cjsKIAogCQkJaWYgKFpfT0JKX0hUX1AoY29udGFpbmVyKS0+cmVhZF9w cm9wZXJ0eSAmJgotCQkJCShwdHIgPSBaX09CSl9IVF9QKGNvbnRhaW5lciktPnJlYWRfcHJv cGVydHkoY29udGFpbmVyLCBwcm9wX3B0ciwgQlBfVkFSX1cgVFNSTUxTX0NDKSkgIT0gTlVM TCkgeworCQkJCShwdHIgPSBaX09CSl9IVF9QKGNvbnRhaW5lciktPnJlYWRfcHJvcGVydHko Y29udGFpbmVyLCBwcm9wX3B0ciwgdHlwZSBUU1JNTFNfQ0MpKSAhPSBOVUxMKSB7CiAJCQkJ aWYgKHJlc3VsdCkgewogCQkJCQlyZXN1bHQtPnZhci5wdHIgPSBwdHI7CiAJCQkJCXJlc3Vs dC0+dmFyLnB0cl9wdHIgPSAmcmVzdWx0LT52YXIucHRyOwpAQCAtMTI4NSw3ICsxMjg1LDcg QEAgc3RhdGljIHZvaWQgemVuZF9mZXRjaF9wcm9wZXJ0eV9hZGRyZXNzKAogCQl9CiAJfSBl bHNlIGlmIChaX09CSl9IVF9QKGNvbnRhaW5lciktPnJlYWRfcHJvcGVydHkpIHsKIAkJaWYg KHJlc3VsdCkgewotCQkJcmVzdWx0LT52YXIucHRyID0gWl9PQkpfSFRfUChjb250YWluZXIp LT5yZWFkX3Byb3BlcnR5KGNvbnRhaW5lciwgcHJvcF9wdHIsIEJQX1ZBUl9XIFRTUk1MU19D Qyk7CisJCQlyZXN1bHQtPnZhci5wdHIgPSBaX09CSl9IVF9QKGNvbnRhaW5lciktPnJlYWRf cHJvcGVydHkoY29udGFpbmVyLCBwcm9wX3B0ciwgdHlwZSBUU1JNTFNfQ0MpOwogCQkJcmVz dWx0LT52YXIucHRyX3B0ciA9ICZyZXN1bHQtPnZhci5wdHI7CiAJCX0KIAl9IGVsc2UgewpJ bmRleDogWmVuZC96ZW5kX29iamVjdF9oYW5kbGVycy5jCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp bGU6IC9yZXBvc2l0b3J5L1plbmRFbmdpbmUyL3plbmRfb2JqZWN0X2hhbmRsZXJzLmMsdgpy ZXRyaWV2aW5nIHJldmlzaW9uIDEuMTY3CmRpZmYgLXUgLXAgLWQgLXIxLjE2NyB6ZW5kX29i amVjdF9oYW5kbGVycy5jCi0tLSBaZW5kL3plbmRfb2JqZWN0X2hhbmRsZXJzLmMJMjkgTWF5 IDIwMDYgMTk6NTc6NDMgLTAwMDAJMS4xNjcKKysrIFplbmQvemVuZF9vYmplY3RfaGFuZGxl cnMuYwkyIEp1biAyMDA2IDIzOjA1OjQ2IC0wMDAwCkBAIC0zNTcsNiArMzU3LDkgQEAgenZh bCAqemVuZF9zdGRfcmVhZF9wcm9wZXJ0eSh6dmFsICpvYmplYwogCQl6dmFsX3B0cl9kdG9y KCZ0bXBfbWVtYmVyKTsKIAkJKCpyZXR2YWwpLT5yZWZjb3VudC0tOwogCX0KKwlpZiAoKnJl dHZhbCAmJiAodHlwZSA9PSBCUF9WQVJfVyB8fCB0eXBlID09IEJQX1ZBUl9SVykgJiYgWl9U WVBFX1BQKHJldHZhbCkgPT0gSVNfQVJSQVkpIHsKKwkJemVuZF9lcnJvcihFX0VSUk9SLCAi Q2Fubm90IHVzZSBhcnJheSByZXR1cm5lZCBmcm9tICV2OjpfX2dldCgnJVInKSBpbiB3cml0 ZSBjb250ZXh0Iiwgem9iai0+Y2UtPm5hbWUsIFpfVFlQRV9QKG1lbWJlciksIFpfU1RSVkFM X1AobWVtYmVyKSk7CisJfQogCXJldHVybiAqcmV0dmFsOwogfQogCkluZGV4OiBaZW5kL3Rl c3RzL2J1ZzM3NjY3LnBocHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogWmVuZC90ZXN0cy9i dWczNzY2Ny5waHB0CmRpZmYgLU4gWmVuZC90ZXN0cy9idWczNzY2Ny5waHB0Ci0tLSAvZGV2 L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgWmVuZC90ZXN0cy9idWczNzY2 Ny5waHB0CTIgSnVuIDIwMDYgMjM6MDU6NDYgLTAwMDAKQEAgLTAsMCArMSw1NyBAQAorLS1U RVNULS0KKyMzNzY2NyAoT2JqZWN0IGlzIG5vdCBhZGRlZCBpbnRvIGFycmF5IHJldHVybmVk IGJ5IF9fZ2V0KQorLS1GSUxFLS0KKzw/cGhwCisKK2NsYXNzIFRlc3QKK3sKKwlwcm90ZWN0 ZWQgJHByb3BlcnR5ID0gYXJyYXkoJ2ZvbycgPT4gJ2JhcicpOworCisJZnVuY3Rpb24gX19n ZXQoJG5hbWUpCisJeworCQlyZXR1cm4gJHRoaXMtPnByb3BlcnR5OworCX0KK30KKworJG9i aiA9IG5ldyBUZXN0OworCit2YXJfZHVtcCgkb2JqLT5wcm9wZXJ0eVsnZm9vJ10pOwordmFy X2R1bXAoJG9iai0+cHJvcGVydHlbMl0pOworCit2YXJfZHVtcCgkb2JqKTsKKworJG9iai0+ cHJvcGVydHlbXSA9IDE7Ciskb2JqLT5wcm9wZXJ0eVtdID0gMjsKKwordmFyX2R1bXAoJG9i aik7CisKKz8+Cis9PT1ET05FPT09CistLUVYUEVDVEYtLQorc3RyaW5nKDMpICJiYXIiCisK K05vdGljZTogVW5kZWZpbmVkIG9mZnNldDogIDIgaW4gJXNidWczNzY2Ny5waHAgb24gbGlu ZSAlZAorTlVMTAorb2JqZWN0KFRlc3QpIyVkICgxKSB7CisgIFsicHJvcGVydHkiOnByb3Rl Y3RlZF09PgorICBhcnJheSgxKSB7CisgICAgWyJmb28iXT0+CisgICAgc3RyaW5nKDMpICJi YXIiCisgIH0KK30KKworRmF0YWwgZXJyb3I6IENhbm5vdCB1c2UgYXJyYXkgcmV0dXJuZWQg ZnJvbSBUZXN0OjpfX2dldCgncHJvcGVydHknKSBpbiB3cml0ZSBjb250ZXh0IGluICVzYnVn Mzc2NjcucGhwIG9uIGxpbmUgJWQKKy0tVUVYUEVDVEYtLQordW5pY29kZSgzKSAiYmFyIgor CitOb3RpY2U6IFVuZGVmaW5lZCBvZmZzZXQ6ICAyIGluICVzYnVnMzc2NjcucGhwIG9uIGxp bmUgJWQKK05VTEwKK29iamVjdChUZXN0KSMlZCAoMSkgeworICBbdSJwcm9wZXJ0eSI6cHJv dGVjdGVkXT0+CisgIGFycmF5KDEpIHsKKyAgICBbdSJmb28iXT0+CisgICAgdW5pY29kZSgz KSAiYmFyIgorICB9Cit9CisKK0ZhdGFsIGVycm9yOiBDYW5ub3QgdXNlIGFycmF5IHJldHVy bmVkIGZyb20gVGVzdDo6X19nZXQoJ3Byb3BlcnR5JykgaW4gd3JpdGUgY29udGV4dCBpbiAl c2J1ZzM3NjY3LnBocCBvbiBsaW5lICVkCg== ------------6CFDFA17258F28--