comparison 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
comparison
equal deleted inserted replaced
12:7a779792577d 13:5fb285c0d0e3
1 <?php
2
3 /*
4 * This file is part of Psy Shell.
5 *
6 * (c) 2012-2018 Justin Hileman
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12 namespace Psy;
13
14 use Psy\Exception\BreakException;
15 use Psy\Exception\ErrorException;
16 use Psy\Exception\ThrowUpException;
17 use Psy\Exception\TypeErrorException;
18
19 /**
20 * The Psy Shell execution loop.
21 */
22 class ExecutionLoop
23 {
24 /**
25 * Run the execution loop.
26 *
27 * @throws ThrowUpException if thrown by the `throw-up` command
28 *
29 * @param Shell $shell
30 */
31 public function run(Shell $shell)
32 {
33 $this->loadIncludes($shell);
34
35 $closure = new ExecutionClosure($shell);
36
37 do {
38 $shell->beforeLoop();
39
40 try {
41 $shell->getInput();
42 $_ = $closure->execute();
43 $shell->writeReturnValue($_);
44 } catch (BreakException $_e) {
45 $shell->writeException($_e);
46
47 return;
48 } catch (ThrowUpException $_e) {
49 $shell->writeException($_e);
50
51 throw $_e;
52 } catch (\TypeError $_e) {
53 $shell->writeException(TypeErrorException::fromTypeError($_e));
54 } catch (\Error $_e) {
55 $shell->writeException(ErrorException::fromError($_e));
56 } catch (\Exception $_e) {
57 $shell->writeException($_e);
58 }
59
60 $shell->afterLoop();
61 } while (true);
62 }
63
64 /**
65 * Load user-defined includes.
66 *
67 * @param Shell $shell
68 */
69 protected function loadIncludes(Shell $shell)
70 {
71 // Load user-defined includes
72 $load = function (Shell $__psysh__) {
73 set_error_handler([$__psysh__, 'handleError']);
74 foreach ($__psysh__->getIncludes() as $__psysh_include__) {
75 try {
76 include $__psysh_include__;
77 } catch (\Error $_e) {
78 $__psysh__->writeException(ErrorException::fromError($_e));
79 } catch (\Exception $_e) {
80 $__psysh__->writeException($_e);
81 }
82 }
83 restore_error_handler();
84 unset($__psysh_include__);
85
86 // Override any new local variables with pre-defined scope variables
87 extract($__psysh__->getScopeVariables(false));
88
89 // ... then add the whole mess of variables back.
90 $__psysh__->setScopeVariables(get_defined_vars());
91 };
92
93 $load($shell);
94 }
95 }