MDL-52284 core: PHP7 engine errors have type Throwable
authorMarina Glancy <marina@moodle.com>
Wed, 9 Dec 2015 03:55:58 +0000 (11:55 +0800)
committerMarina Glancy <marina@moodle.com>
Thu, 10 Dec 2015 02:49:37 +0000 (10:49 +0800)
backup/util/settings/tests/settings_test.php
lib/classes/shutdown_manager.php
lib/dml/moodle_database.php
lib/dml/moodle_transaction.php
lib/phpunit/classes/advanced_testcase.php
lib/phpunit/classes/basic_testcase.php
lib/phpunit/classes/database_driver_testcase.php
lib/setuplib.php
lib/upgradelib.php

index a50023c..45bc4ec 100644 (file)
@@ -127,7 +127,8 @@ class backp_settings_testcase extends basic_testcase {
             $this->assertTrue($e instanceof base_setting_exception);
             $this->assertEquals($e->errorcode, 'incorrect_object_passed');
         } catch (TypeError $e) {
-            // PHP7 will catch type errors for us.
+            // On PHP7+ we get a TypeError raised, lets check we've the right error.
+            $this->assertRegexp('/must be an instance of backup_setting_ui/', $e->getMessage());
         }
         restore_error_handler();
 
@@ -143,7 +144,8 @@ class backp_settings_testcase extends basic_testcase {
             $this->assertTrue($e instanceof base_setting_exception);
             $this->assertEquals($e->errorcode, 'incorrect_object_passed');
         } catch (TypeError $e) {
-            // PHP7 will catch type errors for us.
+            // On PHP7+ we get a TypeError raised, lets check we've the right error.
+            $this->assertRegexp('/must be an instance of backup_setting_ui/', $e->getMessage());
         }
         restore_error_handler();
 
@@ -307,7 +309,8 @@ class backp_settings_testcase extends basic_testcase {
             $this->assertTrue($e instanceof backup_setting_exception);
             $this->assertEquals($e->errorcode, 'incorrect_object_passed');
         } catch (TypeError $e) {
-            // PHP7 will catch type errors for us.
+            // On PHP7+ we get a TypeError raised, lets check we've the right error.
+            $this->assertRegexp('/must be an instance of base_setting/', $e->getMessage());
         }
         restore_error_handler();
 
index 8b01ba0..2a11ae2 100644 (file)
@@ -81,6 +81,9 @@ class core_shutdown_manager {
                 }
             } catch (Exception $e) {
                 error_log('Exception ignored in shutdown function '.var_export($callback, true).':'.$e->getMessage());
+            } catch (Throwable $e) {
+                // Engine errors in PHP7 throw exceptions of type Throwable (this "catch" will be ignored in PHP5).
+                error_log('Exception ignored in shutdown function '.var_export($callback, true).':'.$e->getMessage());
             }
         }
 
index 78b11df..4540c7e 100644 (file)
@@ -2431,7 +2431,7 @@ abstract class moodle_database {
      * automatically if exceptions not caught.
      *
      * @param moodle_transaction $transaction An instance of a moodle_transaction.
-     * @param $e The related exception/throwable to this transaction rollback.
+     * @param Exception|Throwable $e The related exception/throwable to this transaction rollback.
      * @return void This does not return, instead the exception passed in will be rethrown.
      */
     public function rollback_delegated_transaction(moodle_transaction $transaction, $e) {
index a948441..839f98d 100644 (file)
@@ -95,7 +95,7 @@ class moodle_transaction {
     /**
      * Rollback all current delegated transactions.
      *
-     * @param $e mandatory exception/throwable
+     * @param Exception|Throwable $e mandatory exception/throwable
      * @return void
      */
     public function rollback($e) {
index 410cc05..d09d5cd 100644 (file)
@@ -91,7 +91,8 @@ abstract class advanced_testcase extends base_testcase {
         } catch (Exception $ex) {
             $e = $ex;
         } catch (Throwable $ex) {
-            $e = $ex; // PHP7.
+            // Engine errors in PHP7 throw exceptions of type Throwable (this "catch" will be ignored in PHP5).
+            $e = $ex;
         }
 
         if (isset($e)) {
index 84f8506..ba7d000 100644 (file)
@@ -66,7 +66,8 @@ abstract class basic_testcase extends base_testcase {
         } catch (Exception $ex) {
             $e = $ex;
         } catch (Throwable $ex) {
-            $e = $ex; // PHP7.
+            // Engine errors in PHP7 throw exceptions of type Throwable (this "catch" will be ignored in PHP5).
+            $e = $ex;
         }
 
         if (isset($e)) {
index 14293b2..5236a6e 100644 (file)
@@ -145,7 +145,8 @@ abstract class database_driver_testcase extends base_testcase {
         } catch (Exception $ex) {
             $e = $ex;
         } catch (Throwable $ex) {
-            $e = $ex; // PHP7.
+            // Engine errors in PHP7 throw exceptions of type Throwable (this "catch" will be ignored in PHP5).
+            $e = $ex;
         }
 
         if (isset($e)) {
index ce4dc32..ee6b8ee 100644 (file)
@@ -381,7 +381,8 @@ function default_exception_handler($ex) {
         } catch (Exception $e) {
             $out_ex = $e;
         } catch (Throwable $e) {
-            $out_ex = $e; // PHP7.
+            // Engine errors in PHP7 throw exceptions of type Throwable (this "catch" will be ignored in PHP5).
+            $out_ex = $e;
         }
 
         if (isset($out_ex)) {
index 7832ce1..c44cee9 100644 (file)
@@ -1547,6 +1547,9 @@ function install_core($version, $verbose) {
         cache_helper::purge_all();
     } catch (exception $ex) {
         upgrade_handle_exception($ex);
+    } catch (Throwable $ex) {
+        // Engine errors in PHP7 throw exceptions of type Throwable (this "catch" will be ignored in PHP5).
+        upgrade_handle_exception($ex);
     }
 }
 
@@ -1617,6 +1620,9 @@ function upgrade_core($version, $verbose) {
         print_upgrade_part_end('moodle', false, $verbose);
     } catch (Exception $ex) {
         upgrade_handle_exception($ex);
+    } catch (Throwable $ex) {
+        // Engine errors in PHP7 throw exceptions of type Throwable (this "catch" will be ignored in PHP5).
+        upgrade_handle_exception($ex);
     }
 }
 
@@ -1651,6 +1657,9 @@ function upgrade_noncore($verbose) {
 
     } catch (Exception $ex) {
         upgrade_handle_exception($ex);
+    } catch (Throwable $ex) {
+        // Engine errors in PHP7 throw exceptions of type Throwable (this "catch" will be ignored in PHP5).
+        upgrade_handle_exception($ex);
     }
 }