Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:93363 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 49913 invoked from network); 16 May 2016 22:00:24 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 16 May 2016 22:00:24 -0000 Authentication-Results: pb1.pair.com header.from=adam.baratz@gmail.com; sender-id=pass Authentication-Results: pb1.pair.com smtp.mail=adam.baratz@gmail.com; spf=pass; sender-id=pass Received-SPF: pass (pb1.pair.com: domain gmail.com designates 209.85.213.171 as permitted sender) X-PHP-List-Original-Sender: adam.baratz@gmail.com X-Host-Fingerprint: 209.85.213.171 mail-ig0-f171.google.com Received: from [209.85.213.171] ([209.85.213.171:37167] helo=mail-ig0-f171.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 15/B1-35937-7F24A375 for ; Mon, 16 May 2016 18:00:24 -0400 Received: by mail-ig0-f171.google.com with SMTP id s8so267275ign.0 for ; Mon, 16 May 2016 15:00:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:cc; bh=NhVzsieyKBS9fxzGNyQE7eOcVP/nOAWJVTaoWcOEqlw=; b=U1X6h4MY1o+Q00X/378vCzZZgJiRkv+V+YX04PmB7T0QDJR9WfLGVRUw47xMFlWVva y3VCmk3lmKn+FbHipUYh0spIMwtv01rr+dFzD/g1E/nNWbc9bb5GdAiEDiS96/S+EHLD lOHwTb3grKmpXFpxQqXKg/11QcgGE1BHgWDbrBUDbNl80L6vwsGR2VjwOv179B9GFoKk YGZs+NjPl5t6XcWQzC2BKpuBCe0xfXvWkXlf2nQe9KF5z9Fhm8IEQ5qu9X8uXkXv9EQN K+rbBSNF/azi4K0YujXcWJq4EA6QJqCWiAtQzJgnbL/NJRu6afpBXucC6/wYO3uaKfFW +DNw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:date:message-id:subject:from:to:cc; bh=NhVzsieyKBS9fxzGNyQE7eOcVP/nOAWJVTaoWcOEqlw=; b=GgfD9+XNKkAKVgYr0TU6/0bTePr1mcEa2CW4tv+Nw5aKxGLlMuP0x/GUThPtO4Kxk8 z8+665I/6v4KPiiozqWOKs5vRsh1fN2TQq9IxePZyleY3Ee4MOSkqLlhB2UQ3wig4NBT utGT8WHDG1InGClpLsl33MbRs7huT1zA620MYlSig2FIXaTZwcis5MzpqLdJZPhi6HVD zjevxPj5CONu8pBTfmkCXTKP6es7LmTxPNZ7txYHxQAiDMG1dZcqSYDM4a87nCnv2tmO tPCIr2ese/mZFzm00/rlu/OMzMYhiLDmt5La02aLFCZ02AMWh97wJbtFzQrlqJ5FlzTK gKcg== X-Gm-Message-State: AOPr4FV1EAVw+ZrVR9B24Omrn9XpnofOQHqG05AE4JvT0Hp49CLgJ7+4E2x12CwQRiFB0AxTOkSXX8b79WQowg== MIME-Version: 1.0 X-Received: by 10.50.23.71 with SMTP id k7mr11008528igf.26.1463436017313; Mon, 16 May 2016 15:00:17 -0700 (PDT) Received: by 10.64.238.108 with HTTP; Mon, 16 May 2016 15:00:17 -0700 (PDT) Date: Mon, 16 May 2016 18:00:17 -0400 Message-ID: To: "internals@lists.php.net" Cc: Peter LeBrun Content-Type: multipart/alternative; boundary=089e0158a9a8f6b62b0532fcbfda Subject: reused hash tables in large data structures in PHP7 From: adam.baratz@gmail.com (Adam Baratz) --089e0158a9a8f6b62b0532fcbfda Content-Type: text/plain; charset=UTF-8 Hi, I've encountered a hard-to-consistently-reproduce issue with HashTable zvals. I have code that will generate big nested \stdClass structures for JSON encoding. It does so using classes that have methods that generate those fields. For example, you could have a class like this: class Block { public function css_classes() { return ['x', 'y', 'z']; } } Other code would translate it into a value that would var_dump() as this: object(stdClass)#1 (1) { ["css_classes"]=> array(3) { [0]=> string(1) "x" [1]=> string(1) "y" [2]=> string(1) "z" } } The template data could include multiple instances of Block. As in, a \stdClass could be generated with multiple copies of that array content. That data could get sent to json_encode(), which uses ZEND_HASH_APPLY_PROTECTION/etc. to avoid recursion. I've seen situations where that array of strings triggers that recursion check. But it's not always, and a php-fpm restart can make it go away. Can anyone think of why this might happen? Thanks, Adam --089e0158a9a8f6b62b0532fcbfda--