Prohibit null values for string/bytes fields in generated code.

pull/660/head
Jon Skeet 10 years ago
parent 68380f0f66
commit 3980cf9df1
  1. 10
      csharp/src/Google.Protobuf.Test/GeneratedMessageTest.cs
  2. 11
      src/google/protobuf/compiler/csharp/csharp_field_base.cc
  3. 4
      src/google/protobuf/compiler/csharp/csharp_primitive_field.cc

@ -111,6 +111,16 @@ namespace Google.Protobuf
Assert.IsNull(message.OneofNestedMessage); 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] [Test]
public void RoundTrip_Empty() public void RoundTrip_Empty()
{ {

@ -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) { void FieldGeneratorBase::AddPublicMemberAttributes(io::Printer* printer) {
AddDeprecatedFlag(printer); AddDeprecatedFlag(printer);
} }

@ -81,7 +81,7 @@ void PrimitiveFieldGenerator::GenerateMembers(io::Printer* printer) {
} else { } else {
printer->Print( printer->Print(
variables_, variables_,
" $name$_ = value ?? $default_value$;\n"); " $name$_ = pb::Preconditions.CheckNotNull(value, \"value\");\n");
} }
printer->Print( printer->Print(
" }\n" " }\n"
@ -183,7 +183,7 @@ void PrimitiveOneofFieldGenerator::GenerateMembers(io::Printer* printer) {
} else { } else {
printer->Print( printer->Print(
variables_, variables_,
" $oneof_name$_ = value ?? $default_value$;\n"); " $oneof_name$_ = pb::Preconditions.CheckNotNull(value, \"value\");\n");
} }
printer->Print( printer->Print(
variables_, variables_,

Loading…
Cancel
Save