aboutsummaryrefslogtreecommitdiff
path: root/objectivec/Tests/GPBMessageTests+Serialization.m
diff options
context:
space:
mode:
authorThomas Van Lenten <thomasvl@google.com>2017-06-06 10:14:41 -0400
committerThomas Van Lenten <thomasvl@google.com>2017-06-06 10:14:41 -0400
commitecc0f5412702e7f69b4578c92a120c56bdd79287 (patch)
tree874e512c4556a628f0204180b8d6e073bea67475 /objectivec/Tests/GPBMessageTests+Serialization.m
parent656dedbf07ed88489bf60ddae4c583a0437d82cc (diff)
downloadprotobuf-ecc0f5412702e7f69b4578c92a120c56bdd79287.tar.gz
protobuf-ecc0f5412702e7f69b4578c92a120c56bdd79287.tar.bz2
protobuf-ecc0f5412702e7f69b4578c92a120c56bdd79287.zip
Properly error on a tag with field number zero.
Diffstat (limited to 'objectivec/Tests/GPBMessageTests+Serialization.m')
-rw-r--r--objectivec/Tests/GPBMessageTests+Serialization.m35
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"