Reset smarty-security after an exception
authorEileen McNaughton <emcnaughton@wikimedia.org>
Tue, 28 Jun 2022 05:43:52 +0000 (17:43 +1200)
committerEileen McNaughton <emcnaughton@wikimedia.org>
Tue, 28 Jun 2022 05:43:52 +0000 (17:43 +1200)
This stops tests from getting befuddled

CRM/Core/Smarty.php

index c7476e9b94f425b50df82749d35b01f8582cfdf2..483ef374baea205eac63e6b072809ea1c10630c4 100644 (file)
@@ -176,15 +176,22 @@ class CRM_Core_Smarty extends Smarty {
    * @param bool $display
    *
    * @return bool|mixed|string
+   *
+   * @noinspection PhpDocMissingThrowsInspection
+   * @noinspection PhpUnhandledExceptionInspection
    */
   public function fetch($resource_name, $cache_id = NULL, $compile_id = NULL, $display = FALSE) {
     if (preg_match('/^(\s+)?string:/', $resource_name)) {
       $old_security = $this->security;
       $this->security = TRUE;
     }
-    $output = parent::fetch($resource_name, $cache_id, $compile_id, $display);
-    if (isset($old_security)) {
-      $this->security = $old_security;
+    try {
+      $output = parent::fetch($resource_name, $cache_id, $compile_id, $display);
+    }
+    finally {
+      if (isset($old_security)) {
+        $this->security = $old_security;
+      }
     }
     return $output;
   }