aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Jon Skeet <jonskeet@google.com>2015-07-30 13:35:42 +0100
committerGravatar Jon Skeet <jonskeet@google.com>2015-07-30 13:36:46 +0100
commit3980cf9df1ca9c66718f1fe9817011134f87bbcd (patch)
treed8d95294379f4fe3381357a52da598d9e48aac35
parent68380f0f6681c72a5d4ab5e69abc9670e9d99838 (diff)
Prohibit null values for string/bytes fields in generated code.
-rw-r--r--csharp/src/Google.Protobuf.Test/GeneratedMessageTest.cs10
-rw-r--r--src/google/protobuf/compiler/csharp/csharp_field_base.cc11
-rw-r--r--src/google/protobuf/compiler/csharp/csharp_primitive_field.cc4
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 dfaac48c..140b878c 100644
--- a/csharp/src/Google.Protobuf.Test/GeneratedMessageTest.cs
+++ b/csharp/src/Google.Protobuf.Test/GeneratedMessageTest.cs
@@ -112,6 +112,16 @@ namespace Google.Protobuf
}
[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()
{
var message = new TestAllTypes();
diff --git a/src/google/protobuf/compiler/csharp/csharp_field_base.cc b/src/google/protobuf/compiler/csharp/csharp_field_base.cc
index 2459d457..7e3bbeef 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 80f4a92d..fc043ec0 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_,