am 70eec2ca: am 58eb8e98: am d20f0a42: Merge "Fix NPE when clearing an extension in nano protos"

* commit '70eec2cabb5fa7bf8d7d492ec46905dae3df5a76':
  Fix NPE when clearing an extension in nano protos
pull/91/head
Jan-Willem Maarse 11 years ago committed by Android Git Automerger
commit 42470ba6e0
  1. 2
      java/src/main/java/com/google/protobuf/nano/Extension.java
  2. 14
      java/src/test/java/com/google/protobuf/NanoTest.java

@ -268,7 +268,7 @@ public class Extension<M extends ExtendableMessageNano<M>, T> {
// After deletion or no-op addition (due to 'value' being an array of empty or // After deletion or no-op addition (due to 'value' being an array of empty or
// null-only elements), unknownFields may be empty. Discard the ArrayList if so. // null-only elements), unknownFields may be empty. Discard the ArrayList if so.
return (unknownFields.size() == 0) ? null : unknownFields; return (unknownFields == null || unknownFields.isEmpty()) ? null : unknownFields;
} }
protected UnknownFieldData writeData(Object value) { protected UnknownFieldData writeData(Object value) {

@ -2910,6 +2910,20 @@ public class NanoTest extends TestCase {
assertTrue(Arrays.equals(enums, message.getExtension(RepeatedExtensions.repeatedEnum))); assertTrue(Arrays.equals(enums, message.getExtension(RepeatedExtensions.repeatedEnum)));
} }
public void testNullExtensions() throws Exception {
// Check that clearing the extension on an empty message is a no-op.
Extensions.ExtendableMessage message = new Extensions.ExtendableMessage();
message.setExtension(SingularExtensions.someMessage, null);
assertEquals(0, MessageNano.toByteArray(message).length);
// Check that the message is empty after setting and clearing an extension.
AnotherMessage another = new AnotherMessage();
message.setExtension(SingularExtensions.someMessage, another);
assertTrue(MessageNano.toByteArray(message).length > 0);
message.setExtension(SingularExtensions.someMessage, null);
assertEquals(0, MessageNano.toByteArray(message).length);
}
public void testUnknownFields() throws Exception { public void testUnknownFields() throws Exception {
// Check that we roundtrip (serialize and deserialize) unrecognized fields. // Check that we roundtrip (serialize and deserialize) unrecognized fields.
AnotherMessage message = new AnotherMessage(); AnotherMessage message = new AnotherMessage();

Loading…
Cancel
Save