aboutsummaryrefslogtreecommitdiff
path: root/java/src/main
diff options
context:
space:
mode:
authorkenton@google.com <kenton@google.com@630680e5-0e50-0410-840e-4b1c322b438d>2009-08-07 21:02:02 +0000
committerkenton@google.com <kenton@google.com@630680e5-0e50-0410-840e-4b1c322b438d>2009-08-07 21:02:02 +0000
commit68996fc874300337ec7349f50d0b1cbb3a6f1bec (patch)
treefd0f9a7b63b00dc0bc2898e6d44913dd95150423 /java/src/main
parent445f1023e1159212c65cb6c27c4f0a3121248a79 (diff)
downloadprotobuf-68996fc874300337ec7349f50d0b1cbb3a6f1bec.tar.gz
protobuf-68996fc874300337ec7349f50d0b1cbb3a6f1bec.tar.bz2
protobuf-68996fc874300337ec7349f50d0b1cbb3a6f1bec.zip
Gigantic descriptors shouldn't overflow the Java string literal size limit.
Diffstat (limited to 'java/src/main')
-rw-r--r--java/src/main/java/com/google/protobuf/Descriptors.java12
1 files changed, 10 insertions, 2 deletions
diff --git a/java/src/main/java/com/google/protobuf/Descriptors.java b/java/src/main/java/com/google/protobuf/Descriptors.java
index df934bb4..0c162d5d 100644
--- a/java/src/main/java/com/google/protobuf/Descriptors.java
+++ b/java/src/main/java/com/google/protobuf/Descriptors.java
@@ -244,7 +244,8 @@ public final class Descriptors {
* encoded in protocol buffer wire format.
*/
public static void internalBuildGeneratedFileFrom(
- final String descriptorData, final FileDescriptor[] dependencies,
+ final String[] descriptorDataParts,
+ final FileDescriptor[] dependencies,
final InternalDescriptorAssigner descriptorAssigner) {
// Hack: We can't embed a raw byte array inside generated Java code
// (at least, not efficiently), but we can embed Strings. So, the
@@ -255,9 +256,16 @@ public final class Descriptors {
// serialized form. So, if we convert it to bytes in ISO-8859-1, we
// should get the original bytes that we want.
+ // descriptorData may contain multiple strings in order to get around the
+ // Java 64k string literal limit.
+ StringBuilder descriptorData = new StringBuilder();
+ for (String part : descriptorDataParts) {
+ descriptorData.append(part);
+ }
+
final byte[] descriptorBytes;
try {
- descriptorBytes = descriptorData.getBytes("ISO-8859-1");
+ descriptorBytes = descriptorData.toString().getBytes("ISO-8859-1");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(
"Standard encoding ISO-8859-1 not supported by JVM.", e);