Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:74867 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 90611 invoked from network); 12 Jun 2014 11:48:13 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 12 Jun 2014 11:48:13 -0000 Authentication-Results: pb1.pair.com smtp.mail=remi@fedoraproject.org; spf=permerror; sender-id=unknown Authentication-Results: pb1.pair.com header.from=remi@fedoraproject.org; sender-id=unknown Received-SPF: error (pb1.pair.com: domain fedoraproject.org from 217.70.183.198 cause and error) X-PHP-List-Original-Sender: remi@fedoraproject.org X-Host-Fingerprint: 217.70.183.198 relay6-d.mail.gandi.net Received: from [217.70.183.198] ([217.70.183.198:44001] helo=relay6-d.mail.gandi.net) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 65/B2-02977-B7399935 for ; Thu, 12 Jun 2014 07:48:12 -0400 Received: from mfilter5-d.gandi.net (mfilter5-d.gandi.net [217.70.178.132]) by relay6-d.mail.gandi.net (Postfix) with ESMTP id 78476FB877; Thu, 12 Jun 2014 13:48:08 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at mfilter5-d.gandi.net Received: from relay6-d.mail.gandi.net ([217.70.183.198]) by mfilter5-d.gandi.net (mfilter5-d.gandi.net [10.0.15.180]) (amavisd-new, port 10024) with ESMTP id rVtuX0n0shfs; Thu, 12 Jun 2014 13:48:06 +0200 (CEST) X-Originating-IP: 82.241.130.121 Received: from schrodingerscat.famillecollet.com (pom51-2-82-241-130-121.fbx.proxad.net [82.241.130.121]) (Authenticated sender: contact@ll-experts.com) by relay6-d.mail.gandi.net (Postfix) with ESMTPSA id 9BF76FB8B8; Thu, 12 Jun 2014 13:48:06 +0200 (CEST) Message-ID: <53999376.8070807@fedoraproject.org> Date: Thu, 12 Jun 2014 13:48:06 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 MIME-Version: 1.0 To: PHP internals CC: Sebastian Bergmann Content-Type: multipart/mixed; boundary="------------030406000706010902000403" Subject: [PHP-DEV] Internal Serializable object. Hack to create an object without constructor From: remi@fedoraproject.org (Remi Collet) --------------030406000706010902000403 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi, As Internal Class doesn't support newInstanceWithoutConstructor, some user code use the above hack (ex phpunit-mock-object) $object = unserialize( sprintf('%s:%d:"%s":0:{}', (version_compare(PHP_VERSION, '5.4', '>') && $class->implementsInterface("Serializable") ? "C" : "O"), strlen($className), $className ) ); Of course, this is already a hack. Of course, better solution will be to support newInstanceWithoutConstructor for all internals classes, but this is another story Problem, Serializable internal class raised the 'Empty serialized string cannot be empty' exception. I don't really see any reason to make serialized string mandatory, as those classes can be create (constructor) without any mandatory option. The trivial attached patch could make everyone life easier. The new test serialize again the result object to ensure all internal structures are properly initialized, and no segfault. Feedback welcome. Remi. -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php --------------030406000706010902000403 Content-Type: text/plain; charset=UTF-8; name="patch.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="patch.txt" ZGlmZiAtdXAgZXh0L3NwbC9zcGxfYXJyYXkuYy5vcmlnIGV4dC9zcGwvc3BsX2FycmF5LmMK LS0tIGV4dC9zcGwvc3BsX2FycmF5LmMub3JpZwkyMDE0LTA2LTEyIDEzOjEyOjIxLjY5MzU2 MDk5MyArMDIwMAorKysgZXh0L3NwbC9zcGxfYXJyYXkuYwkyMDE0LTA2LTEyIDEzOjEzOjU0 LjE5ODA1NTI2NCArMDIwMApAQCAtMTc0OSw3ICsxNzQ5LDYgQEAgU1BMX01FVEhPRChBcnJh eSwgdW5zZXJpYWxpemUpCiAJfQogCiAJaWYgKGJ1Zl9sZW4gPT0gMCkgewotCQl6ZW5kX3Ro cm93X2V4Y2VwdGlvbl9leChzcGxfY2VfVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uLCAwIFRT Uk1MU19DQywgIkVtcHR5IHNlcmlhbGl6ZWQgc3RyaW5nIGNhbm5vdCBiZSBlbXB0eSIpOwog CQlyZXR1cm47CiAJfQogCmRpZmYgLXVwIGV4dC9zcGwvc3BsX2RsbGlzdC5jLm9yaWcgZXh0 L3NwbC9zcGxfZGxsaXN0LmMKLS0tIGV4dC9zcGwvc3BsX2RsbGlzdC5jLm9yaWcJMjAxNC0w Ni0xMiAxMzoxMzowOS41OTA4MTk1NjkgKzAyMDAKKysrIGV4dC9zcGwvc3BsX2RsbGlzdC5j CTIwMTQtMDYtMTIgMTM6MTM6NTEuNTEzMDQxMjA4ICswMjAwCkBAIC0xMTkyLDcgKzExOTIs NiBAQCBTUExfTUVUSE9EKFNwbERvdWJseUxpbmtlZExpc3QsIHVuc2VyaWFsCiAJfQogCiAJ aWYgKGJ1Zl9sZW4gPT0gMCkgewotCQl6ZW5kX3Rocm93X2V4Y2VwdGlvbl9leChzcGxfY2Vf VW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uLCAwIFRTUk1MU19DQywgIlNlcmlhbGl6ZWQgc3Ry aW5nIGNhbm5vdCBiZSAvKmVtcHR5Ki8iKTsKIAkJcmV0dXJuOwogCX0KIApkaWZmIC11cCBl eHQvc3BsL3NwbF9vYnNlcnZlci5jLm9yaWcgZXh0L3NwbC9zcGxfb2JzZXJ2ZXIuYwotLS0g ZXh0L3NwbC9zcGxfb2JzZXJ2ZXIuYy5vcmlnCTIwMTQtMDYtMTIgMTM6MDM6MzYuNDEyNzAx OTAwICswMjAwCisrKyBleHQvc3BsL3NwbF9vYnNlcnZlci5jCTIwMTQtMDYtMTIgMTM6MDM6 NDMuMDYyNzMwNjk1ICswMjAwCkBAIC04MzEsNyArODMxLDYgQEAgU1BMX01FVEhPRChTcGxP YmplY3RTdG9yYWdlLCB1bnNlcmlhbGl6ZQogCX0KIAogCWlmIChidWZfbGVuID09IDApIHsK LQkJemVuZF90aHJvd19leGNlcHRpb25fZXgoc3BsX2NlX1VuZXhwZWN0ZWRWYWx1ZUV4Y2Vw dGlvbiwgMCBUU1JNTFNfQ0MsICJFbXB0eSBzZXJpYWxpemVkIHN0cmluZyBjYW5ub3QgYmUg ZW1wdHkiKTsKIAkJcmV0dXJuOwogCX0KIApkaWZmIC11cCBleHQvc3BsL3Rlc3RzL0FycmF5 T2JqZWN0X3Vuc2VyaWFsaXplX2VtcHR5X3N0cmluZy5waHB0Lm9yaWcgZXh0L3NwbC90ZXN0 cy9BcnJheU9iamVjdF91bnNlcmlhbGl6ZV9lbXB0eV9zdHJpbmcucGhwdAotLS0gZXh0L3Nw bC90ZXN0cy9BcnJheU9iamVjdF91bnNlcmlhbGl6ZV9lbXB0eV9zdHJpbmcucGhwdC5vcmln CTIwMTQtMDYtMTIgMTM6MjU6MDEuNDA2ODgxNDYzICswMjAwCisrKyBleHQvc3BsL3Rlc3Rz L0FycmF5T2JqZWN0X3Vuc2VyaWFsaXplX2VtcHR5X3N0cmluZy5waHB0CTIwMTQtMDYtMTIg MTM6MjY6NDUuMDk4NTEzNzU3ICswMjAwCkBAIC0xLDUgKzEsNSBAQAogLS1URVNULS0KLUFy cmF5T2JqZWN0OiB0ZXN0IHRoYXQgeW91IGNhbm5vdCB1bnNlcmlhbGl6ZSBhIGVtcHR5IHN0 cmluZworQXJyYXlPYmplY3Q6IHRlc3QgdGhhdCB5b3UgY2FuIHVuc2VyaWFsaXplIGEgZW1w dHkgc3RyaW5nCiAtLUNSRURJVFMtLQogSGF2YXJkIEVpZGUgPG51Y2xldXpAZ21haWwuY29t PgogI1BIUFRlc3RGZXN0MjAwOSBOb3J3YXkgMjAwOS0wNi0wOSBcby8KQEAgLTgsOSArOCw2 IEBAIEhhdmFyZCBFaWRlIDxudWNsZXV6QGdtYWlsLmNvbT4KICRhID0gbmV3IEFycmF5T2Jq ZWN0KGFycmF5KCkpOwogJGEtPnVuc2VyaWFsaXplKCIiKTsKID8+CitEb25lCiAtLUVYUEVD VEYtLQotRmF0YWwgZXJyb3I6IFVuY2F1Z2h0IGV4Y2VwdGlvbiAnVW5leHBlY3RlZFZhbHVl RXhjZXB0aW9uJyB3aXRoIG1lc3NhZ2UgJ0VtcHR5IHNlcmlhbGl6ZWQgc3RyaW5nIGNhbm5v dCBiZSBlbXB0eScgaW4gJXMucGhwOiVkCi1TdGFjayB0cmFjZToKLSMwICVzKCVkKTogQXJy YXlPYmplY3QtPnVuc2VyaWFsaXplKCcnKQotIzEge21haW59Ci0gIHRocm93biBpbiAlcy5w aHAgb24gbGluZSAlZAorRG9uZQpkaWZmIC11cCBleHQvc3BsL3Rlc3RzL1NwbE9iamVjdFN0 b3JhZ2VfdW5zZXJpYWxpemVfaW52YWxpZF9wYXJhbWV0ZXIzLnBocHQub3JpZyBleHQvc3Bs L3Rlc3RzL1NwbE9iamVjdFN0b3JhZ2VfdW5zZXJpYWxpemVfaW52YWxpZF9wYXJhbWV0ZXIz LnBocHQKLS0tIGV4dC9zcGwvdGVzdHMvU3BsT2JqZWN0U3RvcmFnZV91bnNlcmlhbGl6ZV9p bnZhbGlkX3BhcmFtZXRlcjMucGhwdC5vcmlnCTIwMTQtMDYtMTIgMTM6Mjc6MDEuMDExNjAz OTY3ICswMjAwCisrKyBleHQvc3BsL3Rlc3RzL1NwbE9iamVjdFN0b3JhZ2VfdW5zZXJpYWxp emVfaW52YWxpZF9wYXJhbWV0ZXIzLnBocHQJMjAxNC0wNi0xMiAxMzoyOTo0MS40NjI0MjMw MTggKzAyMDAKQEAgLTEsNSArMSw1IEBACiAtLVRFU1QtLQotQ2hlY2sgdGhhdCBTcGxPYmpl Y3RTdG9yYWdlOjp1bnNlcmlhbGl6ZSB0aHJvd3MgZXhjZXB0aW9uIHdoZW4gTlVMTCBwYXNz ZWQKK0NoZWNrIHRoYXQgU3BsT2JqZWN0U3RvcmFnZTo6dW5zZXJpYWxpemUgZGVzbid0IHRo cm93cyBleGNlcHRpb24gd2hlbiBOVUxMIHBhc3NlZAogLS1DUkVESVRTLS0KIFBIUE5XIFRl c3RmZXN0IDIwMDkgLSBTaW1vbiBXZXN0Y290dCAoc3dlc3Rjb3R0QGdtYWlsLmNvbSkKIC0t RklMRS0tCkBAIC0xNCw2ICsxNCw2IEBAIHRyeSB7CiB9CiAKID8+CitEb25lCiAtLUVYUEVD VEYtLQotRW1wdHkgc2VyaWFsaXplZCBzdHJpbmcgY2Fubm90IGJlIGVtcHR5Ci0KK0RvbmUK ZGlmZiAtdXAgZXh0L3NwbC90ZXN0cy91bnNlcmlhbGl6ZS5waHB0Lm9yaWcgZXh0L3NwbC90 ZXN0cy91bnNlcmlhbGl6ZS5waHB0Ci0tLSBleHQvc3BsL3Rlc3RzL3Vuc2VyaWFsaXplLnBo cHQub3JpZwkyMDE0LTA2LTEyIDEzOjI0OjU0LjM0MjgzNTA5OCArMDIwMAorKysgZXh0L3Nw bC90ZXN0cy91bnNlcmlhbGl6ZS5waHB0CTIwMTQtMDYtMTIgMTM6MzQ6MDguNzQzMjk3Nzc5 ICswMjAwCkBAIC0wLDAgKzEsNDMgQEAKKy0tVEVTVC0tCitTUEw6IHVuc2VyaWFsaXplIHdp dGggbm8gZGF0YSAoZm9yIFBIUFVuaXQpCistLUZJTEUtLQorPD9waHAKKworJHR5cGVzID0g YXJyYXkoJ1NwbERvdWJseUxpbmtlZExpc3QnLCAnU3BsT2JqZWN0U3RvcmFnZScsICdBcnJh eU9iamVjdCcpOworCitmb3JlYWNoICgkdHlwZXMgYXMgJHR5cGUpIHsKKwkvLyBzZXJpYWxp emUgYW4gZW1wdHkgbmV3IG9iamVjdAorCSRleHAgPSBzZXJpYWxpemUobmV3ICR0eXBlKCkp OworCS8vIGhhY2sgdG8gaW5zdGFuY2lhdGUgYW4gb2JqZWN0IHdpdGhvdXQgY29uc3RydWN0 b3IKKwkkc3RyID0gc3ByaW50ZignQzolZDoiJXMiOjA6e30nLCBzdHJsZW4oJHR5cGUpLCAk dHlwZSk7CisJJG9iaiA9IHVuc2VyaWFsaXplKCRzdHIpOworCXZhcl9kdW1wKCRvYmopOwor CS8vIHNlcmlhbGl6ZSByZXN1bHQKKwkkb3V0ID0gc2VyaWFsaXplKCRvYmopOworCS8vIGJv dGggc2hvdWxkIG1hdGNoCisJdmFyX2R1bXAoJGV4cCA9PT0gJG91dCk7Cit9Cis/PgorPT09 RE9ORT09PQorLS1FWFBFQ1RGLS0KK29iamVjdChTcGxEb3VibHlMaW5rZWRMaXN0KSMlZCAo MikgeworICBbImZsYWdzIjoiU3BsRG91Ymx5TGlua2VkTGlzdCI6cHJpdmF0ZV09PgorICBp bnQoMCkKKyAgWyJkbGxpc3QiOiJTcGxEb3VibHlMaW5rZWRMaXN0Ijpwcml2YXRlXT0+Cisg IGFycmF5KDApIHsKKyAgfQorfQorYm9vbCh0cnVlKQorb2JqZWN0KFNwbE9iamVjdFN0b3Jh Z2UpIyVkICgxKSB7CisgIFsic3RvcmFnZSI6IlNwbE9iamVjdFN0b3JhZ2UiOnByaXZhdGVd PT4KKyAgYXJyYXkoMCkgeworICB9Cit9Citib29sKHRydWUpCitvYmplY3QoQXJyYXlPYmpl Y3QpIyVkICgxKSB7CisgIFsic3RvcmFnZSI6IkFycmF5T2JqZWN0Ijpwcml2YXRlXT0+Cisg IGFycmF5KDApIHsKKyAgfQorfQorYm9vbCh0cnVlKQorPT09RE9ORT09PQo= --------------030406000706010902000403--