MDL-67114 mustache: php74 fix. Fix use of scalar as array
authorEloy Lafuente (stronk7) <stronk7@moodle.org>
Sat, 2 Nov 2019 15:20:44 +0000 (16:20 +0100)
committerEloy Lafuente (stronk7) <stronk7@moodle.org>
Fri, 3 Jan 2020 10:33:15 +0000 (11:33 +0100)
Trying to use values of type null, bool, int, float or resource as an
array (such as $null["key"]) will now generate a notice. This does not
affect array accesses performed by list().

RFC: https://wiki.php.net/rfc/notice-for-non-valid-array-container

lib/mustache/readme_moodle.txt
lib/mustache/src/Mustache/Parser.php

index 6bc4acf..586ce76 100644 (file)
@@ -11,3 +11,12 @@ unzip v2.12.0.zip
 cd mustache.php-2.12.0/
 mv src /path/to/moodle/lib/mustache/
 mv LICENSE /path/to/moodle/lib/mustache/
+
+Local changes:
+
+Note: All this changes need to be reviewed on every upgrade and, if they have
+been already applied upstream for the release being used, can be removed
+from the list. If still not available upstream, they will need to be re-applied.
+
+- MDL-67114: PHP 7.4 compatibility. Array operations on scalar value.
+  This corresponds to upstream https://github.com/bobthecow/mustache.php/pull/352
index c36a84a..0ec4192 100644 (file)
@@ -149,7 +149,7 @@ class Mustache_Parser
                 case Mustache_Tokenizer::T_BLOCK_VAR:
                     if ($this->pragmaBlocks) {
                         // BLOCKS pragma is enabled, let's do this!
-                        if ($parent[Mustache_Tokenizer::TYPE] === Mustache_Tokenizer::T_PARENT) {
+                        if (isset($parent) && $parent[Mustache_Tokenizer::TYPE] === Mustache_Tokenizer::T_PARENT) {
                             $token[Mustache_Tokenizer::TYPE] = Mustache_Tokenizer::T_BLOCK_ARG;
                         }
                         $this->clearStandaloneLines($nodes, $tokens);
@@ -275,7 +275,7 @@ class Mustache_Parser
      */
     private function checkIfTokenIsAllowedInParent($parent, array $token)
     {
-        if ($parent[Mustache_Tokenizer::TYPE] === Mustache_Tokenizer::T_PARENT) {
+        if (isset($parent) && $parent[Mustache_Tokenizer::TYPE] === Mustache_Tokenizer::T_PARENT) {
             throw new Mustache_Exception_SyntaxException('Illegal content in < parent tag', $token);
         }
     }