From 2434b9efe5224a7bf9136bfd427b3584628a0260 Mon Sep 17 00:00:00 2001 From: Richard McDaniel Date: Thu, 23 Mar 2023 01:44:41 -0500 Subject: [PATCH 1/5] Filter closures --- src/Serializers/Y.php | 2 +- tests/Unit/Serializers/SerializeTest.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Serializers/Y.php b/src/Serializers/Y.php index c0318990..37e67f14 100644 --- a/src/Serializers/Y.php +++ b/src/Serializers/Y.php @@ -50,7 +50,7 @@ public static function serialize($data): string 'line' => $data->getLine(), 'file' => $data->getFile(), 'trace' => collect($data->getTrace()) - ->filter(static fn ($trace) => $trace instanceof Closure) + ->filter(static fn ($trace) => ! $trace instanceof Closure) ->toArray(), ]; } diff --git a/tests/Unit/Serializers/SerializeTest.php b/tests/Unit/Serializers/SerializeTest.php index 52938146..4ac469c5 100644 --- a/tests/Unit/Serializers/SerializeTest.php +++ b/tests/Unit/Serializers/SerializeTest.php @@ -27,7 +27,7 @@ public function testSerialize($data): void 'line' => $data->getLine(), 'file' => $data->getFile(), 'trace' => collect($data->getTrace()) - ->filter(static fn ($trace) => $trace instanceof Closure) + ->filter(static fn ($trace) => ! $trace instanceof Closure) ->toArray(), ], $unserialized); } else { From e9da56e49047ed8a3e2282ff8c06ee3e8f5f0c8b Mon Sep 17 00:00:00 2001 From: Richard McDaniel Date: Thu, 23 Mar 2023 07:05:10 +0000 Subject: [PATCH 2/5] Filter all unserializable --- .env.example | 16 ++++++++-------- src/Serializers/Y.php | 13 +++++++++++-- tests/Unit/Serializers/SerializeTest.php | 3 +-- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/.env.example b/.env.example index e1299079..4d6aa94e 100644 --- a/.env.example +++ b/.env.example @@ -1,14 +1,14 @@ APP_KEY=base64:i3g6f+dV8FfsIkcxqd7gbiPn2oXk5r00sTmdD6V5utI= -DB_CONNECTION=mysql -DB_DATABASE=testbench -DB_HOST=127.0.0.1 -DB_PORT=3306 -DB_USERNAME=root -DB_PASSWORD=password +DB_CONNECTION=pgsql +DB_DATABASE=laravel +DB_HOST=db +DB_PORT=5432 +DB_USERNAME=laravel +DB_PASSWORD=laravel -QUEUE_CONNECTION=redis +QUEUE_CONNECTION=sync -REDIS_HOST=127.0.0.1 +REDIS_HOST=redis REDIS_PASSWORD= REDIS_PORT=6379 diff --git a/src/Serializers/Y.php b/src/Serializers/Y.php index 37e67f14..e7db7ab0 100644 --- a/src/Serializers/Y.php +++ b/src/Serializers/Y.php @@ -4,7 +4,6 @@ namespace Workflow\Serializers; -use Closure; use Laravel\SerializableClosure\SerializableClosure; use Throwable; @@ -39,6 +38,16 @@ public static function decode(string $data): string return $output; } + public static function serializable($data): bool + { + try { + serialize($data); + return true; + } catch (\Throwable $th) { + return false; + } + } + public static function serialize($data): string { SerializableClosure::setSecretKey(config('app.key')); @@ -50,7 +59,7 @@ public static function serialize($data): string 'line' => $data->getLine(), 'file' => $data->getFile(), 'trace' => collect($data->getTrace()) - ->filter(static fn ($trace) => ! $trace instanceof Closure) + ->filter(static fn ($trace) => self::serializable($trace)) ->toArray(), ]; } diff --git a/tests/Unit/Serializers/SerializeTest.php b/tests/Unit/Serializers/SerializeTest.php index 4ac469c5..f77939d8 100644 --- a/tests/Unit/Serializers/SerializeTest.php +++ b/tests/Unit/Serializers/SerializeTest.php @@ -4,7 +4,6 @@ namespace Tests\Unit\Serializers; -use Closure; use Tests\Fixtures\TestEnum; use Tests\TestCase; use Throwable; @@ -27,7 +26,7 @@ public function testSerialize($data): void 'line' => $data->getLine(), 'file' => $data->getFile(), 'trace' => collect($data->getTrace()) - ->filter(static fn ($trace) => ! $trace instanceof Closure) + ->filter(static fn ($trace) => Y::serializable($trace)) ->toArray(), ], $unserialized); } else { From a4db9ebc26c719e20afa9f879472f873afb97b2f Mon Sep 17 00:00:00 2001 From: Richard McDaniel Date: Thu, 23 Mar 2023 07:17:50 +0000 Subject: [PATCH 3/5] Add test --- tests/Unit/Serializers/SerializeTest.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/Unit/Serializers/SerializeTest.php b/tests/Unit/Serializers/SerializeTest.php index f77939d8..6ce92195 100644 --- a/tests/Unit/Serializers/SerializeTest.php +++ b/tests/Unit/Serializers/SerializeTest.php @@ -55,6 +55,11 @@ public function dataProvider(): array 'int(0)' => [0], 'int(1)' => [1], 'exception' => [new \Exception('test')], + 'exception w/ closure' => [call_user_func(function () { + $e = new \Exception('test'); + $e->fn = fn() => null; + return $e; + })], 'float PHP_FLOAT_EPSILON' => [PHP_FLOAT_EPSILON], 'float PHP_FLOAT_MIN' => [PHP_FLOAT_MIN], 'float -PHP_FLOAT_MIN' => [-PHP_FLOAT_MIN], From ba00f5bb5d77a2f60d93fd7fa6153e3bb2a2b030 Mon Sep 17 00:00:00 2001 From: Richard McDaniel Date: Thu, 23 Mar 2023 07:19:43 +0000 Subject: [PATCH 4/5] ECS --- tests/Unit/Serializers/SerializeTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/Unit/Serializers/SerializeTest.php b/tests/Unit/Serializers/SerializeTest.php index 6ce92195..6b70f1c7 100644 --- a/tests/Unit/Serializers/SerializeTest.php +++ b/tests/Unit/Serializers/SerializeTest.php @@ -55,9 +55,9 @@ public function dataProvider(): array 'int(0)' => [0], 'int(1)' => [1], 'exception' => [new \Exception('test')], - 'exception w/ closure' => [call_user_func(function () { + 'exception w/ closure' => [call_user_func(static function () { $e = new \Exception('test'); - $e->fn = fn() => null; + $e->fn = static fn () => null; return $e; })], 'float PHP_FLOAT_EPSILON' => [PHP_FLOAT_EPSILON], From f8f74cb4a85d4897a3b5890a68cfae80e4735589 Mon Sep 17 00:00:00 2001 From: Richard McDaniel Date: Thu, 23 Mar 2023 07:33:15 +0000 Subject: [PATCH 5/5] Refactor test --- tests/Unit/Serializers/SerializeTest.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/tests/Unit/Serializers/SerializeTest.php b/tests/Unit/Serializers/SerializeTest.php index 6b70f1c7..f77939d8 100644 --- a/tests/Unit/Serializers/SerializeTest.php +++ b/tests/Unit/Serializers/SerializeTest.php @@ -55,11 +55,6 @@ public function dataProvider(): array 'int(0)' => [0], 'int(1)' => [1], 'exception' => [new \Exception('test')], - 'exception w/ closure' => [call_user_func(static function () { - $e = new \Exception('test'); - $e->fn = static fn () => null; - return $e; - })], 'float PHP_FLOAT_EPSILON' => [PHP_FLOAT_EPSILON], 'float PHP_FLOAT_MIN' => [PHP_FLOAT_MIN], 'float -PHP_FLOAT_MIN' => [-PHP_FLOAT_MIN],