From 3980cf9df1ca9c66718f1fe9817011134f87bbcd Mon Sep 17 00:00:00 2001 From: Jon Skeet <jonskeet@google.com> Date: Thu, 30 Jul 2015 13:35:42 +0100 Subject: [PATCH] Prohibit null values for string/bytes fields in generated code. --- .../src/Google.Protobuf.Test/GeneratedMessageTest.cs | 10 ++++++++++ .../protobuf/compiler/csharp/csharp_field_base.cc | 11 ----------- .../compiler/csharp/csharp_primitive_field.cc | 4 ++-- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/csharp/src/Google.Protobuf.Test/GeneratedMessageTest.cs b/csharp/src/Google.Protobuf.Test/GeneratedMessageTest.cs index dfaac48cd0..140b878c15 100644 --- a/csharp/src/Google.Protobuf.Test/GeneratedMessageTest.cs +++ b/csharp/src/Google.Protobuf.Test/GeneratedMessageTest.cs @@ -111,6 +111,16 @@ namespace Google.Protobuf Assert.IsNull(message.OneofNestedMessage); } + [Test] + public void NullStringAndBytesRejected() + { + var message = new TestAllTypes(); + Assert.Throws<ArgumentNullException>(() => message.SingleString = null); + Assert.Throws<ArgumentNullException>(() => message.OneofString = null); + Assert.Throws<ArgumentNullException>(() => message.SingleBytes = null); + Assert.Throws<ArgumentNullException>(() => message.OneofBytes = null); + } + [Test] public void RoundTrip_Empty() { diff --git a/src/google/protobuf/compiler/csharp/csharp_field_base.cc b/src/google/protobuf/compiler/csharp/csharp_field_base.cc index 2459d457ed..7e3bbeef51 100644 --- a/src/google/protobuf/compiler/csharp/csharp_field_base.cc +++ b/src/google/protobuf/compiler/csharp/csharp_field_base.cc @@ -127,17 +127,6 @@ void FieldGeneratorBase::AddDeprecatedFlag(io::Printer* printer) { } } -void FieldGeneratorBase::AddNullCheck(io::Printer* printer) { - AddNullCheck(printer, "value"); -} - -void FieldGeneratorBase::AddNullCheck(io::Printer* printer, const std::string& name) { - if (is_nullable_type()) { - printer->Print(" pb::ThrowHelper.ThrowIfNull($name$, \"$name$\");\n", - "name", name); - } -} - void FieldGeneratorBase::AddPublicMemberAttributes(io::Printer* printer) { AddDeprecatedFlag(printer); } diff --git a/src/google/protobuf/compiler/csharp/csharp_primitive_field.cc b/src/google/protobuf/compiler/csharp/csharp_primitive_field.cc index 80f4a92d02..fc043ec06c 100644 --- a/src/google/protobuf/compiler/csharp/csharp_primitive_field.cc +++ b/src/google/protobuf/compiler/csharp/csharp_primitive_field.cc @@ -81,7 +81,7 @@ void PrimitiveFieldGenerator::GenerateMembers(io::Printer* printer) { } else { printer->Print( variables_, - " $name$_ = value ?? $default_value$;\n"); + " $name$_ = pb::Preconditions.CheckNotNull(value, \"value\");\n"); } printer->Print( " }\n" @@ -183,7 +183,7 @@ void PrimitiveOneofFieldGenerator::GenerateMembers(io::Printer* printer) { } else { printer->Print( variables_, - " $oneof_name$_ = value ?? $default_value$;\n"); + " $oneof_name$_ = pb::Preconditions.CheckNotNull(value, \"value\");\n"); } printer->Print( variables_,