فهرست منبع

Test singular fields are encoded in canonical way (#6553)

* Test singular fields are encoded in canonical way

* Defautl values in proto3 should not be encoded.
* Values should be converted to the canonical representation (e.g.,
long int64 value may be truncated for int32 field)

* Update failure list

* Update failure list
Paul Yang 6 سال پیش
والد
کامیت
6c9d7ecfa4

+ 140 - 94
conformance/binary_json_conformance_suite.cc

@@ -206,6 +206,35 @@ std::unique_ptr<Message> NewTestMessage(bool is_proto3) {
   return prototype;
 }
 
+bool IsProto3Default(FieldDescriptor::Type type, const string& binary_data) {
+  switch (type) {
+    case FieldDescriptor::TYPE_DOUBLE:
+      return binary_data == dbl(0);
+    case FieldDescriptor::TYPE_FLOAT:
+      return binary_data == flt(0);
+    case FieldDescriptor::TYPE_BOOL:
+    case FieldDescriptor::TYPE_INT64:
+    case FieldDescriptor::TYPE_UINT64:
+    case FieldDescriptor::TYPE_INT32:
+    case FieldDescriptor::TYPE_UINT32:
+    case FieldDescriptor::TYPE_SINT32:
+    case FieldDescriptor::TYPE_SINT64:
+    case FieldDescriptor::TYPE_ENUM:
+      return binary_data == varint(0);
+    case FieldDescriptor::TYPE_FIXED64:
+    case FieldDescriptor::TYPE_SFIXED64:
+      return binary_data == u64(0);
+    case FieldDescriptor::TYPE_FIXED32:
+    case FieldDescriptor::TYPE_SFIXED32:
+      return binary_data == u32(0);
+    case FieldDescriptor::TYPE_STRING:
+    case FieldDescriptor::TYPE_BYTES:
+      return binary_data == delim("");
+    default:
+      return false;
+  }
+}
+
 }  // anonymous namespace
 
 namespace google {
@@ -623,14 +652,22 @@ void BinaryAndJsonConformanceSuite::TestValidDataForType(
     // Test singular data for singular fields.
     for (size_t i = 0; i < values.size(); i++) {
       string proto = cat(tag(field->number(), wire_type), values[i].first);
+      // In proto3, default primitive fields should not be encoded.
       string expected_proto =
-          cat(tag(field->number(), wire_type), values[i].second);
+          is_proto3 && IsProto3Default(field->type(), values[i].second) ?
+              "" :
+              cat(tag(field->number(), wire_type), values[i].second);
       std::unique_ptr<Message> test_message = NewTestMessage(is_proto3);
       test_message->MergeFromString(expected_proto);
       string text = test_message->DebugString();
 
       RunValidProtobufTest(StrCat("ValidDataScalar", type_name, "[", i, "]"),
                            REQUIRED, proto, text, is_proto3);
+      RunValidBinaryProtobufTest(
+          StrCat("ValidDataScalarBinary", type_name, "[", i, "]"),
+          RECOMMENDED,
+          proto,
+          expected_proto, is_proto3);
     }
 
     // Test repeated data for singular fields.
@@ -893,92 +930,103 @@ void BinaryAndJsonConformanceSuite::RunSuiteImpl() {
   int32 kInt32Min = -2147483648;
   uint32 kUint32Max = 4294967295UL;
 
-  TestValidDataForType(
-      FieldDescriptor::TYPE_DOUBLE,
-      {{dbl(0.1), dbl(0.1)},
-       {dbl(1.7976931348623157e+308), dbl(1.7976931348623157e+308)},
-       {dbl(2.22507385850720138309e-308), dbl(2.22507385850720138309e-308)}});
-  TestValidDataForType(
-      FieldDescriptor::TYPE_FLOAT,
-      {{flt(0.1), flt(0.1)},
-       {flt(1.00000075e-36), flt(1.00000075e-36)},
-       {flt(3.402823e+38), flt(3.402823e+38)},  // 3.40282347e+38
-       {flt(1.17549435e-38f), flt(1.17549435e-38)}});
-  TestValidDataForType(FieldDescriptor::TYPE_INT64,
-                       {{varint(12345), varint(12345)},
-                        {varint(kInt64Max), varint(kInt64Max)},
-                        {varint(kInt64Min), varint(kInt64Min)}});
-  TestValidDataForType(FieldDescriptor::TYPE_UINT64,
-                       {{varint(12345), varint(12345)},
-                        {varint(kUint64Max), varint(kUint64Max)},
-                        {varint(0), varint(0)}});
-  TestValidDataForType(FieldDescriptor::TYPE_INT32,
-                       {
-                           {varint(12345), varint(12345)},
-                           {longvarint(12345, 2), varint(12345)},
-                           {longvarint(12345, 7), varint(12345)},
-                           {varint(kInt32Max), varint(kInt32Max)},
-                           {varint(kInt32Min), varint(kInt32Min)},
-                           {varint(1LL << 33), varint(0)},
-                           {varint((1LL << 33) - 1), varint(-1)},
-                       });
-  TestValidDataForType(
-      FieldDescriptor::TYPE_UINT32,
-      {
-          {varint(12345), varint(12345)},
-          {longvarint(12345, 2), varint(12345)},
-          {longvarint(12345, 7), varint(12345)},
-          {varint(kUint32Max), varint(kUint32Max)},  // UINT32_MAX
-          {varint(0), varint(0)},
-          {varint(1LL << 33), varint(0)},
-          {varint((1LL << 33) - 1), varint((1LL << 32) - 1)},
-      });
-  TestValidDataForType(FieldDescriptor::TYPE_FIXED64,
-                       {{u64(12345), u64(12345)},
-                        {u64(kUint64Max), u64(kUint64Max)},
-                        {u64(0), u64(0)}});
-  TestValidDataForType(FieldDescriptor::TYPE_FIXED32,
-                       {{u32(12345), u32(12345)},
-                        {u32(kUint32Max), u32(kUint32Max)},  // UINT32_MAX
-                        {u32(0), u32(0)}});
-  TestValidDataForType(FieldDescriptor::TYPE_SFIXED64,
-                       {{u64(12345), u64(12345)},
-                        {u64(kInt64Max), u64(kInt64Max)},
-                        {u64(kInt64Min), u64(kInt64Min)}});
-  TestValidDataForType(FieldDescriptor::TYPE_SFIXED32,
-                       {{u32(12345), u32(12345)},
-                        {u32(kInt32Max), u32(kInt32Max)},
-                        {u32(kInt32Min), u32(kInt32Min)}});
-  TestValidDataForType(FieldDescriptor::TYPE_BOOL,
-                       {{varint(1), varint(1)},
-                        {varint(0), varint(0)},
-                        {varint(12345678), varint(1)}});
-  TestValidDataForType(FieldDescriptor::TYPE_SINT32,
-                       {{zz32(12345), zz32(12345)},
-                        {zz32(kInt32Max), zz32(kInt32Max)},
-                        {zz32(kInt32Min), zz32(kInt32Min)}});
-  TestValidDataForType(FieldDescriptor::TYPE_SINT64,
-                       {{zz64(12345), zz64(12345)},
-                        {zz64(kInt64Max), zz64(kInt64Max)},
-                        {zz64(kInt64Min), zz64(kInt64Min)}});
-  TestValidDataForType(
-      FieldDescriptor::TYPE_STRING,
-      {
-          {delim("Hello world!"), delim("Hello world!")},
-          {delim("\'\"\?\\\a\b\f\n\r\t\v"),
-           delim("\'\"\?\\\a\b\f\n\r\t\v")},       // escape
-          {delim("谷歌"), delim("谷歌")},          // Google in Chinese
-          {delim("\u8C37\u6B4C"), delim("谷歌")},  // unicode escape
-          {delim("\u8c37\u6b4c"), delim("谷歌")},  // lowercase unicode
-          {delim("\xF0\x9F\x98\x81"), delim("\xF0\x9F\x98\x81")},  // emoji: 😁
-          {delim(""), delim("")},
-      });
-  TestValidDataForType(FieldDescriptor::TYPE_BYTES,
-                       {
-                           {delim("\x01\x02"), delim("\x01\x02")},
-                           {delim("\xfb"), delim("\xfb")},
-                           {delim(""), delim("")},
-                       });
+  TestValidDataForType(FieldDescriptor::TYPE_DOUBLE, {
+    {dbl(0), dbl(0)},
+    {dbl(0.1), dbl(0.1)},
+    {dbl(1.7976931348623157e+308), dbl(1.7976931348623157e+308)},
+    {dbl(2.22507385850720138309e-308), dbl(2.22507385850720138309e-308)},
+  });
+  TestValidDataForType(FieldDescriptor::TYPE_FLOAT, {
+    {flt(0), flt(0)},
+    {flt(0.1), flt(0.1)},
+    {flt(1.00000075e-36), flt(1.00000075e-36)},
+    {flt(3.402823e+38), flt(3.402823e+38)},  // 3.40282347e+38
+    {flt(1.17549435e-38f), flt(1.17549435e-38)},
+  });
+  TestValidDataForType(FieldDescriptor::TYPE_INT64, {
+    {varint(0), varint(0)},
+    {varint(12345), varint(12345)},
+    {varint(kInt64Max), varint(kInt64Max)},
+    {varint(kInt64Min), varint(kInt64Min)},
+  });
+  TestValidDataForType(FieldDescriptor::TYPE_UINT64, {
+    {varint(0), varint(0)},
+    {varint(12345), varint(12345)},
+    {varint(kUint64Max), varint(kUint64Max)},
+  });
+  TestValidDataForType(FieldDescriptor::TYPE_INT32, {
+    {varint(0), varint(0)},
+    {varint(12345), varint(12345)},
+    {longvarint(12345, 2), varint(12345)},
+    {longvarint(12345, 7), varint(12345)},
+    {varint(kInt32Max), varint(kInt32Max)},
+    {varint(kInt32Min), varint(kInt32Min)},
+    {varint(1LL << 33), varint(0)},
+    {varint((1LL << 33) - 1), varint(-1)},
+  });
+  TestValidDataForType(FieldDescriptor::TYPE_UINT32, {
+    {varint(0), varint(0)},
+    {varint(12345), varint(12345)},
+    {longvarint(12345, 2), varint(12345)},
+    {longvarint(12345, 7), varint(12345)},
+    {varint(kUint32Max), varint(kUint32Max)},  // UINT32_MAX
+    {varint(1LL << 33), varint(0)},
+    {varint((1LL << 33) - 1), varint((1LL << 32) - 1)},
+  });
+  TestValidDataForType(FieldDescriptor::TYPE_FIXED64, {
+    {u64(0), u64(0)},
+    {u64(12345), u64(12345)},
+    {u64(kUint64Max), u64(kUint64Max)},
+  });
+  TestValidDataForType(FieldDescriptor::TYPE_FIXED32, {
+    {u32(0), u32(0)},
+    {u32(12345), u32(12345)},
+    {u32(kUint32Max), u32(kUint32Max)},  // UINT32_MAX
+  });
+  TestValidDataForType(FieldDescriptor::TYPE_SFIXED64, {
+    {u64(0), u64(0)},
+    {u64(12345), u64(12345)},
+    {u64(kInt64Max), u64(kInt64Max)},
+    {u64(kInt64Min), u64(kInt64Min)},
+  });
+  TestValidDataForType(FieldDescriptor::TYPE_SFIXED32, {
+    {u32(0), u32(0)},
+    {u32(12345), u32(12345)},
+    {u32(kInt32Max), u32(kInt32Max)},
+    {u32(kInt32Min), u32(kInt32Min)},
+  });
+  TestValidDataForType(FieldDescriptor::TYPE_BOOL, {
+    {varint(0), varint(0)},
+    {varint(1), varint(1)},
+    {varint(12345678), varint(1)},
+  });
+  TestValidDataForType(FieldDescriptor::TYPE_SINT32, {
+    {zz32(0), zz32(0)},
+    {zz32(12345), zz32(12345)},
+    {zz32(kInt32Max), zz32(kInt32Max)},
+    {zz32(kInt32Min), zz32(kInt32Min)},
+  });
+  TestValidDataForType(FieldDescriptor::TYPE_SINT64, {
+    {zz64(0), zz64(0)},
+    {zz64(12345), zz64(12345)},
+    {zz64(kInt64Max), zz64(kInt64Max)},
+    {zz64(kInt64Min), zz64(kInt64Min)},
+  });
+  TestValidDataForType(FieldDescriptor::TYPE_STRING, {
+    {delim(""), delim("")},
+    {delim("Hello world!"), delim("Hello world!")},
+    {delim("\'\"\?\\\a\b\f\n\r\t\v"),
+     delim("\'\"\?\\\a\b\f\n\r\t\v")},  // escape
+    {delim("谷歌"), delim("谷歌")},  // Google in Chinese
+    {delim("\u8C37\u6B4C"), delim("谷歌")},  // unicode escape
+    {delim("\u8c37\u6b4c"), delim("谷歌")},  // lowercase unicode
+    {delim("\xF0\x9F\x98\x81"), delim("\xF0\x9F\x98\x81")},  // emoji: 😁
+  });
+  TestValidDataForType(FieldDescriptor::TYPE_BYTES, {
+    {delim(""), delim("")},
+    {delim("\x01\x02"), delim("\x01\x02")},
+    {delim("\xfb"), delim("\xfb")},
+  });
   TestValidDataForType(FieldDescriptor::TYPE_ENUM, {
                                                        {varint(0), varint(0)},
                                                        {varint(1), varint(1)},
@@ -986,13 +1034,11 @@ void BinaryAndJsonConformanceSuite::RunSuiteImpl() {
                                                        {varint(-1), varint(-1)},
                                                    });
   TestValidDataForRepeatedScalarMessage();
-  TestValidDataForType(
-      FieldDescriptor::TYPE_MESSAGE,
-      {
-          {delim(cat(tag(1, WireFormatLite::WIRETYPE_VARINT), varint(1234))),
-           delim(cat(tag(1, WireFormatLite::WIRETYPE_VARINT), varint(1234)))},
-          {delim(""), delim("")},
-      });
+  TestValidDataForType(FieldDescriptor::TYPE_MESSAGE, {
+    {delim(""), delim("")},
+    {delim(cat(tag(1, WireFormatLite::WIRETYPE_VARINT), varint(1234))),
+     delim(cat(tag(1, WireFormatLite::WIRETYPE_VARINT), varint(1234)))},
+  });
 
   // TODO(haberman):
   // TestValidDataForType(FieldDescriptor::TYPE_GROUP

+ 2 - 0
conformance/failure_list_objc.txt

@@ -6,9 +6,11 @@ Recommended.Proto2.ProtobufInput.ValidDataRepeated.ENUM.PackedInput.UnpackedOutp
 Recommended.Proto2.ProtobufInput.ValidDataRepeated.ENUM.UnpackedInput.DefaultOutput.ProtobufOutput
 Recommended.Proto2.ProtobufInput.ValidDataRepeated.ENUM.UnpackedInput.PackedOutput.ProtobufOutput
 Recommended.Proto2.ProtobufInput.ValidDataRepeated.ENUM.UnpackedInput.UnpackedOutput.ProtobufOutput
+Recommended.Proto2.ProtobufInput.ValidDataScalarBinary.ENUM[3].ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.ENUM.PackedInput.DefaultOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.ENUM.PackedInput.PackedOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.ENUM.PackedInput.UnpackedOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.ENUM.UnpackedInput.DefaultOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.ENUM.UnpackedInput.PackedOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.ENUM.UnpackedInput.UnpackedOutput.ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataScalarBinary.ENUM[3].ProtobufOutput

+ 28 - 28
conformance/failure_list_php.txt

@@ -7,59 +7,59 @@ Recommended.Proto3.JsonInput.FieldMaskInvalidCharacter
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.BOOL.PackedInput.DefaultOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.BOOL.PackedInput.PackedOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.BOOL.UnpackedInput.DefaultOutput.ProtobufOutput
-  Recommended.Proto3.ProtobufInput.ValidDataRepeated.BOOL.UnpackedInput.PackedOutput.ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataRepeated.BOOL.UnpackedInput.PackedOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.DOUBLE.PackedInput.DefaultOutput.ProtobufOutput
-  Recommended.Proto3.ProtobufInput.ValidDataRepeated.DOUBLE.PackedInput.PackedOutput.ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataRepeated.DOUBLE.PackedInput.PackedOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.DOUBLE.UnpackedInput.DefaultOutput.ProtobufOutput
-  Recommended.Proto3.ProtobufInput.ValidDataRepeated.DOUBLE.UnpackedInput.PackedOutput.ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataRepeated.DOUBLE.UnpackedInput.PackedOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.ENUM.PackedInput.DefaultOutput.ProtobufOutput
-  Recommended.Proto3.ProtobufInput.ValidDataRepeated.ENUM.PackedInput.PackedOutput.ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataRepeated.ENUM.PackedInput.PackedOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.ENUM.UnpackedInput.DefaultOutput.ProtobufOutput
-  Recommended.Proto3.ProtobufInput.ValidDataRepeated.ENUM.UnpackedInput.PackedOutput.ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataRepeated.ENUM.UnpackedInput.PackedOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.FIXED32.PackedInput.DefaultOutput.ProtobufOutput
-  Recommended.Proto3.ProtobufInput.ValidDataRepeated.FIXED32.PackedInput.PackedOutput.ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataRepeated.FIXED32.PackedInput.PackedOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.FIXED32.UnpackedInput.DefaultOutput.ProtobufOutput
-  Recommended.Proto3.ProtobufInput.ValidDataRepeated.FIXED32.UnpackedInput.PackedOutput.ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataRepeated.FIXED32.UnpackedInput.PackedOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.FIXED64.PackedInput.DefaultOutput.ProtobufOutput
-  Recommended.Proto3.ProtobufInput.ValidDataRepeated.FIXED64.PackedInput.PackedOutput.ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataRepeated.FIXED64.PackedInput.PackedOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.FIXED64.UnpackedInput.DefaultOutput.ProtobufOutput
-  Recommended.Proto3.ProtobufInput.ValidDataRepeated.FIXED64.UnpackedInput.PackedOutput.ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataRepeated.FIXED64.UnpackedInput.PackedOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.FLOAT.PackedInput.DefaultOutput.ProtobufOutput
-  Recommended.Proto3.ProtobufInput.ValidDataRepeated.FLOAT.PackedInput.PackedOutput.ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataRepeated.FLOAT.PackedInput.PackedOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.FLOAT.UnpackedInput.DefaultOutput.ProtobufOutput
-  Recommended.Proto3.ProtobufInput.ValidDataRepeated.FLOAT.UnpackedInput.PackedOutput.ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataRepeated.FLOAT.UnpackedInput.PackedOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.INT32.PackedInput.DefaultOutput.ProtobufOutput
-  Recommended.Proto3.ProtobufInput.ValidDataRepeated.INT32.PackedInput.PackedOutput.ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataRepeated.INT32.PackedInput.PackedOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.INT32.UnpackedInput.DefaultOutput.ProtobufOutput
-  Recommended.Proto3.ProtobufInput.ValidDataRepeated.INT32.UnpackedInput.PackedOutput.ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataRepeated.INT32.UnpackedInput.PackedOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.INT64.PackedInput.DefaultOutput.ProtobufOutput
-  Recommended.Proto3.ProtobufInput.ValidDataRepeated.INT64.PackedInput.PackedOutput.ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataRepeated.INT64.PackedInput.PackedOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.INT64.UnpackedInput.DefaultOutput.ProtobufOutput
-  Recommended.Proto3.ProtobufInput.ValidDataRepeated.INT64.UnpackedInput.PackedOutput.ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataRepeated.INT64.UnpackedInput.PackedOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.SFIXED32.PackedInput.DefaultOutput.ProtobufOutput
-  Recommended.Proto3.ProtobufInput.ValidDataRepeated.SFIXED32.PackedInput.PackedOutput.ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataRepeated.SFIXED32.PackedInput.PackedOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.SFIXED32.UnpackedInput.DefaultOutput.ProtobufOutput
-  Recommended.Proto3.ProtobufInput.ValidDataRepeated.SFIXED32.UnpackedInput.PackedOutput.ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataRepeated.SFIXED32.UnpackedInput.PackedOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.SFIXED64.PackedInput.DefaultOutput.ProtobufOutput
-  Recommended.Proto3.ProtobufInput.ValidDataRepeated.SFIXED64.PackedInput.PackedOutput.ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataRepeated.SFIXED64.PackedInput.PackedOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.SFIXED64.UnpackedInput.DefaultOutput.ProtobufOutput
-  Recommended.Proto3.ProtobufInput.ValidDataRepeated.SFIXED64.UnpackedInput.PackedOutput.ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataRepeated.SFIXED64.UnpackedInput.PackedOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.SINT32.PackedInput.DefaultOutput.ProtobufOutput
-  Recommended.Proto3.ProtobufInput.ValidDataRepeated.SINT32.PackedInput.PackedOutput.ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataRepeated.SINT32.PackedInput.PackedOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.SINT32.UnpackedInput.DefaultOutput.ProtobufOutput
-  Recommended.Proto3.ProtobufInput.ValidDataRepeated.SINT32.UnpackedInput.PackedOutput.ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataRepeated.SINT32.UnpackedInput.PackedOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.SINT64.PackedInput.DefaultOutput.ProtobufOutput
-  Recommended.Proto3.ProtobufInput.ValidDataRepeated.SINT64.PackedInput.PackedOutput.ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataRepeated.SINT64.PackedInput.PackedOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.SINT64.UnpackedInput.DefaultOutput.ProtobufOutput
-  Recommended.Proto3.ProtobufInput.ValidDataRepeated.SINT64.UnpackedInput.PackedOutput.ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataRepeated.SINT64.UnpackedInput.PackedOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.UINT32.PackedInput.DefaultOutput.ProtobufOutput
-  Recommended.Proto3.ProtobufInput.ValidDataRepeated.UINT32.PackedInput.PackedOutput.ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataRepeated.UINT32.PackedInput.PackedOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.UINT32.UnpackedInput.DefaultOutput.ProtobufOutput
-  Recommended.Proto3.ProtobufInput.ValidDataRepeated.UINT32.UnpackedInput.PackedOutput.ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataRepeated.UINT32.UnpackedInput.PackedOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.UINT64.PackedInput.DefaultOutput.ProtobufOutput
-  Recommended.Proto3.ProtobufInput.ValidDataRepeated.UINT64.PackedInput.PackedOutput.ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataRepeated.UINT64.PackedInput.PackedOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.UINT64.UnpackedInput.DefaultOutput.ProtobufOutput
-  Recommended.Proto3.ProtobufInput.ValidDataRepeated.UINT64.UnpackedInput.PackedOutput.ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataRepeated.UINT64.UnpackedInput.PackedOutput.ProtobufOutput
 Required.Proto3.JsonInput.DoubleFieldTooSmall
 Required.Proto3.JsonInput.FloatFieldTooLarge
 Required.Proto3.JsonInput.FloatFieldTooSmall
@@ -77,4 +77,4 @@ Required.Proto3.ProtobufInput.RepeatedScalarMessageMerge.JsonOutput
 Required.Proto3.ProtobufInput.RepeatedScalarMessageMerge.ProtobufOutput
 Required.Proto3.ProtobufInput.ValidDataRepeated.FLOAT.PackedInput.JsonOutput
 Required.Proto3.ProtobufInput.ValidDataRepeated.FLOAT.UnpackedInput.JsonOutput
-Required.Proto3.ProtobufInput.ValidDataScalar.FLOAT[1].JsonOutput
+Required.Proto3.ProtobufInput.ValidDataScalar.FLOAT[2].JsonOutput

+ 2 - 1
conformance/failure_list_php_c.txt

@@ -45,6 +45,7 @@ Recommended.Proto3.ProtobufInput.ValidDataRepeated.UINT32.PackedInput.DefaultOut
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.UINT32.UnpackedInput.DefaultOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.UINT64.PackedInput.DefaultOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.UINT64.UnpackedInput.DefaultOutput.ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataScalarBinary.ENUM[3].ProtobufOutput
 Required.DurationProtoInputTooLarge.JsonOutput
 Required.DurationProtoInputTooSmall.JsonOutput
 Required.Proto3.JsonInput.DoubleFieldMaxNegativeValue.JsonOutput
@@ -71,7 +72,7 @@ Required.Proto3.ProtobufInput.ValidDataRepeated.FLOAT.PackedInput.JsonOutput
 Required.Proto3.ProtobufInput.ValidDataRepeated.FLOAT.UnpackedInput.JsonOutput
 Required.Proto3.ProtobufInput.ValidDataRepeated.STRING.JsonOutput
 Required.Proto3.ProtobufInput.ValidDataRepeated.STRING.ProtobufOutput
-Required.Proto3.ProtobufInput.ValidDataScalar.FLOAT[1].JsonOutput
+Required.Proto3.ProtobufInput.ValidDataScalar.FLOAT[2].JsonOutput
 Required.TimestampProtoInputTooLarge.JsonOutput
 Required.TimestampProtoInputTooSmall.JsonOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.BOOL.PackedInput.PackedOutput.ProtobufOutput

+ 18 - 0
conformance/failure_list_python.txt

@@ -6,6 +6,24 @@ Recommended.Proto3.JsonInput.DoubleFieldNegativeInfinityNotQuoted
 Recommended.Proto3.JsonInput.FloatFieldInfinityNotQuoted
 Recommended.Proto3.JsonInput.FloatFieldNanNotQuoted
 Recommended.Proto3.JsonInput.FloatFieldNegativeInfinityNotQuoted
+Recommended.Proto3.ProtobufInput.ValidDataScalarBinary.BOOL[0].ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataScalarBinary.BYTES[0].ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataScalarBinary.DOUBLE[0].ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataScalarBinary.ENUM[0].ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataScalarBinary.FIXED32[0].ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataScalarBinary.FIXED64[0].ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataScalarBinary.FLOAT[0].ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataScalarBinary.INT32[0].ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataScalarBinary.INT32[6].ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataScalarBinary.INT64[0].ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataScalarBinary.SFIXED32[0].ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataScalarBinary.SFIXED64[0].ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataScalarBinary.SINT32[0].ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataScalarBinary.SINT64[0].ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataScalarBinary.STRING[0].ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataScalarBinary.UINT32[0].ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataScalarBinary.UINT32[5].ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataScalarBinary.UINT64[0].ProtobufOutput
 Required.Proto3.JsonInput.DoubleFieldTooSmall
 Required.Proto3.JsonInput.FloatFieldTooLarge
 Required.Proto3.JsonInput.FloatFieldTooSmall

+ 2 - 1
conformance/failure_list_ruby.txt

@@ -73,6 +73,7 @@ Recommended.Proto3.ProtobufInput.ValidDataRepeated.UINT64.PackedInput.DefaultOut
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.UINT64.PackedInput.PackedOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.UINT64.UnpackedInput.DefaultOutput.ProtobufOutput
 Recommended.Proto3.ProtobufInput.ValidDataRepeated.UINT64.UnpackedInput.PackedOutput.ProtobufOutput
+Recommended.Proto3.ProtobufInput.ValidDataScalarBinary.ENUM[3].ProtobufOutput
 Required.DurationProtoInputTooLarge.JsonOutput
 Required.DurationProtoInputTooSmall.JsonOutput
 Required.Proto3.JsonInput.DoubleFieldMaxNegativeValue.JsonOutput
@@ -121,6 +122,6 @@ Required.Proto3.ProtobufInput.FloatFieldNormalizeQuietNan.JsonOutput
 Required.Proto3.ProtobufInput.FloatFieldNormalizeSignalingNan.JsonOutput
 Required.Proto3.ProtobufInput.ValidDataRepeated.FLOAT.PackedInput.JsonOutput
 Required.Proto3.ProtobufInput.ValidDataRepeated.FLOAT.UnpackedInput.JsonOutput
-Required.Proto3.ProtobufInput.ValidDataScalar.FLOAT[1].JsonOutput
+Required.Proto3.ProtobufInput.ValidDataScalar.FLOAT[2].JsonOutput
 Required.TimestampProtoInputTooLarge.JsonOutput
 Required.TimestampProtoInputTooSmall.JsonOutput