From 74e7decbbf130485a5bc5d792fb4f9285143bce3 Mon Sep 17 00:00:00 2001 From: Paul Yang Date: Thu, 30 Nov 2017 12:19:50 -0800 Subject: Provide discardUnknonwnFields API in php (#3976) * Provide discardUnknownFields API in php implementation * Provide discardUnknownFields API in php c extension. --- php/ext/google/protobuf/encode_decode.c | 9 +++++++++ php/ext/google/protobuf/message.c | 1 + php/ext/google/protobuf/protobuf.h | 1 + php/src/Google/Protobuf/Internal/Message.php | 9 +++++++++ php/tests/encode_decode_test.php | 7 +++++++ 5 files changed, 27 insertions(+) (limited to 'php') diff --git a/php/ext/google/protobuf/encode_decode.c b/php/ext/google/protobuf/encode_decode.c index 7e2b3ae6..ae5a61f5 100644 --- a/php/ext/google/protobuf/encode_decode.c +++ b/php/ext/google/protobuf/encode_decode.c @@ -1614,3 +1614,12 @@ PHP_METHOD(Message, mergeFromJsonString) { stackenv_uninit(&se); } } + +PHP_METHOD(Message, discardUnknownFields) { + MessageHeader* msg = UNBOX(MessageHeader, getThis()); + stringsink* unknown = DEREF(message_data(msg), 0, stringsink*); + if (unknown != NULL) { + stringsink_uninit(unknown); + DEREF(message_data(msg), 0, stringsink*) = NULL; + } +} diff --git a/php/ext/google/protobuf/message.c b/php/ext/google/protobuf/message.c index 3fce2c17..6db010c5 100644 --- a/php/ext/google/protobuf/message.c +++ b/php/ext/google/protobuf/message.c @@ -42,6 +42,7 @@ static void hex_to_binary(const char* hex, char** binary, int* binary_len); static zend_function_entry message_methods[] = { PHP_ME(Message, clear, NULL, ZEND_ACC_PUBLIC) + PHP_ME(Message, discardUnknownFields, NULL, ZEND_ACC_PUBLIC) PHP_ME(Message, serializeToString, NULL, ZEND_ACC_PUBLIC) PHP_ME(Message, mergeFromString, NULL, ZEND_ACC_PUBLIC) PHP_ME(Message, serializeToJsonString, NULL, ZEND_ACC_PUBLIC) diff --git a/php/ext/google/protobuf/protobuf.h b/php/ext/google/protobuf/protobuf.h index 967b21f1..ac42e714 100644 --- a/php/ext/google/protobuf/protobuf.h +++ b/php/ext/google/protobuf/protobuf.h @@ -969,6 +969,7 @@ PHP_METHOD(Message, serializeToString); PHP_METHOD(Message, mergeFromString); PHP_METHOD(Message, serializeToJsonString); PHP_METHOD(Message, mergeFromJsonString); +PHP_METHOD(Message, discardUnknownFields); // ----------------------------------------------------------------------------- // Type check / conversion. diff --git a/php/src/Google/Protobuf/Internal/Message.php b/php/src/Google/Protobuf/Internal/Message.php index a7a4f272..26d20575 100644 --- a/php/src/Google/Protobuf/Internal/Message.php +++ b/php/src/Google/Protobuf/Internal/Message.php @@ -576,6 +576,15 @@ class Message } } + /** + * Clear all unknown fields previously parsed. + * @return null. + */ + public function discardUnknownFields() + { + $this->unknown = ""; + } + /** * Merges the contents of the specified message into current message. * diff --git a/php/tests/encode_decode_test.php b/php/tests/encode_decode_test.php index 4dca922b..4512c871 100644 --- a/php/tests/encode_decode_test.php +++ b/php/tests/encode_decode_test.php @@ -466,6 +466,13 @@ class EncodeDecodeTest extends TestBase $m->mergeFromString($from); $to = $m->serializeToString(); $this->assertSame(bin2hex($from), bin2hex($to)); + + $m = new TestMessage(); + $from = hex2bin('F80601'); + $m->mergeFromString($from); + $m->discardUnknownFields(); + $to = $m->serializeToString(); + $this->assertSame("", bin2hex($to)); } public function testJsonEncode() -- cgit v1.2.3