From 6032746882ea48ff6d983df8cb77e2ebf399bf0c Mon Sep 17 00:00:00 2001 From: Paul Yang Date: Mon, 9 Oct 2017 12:39:13 -0700 Subject: Reserve unknown fields in php (#3659) * Reserve unknown fields in upb 1) For decoding, an unknownfields will be lazily created on message, which contains bytes of unknown fields. 2) For encoding, if the unknownfields is present on message, all bytes contained in it will be serialized. * Register the function to encode unknown field at decode time. * Remove upb_handlers_setaddunknown * Use upb_sink_putunknown in decoder * Remove upb_pb_encoder_encode_unknown * Do not expose encode_unknown * Implement reserve unknown field in php Implement. * Make buffer private to CodedInputStream --- php/tests/encode_decode_test.php | 27 +++++++++++++++++++++++++++ php/tests/gdb_test.sh | 2 +- php/tests/memory_leak_test.php | 4 ++++ php/tests/proto/test.proto | 2 ++ 4 files changed, 34 insertions(+), 1 deletion(-) (limited to 'php/tests') diff --git a/php/tests/encode_decode_test.php b/php/tests/encode_decode_test.php index b43dffb4..4dca922b 100644 --- a/php/tests/encode_decode_test.php +++ b/php/tests/encode_decode_test.php @@ -441,6 +441,33 @@ class EncodeDecodeTest extends TestBase $m->mergeFromString(hex2bin('D205')); } + public function testUnknown() + { + $m = new TestMessage(); + $from = hex2bin('F80601'); + $m->mergeFromString($from); + $to = $m->serializeToString(); + $this->assertSame(bin2hex($from), bin2hex($to)); + + $m = new TestMessage(); + $from = hex2bin('F9060000000000000000'); + $m->mergeFromString($from); + $to = $m->serializeToString(); + $this->assertSame(bin2hex($from), bin2hex($to)); + + $m = new TestMessage(); + $from = hex2bin('FA0600'); + $m->mergeFromString($from); + $to = $m->serializeToString(); + $this->assertSame(bin2hex($from), bin2hex($to)); + + $m = new TestMessage(); + $from = hex2bin('FD0600000000'); + $m->mergeFromString($from); + $to = $m->serializeToString(); + $this->assertSame(bin2hex($from), bin2hex($to)); + } + public function testJsonEncode() { $from = new TestMessage(); diff --git a/php/tests/gdb_test.sh b/php/tests/gdb_test.sh index 0809bef3..484e2edf 100755 --- a/php/tests/gdb_test.sh +++ b/php/tests/gdb_test.sh @@ -3,7 +3,7 @@ # gdb --args php -dextension=../ext/google/protobuf/modules/protobuf.so `which # phpunit` --bootstrap autoload.php tmp_test.php # -gdb --args php -dextension=../ext/google/protobuf/modules/protobuf.so `which phpunit` --bootstrap autoload.php well_known_test.php +gdb --args php -dextension=../ext/google/protobuf/modules/protobuf.so `which phpunit` --bootstrap autoload.php encode_decode_test.php # # gdb --args php -dextension=../ext/google/protobuf/modules/protobuf.so memory_leak_test.php # diff --git a/php/tests/memory_leak_test.php b/php/tests/memory_leak_test.php index 7c3a1801..b76c8bff 100644 --- a/php/tests/memory_leak_test.php +++ b/php/tests/memory_leak_test.php @@ -101,6 +101,10 @@ $n = new TestMessage(); $n->mergeFromString($data); assert(1 === $n->getOneofMessage()->getA()); +$m = new TestMessage(); +$m->mergeFromString(hex2bin('F80601')); +assert('F80601', bin2hex($m->serializeToString())); + # $from = new TestMessage(); # $to = new TestMessage(); # TestUtil::setTestMessage($from); diff --git a/php/tests/proto/test.proto b/php/tests/proto/test.proto index 56cba446..d0109d83 100644 --- a/php/tests/proto/test.proto +++ b/php/tests/proto/test.proto @@ -115,6 +115,8 @@ message TestMessage { message Empty { int32 a = 1; } + + reserved 111; } enum TestEnum { -- cgit v1.2.3