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);
}
[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()
{

@ -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);
}

@ -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_,

Loading…
Cancel
Save