From a84908b7e8a0e2423afd6b836eccf27a420270b4 Mon Sep 17 00:00:00 2001
From: nsfisis
<?php
+ <?php
try {
f(g() / __LINE__);
} catch (Throwable $e) {
@@ -242,7 +242,7 @@
このうち 1つ目のケースは、 finally 節の中でエラーを投げると PHP 処理系が勝手に $previous を設定してくれる。
- <?php
+ <?php
try {
try {
@@ -268,7 +268,7 @@
出力部をコメントや改行を追加して再掲する:
- <?php
+ <?php
try {
f(g() / __LINE__);
} catch (Throwable $e) {
@@ -286,7 +286,7 @@
フォーマット指定子 %c は、整数を ASCII コード と見做して印字する。トークン #base64_decode('SGVsbG8sIFdvcmxkIQ==') の b であれば、ASCII コード 98 なので、75 行目で発生したエラー、
- 1, 20 => 0 / 0,
+ 1, 20 => 0 / 0,
によって表現されている。エラーを起こす方法はいろいろと考えられるが、今回はゼロ除算を使った。
@@ -303,7 +303,7 @@
f() の定義を再掲する (エラーオブジェクトの行数を利用しているので、一部分だけ抜き出すと値が変わることに注意):
- function f(int $i) {
+ function f(int $i) {
if ($i < 0) f();
try {
match ($i) {
@@ -328,11 +328,11 @@
前述のように、 finally 節でエラーを投げると PHP 処理系が $previous を設定する。ここでは、エラーを繋げるために f() を再帰呼び出ししている。最初に f() を呼び出している箇所を確認すると、
- <?php
+ <?php
try {
f(g() / __LINE__); // 3 行目
- function g() {
+ function g() {
return __LINE__; // 111 行目
}
--
cgit v1.2.3-70-g09d2