JS: ensure that extension values are serialized even if they're falsy There was a bug where for JavaScript we would only serialize an extension value if it evaluated as truthy, which meant that values like 0 would get silently dropped (even in proto2, where field presence is significant). This fixes issue #2605, and takes care of the output of toObject() in addition to the binary format.
diff --git a/js/binary/proto_test.js b/js/binary/proto_test.js index f86dc64..f5e1b6b 100644 --- a/js/binary/proto_test.js +++ b/js/binary/proto_test.js
@@ -283,8 +283,7 @@ * @param {!proto.jspb.test.TestExtendable} msg */ function checkExtensions(msg) { - assertEquals(-42, - msg.getExtension(proto.jspb.test.extendOptionalInt32)); + assertEquals(0, msg.getExtension(proto.jspb.test.extendOptionalInt32)); assertEquals(-0x7fffffff00000000, msg.getExtension(proto.jspb.test.extendOptionalInt64)); assertEquals(0x80000000, @@ -512,8 +511,7 @@ * @param {proto.jspb.test.TestExtendable} msg */ function fillExtensions(msg) { - msg.setExtension( - proto.jspb.test.extendOptionalInt32, -42); + msg.setExtension(proto.jspb.test.extendOptionalInt32, 0); msg.setExtension( proto.jspb.test.extendOptionalInt64, -0x7fffffff00000000); msg.setExtension(