diff options
author | kenton@google.com <kenton@google.com@630680e5-0e50-0410-840e-4b1c322b438d> | 2009-08-07 21:02:02 +0000 |
---|---|---|
committer | kenton@google.com <kenton@google.com@630680e5-0e50-0410-840e-4b1c322b438d> | 2009-08-07 21:02:02 +0000 |
commit | 68996fc874300337ec7349f50d0b1cbb3a6f1bec (patch) | |
tree | fd0f9a7b63b00dc0bc2898e6d44913dd95150423 /src/google/protobuf/compiler/java/java_file.cc | |
parent | 445f1023e1159212c65cb6c27c4f0a3121248a79 (diff) | |
download | protobuf-68996fc874300337ec7349f50d0b1cbb3a6f1bec.tar.gz protobuf-68996fc874300337ec7349f50d0b1cbb3a6f1bec.tar.bz2 protobuf-68996fc874300337ec7349f50d0b1cbb3a6f1bec.zip |
Gigantic descriptors shouldn't overflow the Java string literal size limit.
Diffstat (limited to 'src/google/protobuf/compiler/java/java_file.cc')
-rw-r--r-- | src/google/protobuf/compiler/java/java_file.cc | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/google/protobuf/compiler/java/java_file.cc b/src/google/protobuf/compiler/java/java_file.cc index 0e170b38..2aedde5e 100644 --- a/src/google/protobuf/compiler/java/java_file.cc +++ b/src/google/protobuf/compiler/java/java_file.cc @@ -256,20 +256,28 @@ void FileGenerator::GenerateEmbeddedDescriptor(io::Printer* printer) { "private static com.google.protobuf.Descriptors.FileDescriptor\n" " descriptor;\n" "static {\n" - " java.lang.String descriptorData =\n"); + " java.lang.String[] descriptorData = {\n"); printer->Indent(); printer->Indent(); // Only write 40 bytes per line. static const int kBytesPerLine = 40; for (int i = 0; i < file_data.size(); i += kBytesPerLine) { - if (i > 0) printer->Print(" +\n"); + if (i > 0) { + // Every 400 lines, start a new string literal, in order to avoid the + // 64k length limit. + if (i % 400 == 0) { + printer->Print(",\n"); + } else { + printer->Print(" +\n"); + } + } printer->Print("\"$data$\"", "data", CEscape(file_data.substr(i, kBytesPerLine))); } - printer->Print(";\n"); printer->Outdent(); + printer->Print("\n};\n"); // ----------------------------------------------------------------- // Create the InternalDescriptorAssigner. |