summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBrian Duff <bduff@google.com>2014-10-03 14:41:43 -0700
committerBrian Duff <bduff@google.com>2014-10-03 14:51:29 -0700
commitb7cf53ba3b46eb17180465d3d3bb151fa4d93f3d (patch)
tree9c7db61788771a6f6cd59a91994e5e9d2dc69827 /src
parent9be7e7401174d75e87e21fdc5f43549594a714bb (diff)
downloadexternal_protobuf-b7cf53ba3b46eb17180465d3d3bb151fa4d93f3d.zip
external_protobuf-b7cf53ba3b46eb17180465d3d3bb151fa4d93f3d.tar.gz
external_protobuf-b7cf53ba3b46eb17180465d3d3bb151fa4d93f3d.tar.bz2
Fix bug with large extension field numbers.
Previously, extensions with field numbers greater than 268435455 would result in a compile time error in generated code that looks something like this: Foo.java:3178: error: integer number too large: 3346754610 3346754610); This is because we were trying to represent the tag number (an unsigned int) using a java int constant, but java int constants are signed, and can't exceed Integer.MAX_VALUE. Fixed by declaring it as a long instead, and casting it down to an int in the implementation. This is safe, because the tag value always fits in 32 bis. Change-Id: If2017bacb4e20af667eaeaf9b65ddc2c30a7709f
Diffstat (limited to 'src')
-rw-r--r--src/google/protobuf/compiler/javanano/javanano_extension.cc2
-rw-r--r--src/google/protobuf/unittest_extension_nano.proto3
2 files changed, 4 insertions, 1 deletions
diff --git a/src/google/protobuf/compiler/javanano/javanano_extension.cc b/src/google/protobuf/compiler/javanano/javanano_extension.cc
index 754ed55..0b9d1d8 100644
--- a/src/google/protobuf/compiler/javanano/javanano_extension.cc
+++ b/src/google/protobuf/compiler/javanano/javanano_extension.cc
@@ -140,7 +140,7 @@ void ExtensionGenerator::Generate(io::Printer* printer) const {
" com.google.protobuf.nano.Extension.create$repeated$$ext_type$(\n"
" com.google.protobuf.nano.Extension.$type$,\n"
" $class$.class,\n"
- " $tag_params$);\n");
+ " $tag_params$L);\n");
}
} // namespace javanano
diff --git a/src/google/protobuf/unittest_extension_nano.proto b/src/google/protobuf/unittest_extension_nano.proto
index 2a678a8..d1c5766 100644
--- a/src/google/protobuf/unittest_extension_nano.proto
+++ b/src/google/protobuf/unittest_extension_nano.proto
@@ -21,6 +21,9 @@ message AnotherMessage {
message ContainerMessage {
extend ExtendableMessage {
optional bool another_thing = 100;
+ // The largest permitted field number, per
+ // https://developers.google.com/protocol-buffers/docs/proto#simple
+ optional bool large_field_number = 536870911;
}
}