diff vendor/psy/psysh/src/ExecutionLoop.php @ 13:5fb285c0d0e3

Update Drupal core to 8.4.7 via Composer. Security update; I *think* we've been lucky to get away with this so far, as we don't support self-registration which seems to be used by the so-called "drupalgeddon 2" attack that 8.4.5 was vulnerable to.
author Chris Cannam
date Mon, 23 Apr 2018 09:33:26 +0100
parents
children c2387f117808
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/psy/psysh/src/ExecutionLoop.php	Mon Apr 23 09:33:26 2018 +0100
@@ -0,0 +1,95 @@
+<?php
+
+/*
+ * This file is part of Psy Shell.
+ *
+ * (c) 2012-2018 Justin Hileman
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Psy;
+
+use Psy\Exception\BreakException;
+use Psy\Exception\ErrorException;
+use Psy\Exception\ThrowUpException;
+use Psy\Exception\TypeErrorException;
+
+/**
+ * The Psy Shell execution loop.
+ */
+class ExecutionLoop
+{
+    /**
+     * Run the execution loop.
+     *
+     * @throws ThrowUpException if thrown by the `throw-up` command
+     *
+     * @param Shell $shell
+     */
+    public function run(Shell $shell)
+    {
+        $this->loadIncludes($shell);
+
+        $closure = new ExecutionClosure($shell);
+
+        do {
+            $shell->beforeLoop();
+
+            try {
+                $shell->getInput();
+                $_ = $closure->execute();
+                $shell->writeReturnValue($_);
+            } catch (BreakException $_e) {
+                $shell->writeException($_e);
+
+                return;
+            } catch (ThrowUpException $_e) {
+                $shell->writeException($_e);
+
+                throw $_e;
+            } catch (\TypeError $_e) {
+                $shell->writeException(TypeErrorException::fromTypeError($_e));
+            } catch (\Error $_e) {
+                $shell->writeException(ErrorException::fromError($_e));
+            } catch (\Exception $_e) {
+                $shell->writeException($_e);
+            }
+
+            $shell->afterLoop();
+        } while (true);
+    }
+
+    /**
+     * Load user-defined includes.
+     *
+     * @param Shell $shell
+     */
+    protected function loadIncludes(Shell $shell)
+    {
+        // Load user-defined includes
+        $load = function (Shell $__psysh__) {
+            set_error_handler([$__psysh__, 'handleError']);
+            foreach ($__psysh__->getIncludes() as $__psysh_include__) {
+                try {
+                    include $__psysh_include__;
+                } catch (\Error $_e) {
+                    $__psysh__->writeException(ErrorException::fromError($_e));
+                } catch (\Exception $_e) {
+                    $__psysh__->writeException($_e);
+                }
+            }
+            restore_error_handler();
+            unset($__psysh_include__);
+
+            // Override any new local variables with pre-defined scope variables
+            extract($__psysh__->getScopeVariables(false));
+
+            // ... then add the whole mess of variables back.
+            $__psysh__->setScopeVariables(get_defined_vars());
+        };
+
+        $load($shell);
+    }
+}