From de5fae0d84a967f48412cd0a701f3e432978fe34 Mon Sep 17 00:00:00 2001 From: Jie Luo <jieluo@google.com> Date: Fri, 6 Jan 2023 04:59:58 -0800 Subject: [PATCH] Automated rollback of commit c105e85e7c46934bf0513d64901624669da42d30. PiperOrigin-RevId: 500150564 --- conformance/binary_json_conformance_suite.cc | 4 ---- conformance/failure_list_ruby.txt | 2 -- .../com/google/protobuf/util/JsonFormat.java | 16 ++++------------ src/google/protobuf/json/internal/unparser.cc | 12 ------------ 4 files changed, 4 insertions(+), 30 deletions(-) diff --git a/conformance/binary_json_conformance_suite.cc b/conformance/binary_json_conformance_suite.cc index a915c29263..239db3b7af 100644 --- a/conformance/binary_json_conformance_suite.cc +++ b/conformance/binary_json_conformance_suite.cc @@ -3334,10 +3334,6 @@ void BinaryAndJsonConformanceSuite::RunJsonTestsForValue() { return value.empty(); }, true); - ExpectSerializeFailureForJson("ValueRejectNanNumberValue", RECOMMENDED, - "optional_value: { number_value: nan}"); - ExpectSerializeFailureForJson("ValueRejectInfNumberValue", RECOMMENDED, - "optional_value: { number_value: inf}"); } void BinaryAndJsonConformanceSuite::RunJsonTestsForAny() { diff --git a/conformance/failure_list_ruby.txt b/conformance/failure_list_ruby.txt index 8eb63b9a7d..3c744391cf 100644 --- a/conformance/failure_list_ruby.txt +++ b/conformance/failure_list_ruby.txt @@ -58,5 +58,3 @@ Recommended.Proto3.ProtobufInput.ValidDataRepeated.UINT32.PackedInput.UnpackedOu Recommended.Proto3.ProtobufInput.ValidDataRepeated.UINT32.UnpackedInput.UnpackedOutput.ProtobufOutput Recommended.Proto3.ProtobufInput.ValidDataRepeated.UINT64.PackedInput.UnpackedOutput.ProtobufOutput Recommended.Proto3.ProtobufInput.ValidDataRepeated.UINT64.UnpackedInput.UnpackedOutput.ProtobufOutput -Recommended.ValueRejectInfNumberValue.JsonOutput -Recommended.ValueRejectNanNumberValue.JsonOutput diff --git a/java/util/src/main/java/com/google/protobuf/util/JsonFormat.java b/java/util/src/main/java/com/google/protobuf/util/JsonFormat.java index 96bc38898f..992980b0dc 100644 --- a/java/util/src/main/java/com/google/protobuf/util/JsonFormat.java +++ b/java/util/src/main/java/com/google/protobuf/util/JsonFormat.java @@ -51,6 +51,7 @@ import com.google.protobuf.Descriptors.Descriptor; import com.google.protobuf.Descriptors.EnumDescriptor; import com.google.protobuf.Descriptors.EnumValueDescriptor; import com.google.protobuf.Descriptors.FieldDescriptor; +import com.google.protobuf.Descriptors.FieldDescriptor.Type; import com.google.protobuf.Descriptors.FileDescriptor; import com.google.protobuf.Descriptors.OneofDescriptor; import com.google.protobuf.DoubleValue; @@ -965,16 +966,7 @@ public class JsonFormat { throw new InvalidProtocolBufferException("Invalid Value type."); } for (Map.Entry<FieldDescriptor, Object> entry : fields.entrySet()) { - FieldDescriptor field = entry.getKey(); - if (field.getType() == FieldDescriptor.Type.DOUBLE) { - Double doubleValue = (Double) entry.getValue(); - if (doubleValue.isNaN() || doubleValue.isInfinite()) { - throw new IllegalArgumentException( - "google.protobuf.Value cannot encode double values for " - + "infinity or nan, because they would be parsed as a string."); - } - } - printSingleFieldValue(field, entry.getValue()); + printSingleFieldValue(entry.getKey(), entry.getValue()); } } @@ -1691,7 +1683,7 @@ public class JsonFormat { Object key = parseFieldValue(keyField, new JsonPrimitive(entry.getKey()), entryBuilder); Object value = parseFieldValue(valueField, entry.getValue(), entryBuilder); if (value == null) { - if (ignoringUnknownFields && valueField.getType() == FieldDescriptor.Type.ENUM) { + if (ignoringUnknownFields && valueField.getType() == Type.ENUM) { continue; } else { throw new InvalidProtocolBufferException("Map value cannot be null."); @@ -1732,7 +1724,7 @@ public class JsonFormat { for (int i = 0; i < array.size(); ++i) { Object value = parseFieldValue(field, array.get(i), builder); if (value == null) { - if (ignoringUnknownFields && field.getType() == FieldDescriptor.Type.ENUM) { + if (ignoringUnknownFields && field.getType() == Type.ENUM) { continue; } else { throw new InvalidProtocolBufferException( diff --git a/src/google/protobuf/json/internal/unparser.cc b/src/google/protobuf/json/internal/unparser.cc index 0e26ff1db4..5bda3dbf03 100644 --- a/src/google/protobuf/json/internal/unparser.cc +++ b/src/google/protobuf/json/internal/unparser.cc @@ -34,7 +34,6 @@ #include <complex> #include <cstdint> #include <cstring> -#include <limits> #include <memory> #include <sstream> #include <string> @@ -490,17 +489,6 @@ absl::Status WriteValue(JsonWriter& writer, const Msg<Traits>& msg, if (Traits::GetSize(number_field, msg) > 0) { auto x = Traits::GetDouble(number_field, msg); RETURN_IF_ERROR(x.status()); - if (std::isnan(*x)) { - return absl::InvalidArgumentError( - "google.protobuf.Value cannot encode double values for nan, " - "because it would be parsed as a string"); - } - if (*x == std::numeric_limits<double>::infinity() | - *x == -std::numeric_limits<double>::infinity()) { - return absl::InvalidArgumentError( - "google.protobuf.Value cannot encode double values for " - "infinity, because it would be parsed as a string"); - } writer.Write(*x); return absl::OkStatus(); }