Prohibit null values in repeated and map fields in JSON
This commit is contained in:
parent
1a34ac03be
commit
888e71bdfc
2 changed files with 38 additions and 1 deletions
|
@ -170,6 +170,36 @@ namespace Google.Protobuf
|
|||
AssertRoundtrip(message);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void RepeatedField_NullElementProhibited()
|
||||
{
|
||||
string json = "{ \"repeated_foreign_message\": [null] }";
|
||||
Assert.Throws<InvalidProtocolBufferException>(() => TestAllTypes.Parser.ParseJson(json));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void RepeatedField_NullOverallValueAllowed()
|
||||
{
|
||||
string json = "{ \"repeated_foreign_message\": null }";
|
||||
Assert.AreEqual(new TestAllTypes(), TestAllTypes.Parser.ParseJson(json));
|
||||
}
|
||||
|
||||
[Test]
|
||||
[TestCase("{ \"mapInt32Int32\": { \"10\": null }")]
|
||||
[TestCase("{ \"mapStringString\": { \"abc\": null }")]
|
||||
[TestCase("{ \"mapInt32ForeignMessage\": { \"10\": null }")]
|
||||
public void MapField_NullValueProhibited(string json)
|
||||
{
|
||||
Assert.Throws<InvalidProtocolBufferException>(() => TestMap.Parser.ParseJson(json));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void MapField_NullOverallValueAllowed()
|
||||
{
|
||||
string json = "{ \"mapInt32Int32\": null }";
|
||||
Assert.AreEqual(new TestMap(), TestMap.Parser.ParseJson(json));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IndividualWrapperTypes()
|
||||
{
|
||||
|
|
|
@ -239,6 +239,10 @@ namespace Google.Protobuf
|
|||
return;
|
||||
}
|
||||
tokenizer.PushBack(token);
|
||||
if (token.Type == JsonToken.TokenType.Null)
|
||||
{
|
||||
throw new InvalidProtocolBufferException("Repeated field elements cannot be null");
|
||||
}
|
||||
list.Add(ParseSingleValue(field, tokenizer));
|
||||
}
|
||||
}
|
||||
|
@ -270,7 +274,10 @@ namespace Google.Protobuf
|
|||
}
|
||||
object key = ParseMapKey(keyField, token.StringValue);
|
||||
object value = ParseSingleValue(valueField, tokenizer);
|
||||
// TODO: Null handling
|
||||
if (value == null)
|
||||
{
|
||||
throw new InvalidProtocolBufferException("Map values must not be null");
|
||||
}
|
||||
dictionary[key] = value;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue