diff options
author | Thomas Van Lenten <thomasvl@google.com> | 2017-06-06 10:41:04 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-06 10:41:04 -0400 |
commit | 516a81a4244d11f0fa6c40f87386a7bc35c37c6a (patch) | |
tree | 874e512c4556a628f0204180b8d6e073bea67475 /objectivec/Tests | |
parent | 656dedbf07ed88489bf60ddae4c583a0437d82cc (diff) | |
parent | ecc0f5412702e7f69b4578c92a120c56bdd79287 (diff) | |
download | protobuf-516a81a4244d11f0fa6c40f87386a7bc35c37c6a.tar.gz protobuf-516a81a4244d11f0fa6c40f87386a7bc35c37c6a.tar.bz2 protobuf-516a81a4244d11f0fa6c40f87386a7bc35c37c6a.zip |
Merge pull request #3190 from thomasvl/objc_IllegalZeroFieldNum
Properly error on a tag with field number zero.
Diffstat (limited to 'objectivec/Tests')
-rw-r--r-- | objectivec/Tests/GPBMessageTests+Serialization.m | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/objectivec/Tests/GPBMessageTests+Serialization.m b/objectivec/Tests/GPBMessageTests+Serialization.m index 38da0d77..2996f5ff 100644 --- a/objectivec/Tests/GPBMessageTests+Serialization.m +++ b/objectivec/Tests/GPBMessageTests+Serialization.m @@ -946,6 +946,41 @@ static NSData *DataFromCStr(const char *str) { XCTAssertEqual(error.code, GPBCodedInputStreamErrorInvalidTag); } +- (void)testZeroFieldNum { + // These are ConformanceTestSuite::TestIllegalTags. + + const char *tests[] = { + "\1DEADBEEF", + "\2\1\1", + "\3\4", + "\5DEAD" + }; + + for (size_t i = 0; i < GPBARRAYSIZE(tests); ++i) { + NSData *data = DataFromCStr(tests[i]); + + { + // Message from proto2 syntax file + NSError *error = nil; + Message2 *msg = [Message2 parseFromData:data error:&error]; + XCTAssertNil(msg, @"i = %zd", i); + XCTAssertNotNil(error, @"i = %zd", i); + XCTAssertEqualObjects(error.domain, GPBCodedInputStreamErrorDomain, @"i = %zd", i); + XCTAssertEqual(error.code, GPBCodedInputStreamErrorInvalidTag, @"i = %zd", i); + } + + { + // Message from proto3 syntax file + NSError *error = nil; + Message3 *msg = [Message3 parseFromData:data error:&error]; + XCTAssertNil(msg, @"i = %zd", i); + XCTAssertNotNil(error, @"i = %zd", i); + XCTAssertEqualObjects(error.domain, GPBCodedInputStreamErrorDomain, @"i = %zd", i); + XCTAssertEqual(error.code, GPBCodedInputStreamErrorInvalidTag, @"i = %zd", i); + } + } +} + - (void)testErrorRecursionDepthReached { NSData *data = DataFromCStr( "\x0A\xF2\x01\x0A\xEF\x01\x0A\xEC\x01\x0A\xE9\x01\x0A\xE6\x01" |