]> granicus.if.org Git - php/commitdiff
Fix searching for catch blocks
authorBob Weinand <bobwei9@hotmail.com>
Sun, 16 Oct 2016 10:34:10 +0000 (12:34 +0200)
committerBob Weinand <bobwei9@hotmail.com>
Sun, 16 Oct 2016 10:34:10 +0000 (12:34 +0200)
Since PHP-7.1 catch blocks are addressed with relative byte difference between two catch blocks as opposed to absolute opcode number

sapi/phpdbg/phpdbg_utils.c
sapi/phpdbg/tests/exceptions_001.phpt

index 331409990e1ca449fe259e909508f9e667450b8d..642c1dec6361dc24633ad2fe0b54a4bb7c8b67b2 100644 (file)
@@ -772,7 +772,7 @@ PHPDBG_API zend_bool phpdbg_check_caught_ex(zend_execute_data *execute_data, zen
                                        return 1;
                                }
 
-                               catch = cur->extended_value;
+                               catch += cur->extended_value / sizeof(zend_op);
                        } while (!cur->result.num);
 
                        return 0;
index 991ea1cc71fd1703573ea40a7b77f6e2edd2b05f..99989654cf81375b46d705f8e56e397fab9ebfbc 100644 (file)
@@ -14,12 +14,12 @@ prompt> handle first
  00017:        } catch (\Exception $e) {
  00018:                var_dump($e);
 prompt> frame #0: {closure}() at %s:16
-frame #1: {main} at %s:20
+frame #1: {main} at %s:22
 prompt> 3
 prompt> [Uncaught Error in %s on line 16]
 Error: Call to undefined function foo() in %s:16
 Stack trace:
-#0 %s(20): {closure}()
+#0 %s(22): {closure}()
 #1 {main}
 [Script ended normally]
 prompt> 
@@ -42,5 +42,7 @@ prompt>
                foo(); // Error
        } catch (\Exception $e) {
                var_dump($e);
+       } catch (\ParseError $e) {
+               var_dump($e);
        }
 })();