From cf89d1e75625ed46fdf365b1d691ddfaf586f0c0 Mon Sep 17 00:00:00 2001 From: Louis Laugesen Date: Wed, 30 Nov 2022 03:12:28 +1100 Subject: [PATCH] Fix PHP byte validation and reenable builds (#7670) * Fix PHP byte validation and reenable builds * Use checkout@v3 Co-authored-by: Derek Bailey --- .github/workflows/build.yml | 14 ++++++++++++++ php/ByteBuffer.php | 7 ++++++- tests/phpTest.php | 8 ++++---- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 69be55b36..40a9e3ede 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -423,6 +423,20 @@ jobs: working-directory: tests run: bash GoTest.sh + build-php: + name: Build PHP + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: flatc + # FIXME: make test script not rely on flatc + run: cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DFLATBUFFERS_BUILD_TESTS=OFF -DFLATBUFFERS_INSTALL=OFF -DFLATBUFFERS_BUILD_FLATLIB=OFF -DFLATBUFFERS_BUILD_FLATHASH=OFF -DFLATBUFFERS_STRICT_MODE=ON . && make -j + - name: test + working-directory: tests + run: | + php phpTest.php + sh phpUnionVectorTest.sh + build-swift: name: Build Swift runs-on: ubuntu-latest diff --git a/php/ByteBuffer.php b/php/ByteBuffer.php index 9929a7df1..bb438001b 100644 --- a/php/ByteBuffer.php +++ b/php/ByteBuffer.php @@ -486,7 +486,12 @@ class ByteBuffer } private static function validateValue($min, $max, $value, $type, $additional_notes = "") { - if(!($min <= $value && $value <= $max)) { + if ( + !( + ($type === "byte" && $min <= ord($value) && ord($value) <= $max) || + ($min <= $value && $value <= $max) + ) + ) { throw new \InvalidArgumentException(sprintf("bad number %s for type %s.%s", $value, $type, $additional_notes)); } } diff --git a/tests/phpTest.php b/tests/phpTest.php index c1447c2d3..a854e783e 100644 --- a/tests/phpTest.php +++ b/tests/phpTest.php @@ -371,21 +371,21 @@ function testByteBuffer(Assert $assert) { $buffer = "\0"; $uut = Google\FlatBuffers\ByteBuffer::wrap($buffer); $assert->Throws(new OutOfRangeException(), function() use ($uut) { - $uut->putShort(2, "\x63"); // 99 + $uut->putShort(2, 2); // 99 }); //Test: ByteBuffer_PutShortChecksLength $buffer = "\0"; $uut = Google\FlatBuffers\ByteBuffer::wrap($buffer); $assert->Throws(new OutOfRangeException(), function() use ($uut) { - $uut->putShort(0, "\x63"); // 99 + $uut->putShort(0, 2); // 99 }); //Test: ByteBuffer_PutShortChecksLengthAndOffset $buffer = str_repeat("\0", 2); $uut = Google\FlatBuffers\ByteBuffer::wrap($buffer); $assert->Throws(new OutOfRangeException(), function() use ($uut) { - $uut->putShort(1, "\x63"); // 99 + $uut->putShort(1, 2); // 99 }); //Test: ByteBuffer_PutIntPopulatesBufferCorrectly @@ -625,7 +625,7 @@ class Assert { throw new \Exception("passed statement don't throw an exception."); } catch (\Exception $e) { if (get_class($e) != get_class($class)) { - throw new Exception("passed statement doesn't throw " . get_class($class) . ". throwws " . get_class($e)); + throw new Exception("passed statement doesn't throw " . get_class($class) . ". throws " . get_class($e) . ": {$e->getMessage()}"); } } }