From abdd9dd9eb805d24288c9c1a6abe6b651877f72b Mon Sep 17 00:00:00 2001 From: dsavvinov Date: Wed, 20 Jul 2016 16:51:52 +0300 Subject: [PATCH] Protobuf: fixed a bug in message deserialization when nested messages ignored their expected size and tried to parse themselves until the end of the input --- .../google/protobuf/compiler/kotlin/Makefile | 10 ++++- .../google/protobuf/compiler/kotlin/protoc | Bin 101128 -> 105224 bytes .../kotlin/src/kotlin_class_generator.cc | 39 +++++++++++++++++- .../kotlin/src/kotlin_field_generator.cc | 2 +- 4 files changed, 46 insertions(+), 5 deletions(-) diff --git a/proto/compiler/google/src/google/protobuf/compiler/kotlin/Makefile b/proto/compiler/google/src/google/protobuf/compiler/kotlin/Makefile index 3dfd1f19b76..1909dc79bfb 100644 --- a/proto/compiler/google/src/google/protobuf/compiler/kotlin/Makefile +++ b/proto/compiler/google/src/google/protobuf/compiler/kotlin/Makefile @@ -26,8 +26,14 @@ clean: rm -rf $(BINDIR) generate: - ./protoc --kotlin_out=$$HOME/Downloads/carkot/proto/compiler/src ./test/addressbook.proto - ./protoc --kotlin_out=$$HOME/Downloads/carkot/proto/compiler/src ./test/nested-msg.proto + ./protoc --kotlin_out=$$HOME/Downloads/carkot/proto/compiler/protoc-artifacts ./test/addressbook.proto + ./protoc --kotlin_out=$$HOME/Downloads/carkot/proto/compiler/protoc-artifacts ./test/nested-msg.proto + ./protoc --kotlin_out=$$HOME/Downloads/carkot/proto/compiler/protoc-artifacts ./test/connect.proto + ./protoc --kotlin_out=$$HOME/Downloads/carkot/proto/compiler/protoc-artifacts ./test/error.proto + ./protoc --kotlin_out=$$HOME/Downloads/carkot/proto/compiler/protoc-artifacts ./test/location.proto + ./protoc --kotlin_out=$$HOME/Downloads/carkot/proto/compiler/protoc-artifacts ./test/nested-msg.proto + ./protoc --kotlin_out=$$HOME/Downloads/carkot/proto/compiler/protoc-artifacts ./test/routeDone.proto + ./protoc --kotlin_out=$$HOME/Downloads/carkot/proto/compiler/protoc-artifacts ./test/route.proto debug: gdb --args ./protoc --kotlin_out=$$HOME/Downloads/carkot/proto/compiler/src ./test/addressbook.proto diff --git a/proto/compiler/google/src/google/protobuf/compiler/kotlin/protoc b/proto/compiler/google/src/google/protobuf/compiler/kotlin/protoc index 68b489e4ea421ebc9aa4192a3c771d9facd40a38..33cf56944ca0f06c144f808875230c201a013532 100755 GIT binary patch delta 18830 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 UBmxa?G&55(Q#4C$P%)j5M7MR+ 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 diff --git a/proto/compiler/google/src/google/protobuf/compiler/kotlin/src/kotlin_class_generator.cc b/proto/compiler/google/src/google/protobuf/compiler/kotlin/src/kotlin_class_generator.cc index 9c4cad56f86..302b1b6499c 100644 --- a/proto/compiler/google/src/google/protobuf/compiler/kotlin/src/kotlin_class_generator.cc +++ b/proto/compiler/google/src/google/protobuf/compiler/kotlin/src/kotlin_class_generator.cc @@ -163,6 +163,18 @@ void ClassGenerator::generateMergeMethods(io::Printer *printer) const { printer->Print("}\n"); + // mergeFromWithSize(input: CodedInputStream, expectedSize: Int) + printer->Print("\n"); + printer->Print(vars, "fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) {\n"); + printer->Indent(); + + vars["builderName"] = getBuilderFullType(); + printer->Print(vars, "val builder = $builderName$()\n"); + printer->Print("mergeWith(builder.parseFromWithSize(input, expectedSize).build())"); + + printer->Outdent(); + printer->Print("}\n"); + // mergeFrom(input: CodedInputStream) printer->Print("\n"); printer->Print(vars, "fun mergeFrom (input: CodedInputStream) {\n"); @@ -312,14 +324,37 @@ void ClassGenerator::generateParseMethods(io::Printer *printer) const { printer->Outdent(); printer->Print("}\n"); // parseFieldFrom body + // parseFromWithSize(input: CodedInputStream, expectedSize: Int) + printer->Print(vars, + "fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): $builderName$ {\n"); + printer->Indent(); + printer->Print("while(parseFieldFrom(input)) {\n"); + printer->Indent(); + printer->Print("if (getSize() == expectedSize) { break }\n"); + vars["dollar"] = "$"; + printer->Print(vars, + "if (getSize() > expectedSize) { " + "throw InvalidProtocolBufferException(\"Error: expected size of message $dollar$expectedSize, but have read at least $dollar${getSize()}\") " + "}\n"); + printer->Outdent(); // while-loop; + printer->Print("}\n"); + + printer->Print("return this\n"); + + printer->Outdent(); // function body + printer->Print("}\n"); + + // parseFrom(input: CodedInputStream) printer->Print(vars, "fun parseFrom(input: CodedInputStream): $builderName$ {\n"); printer->Indent(); - printer->Print("while(parseFieldFrom(input)) {}\n"); + printer->Print("while(parseFieldFrom(input)) {"); + printer->Print("}\n"); + printer->Print("return this\n"); - printer->Outdent(); + printer->Outdent(); // function body printer->Print("}\n"); } diff --git a/proto/compiler/google/src/google/protobuf/compiler/kotlin/src/kotlin_field_generator.cc b/proto/compiler/google/src/google/protobuf/compiler/kotlin/src/kotlin_field_generator.cc index c1047401aa0..a1094b6681b 100644 --- a/proto/compiler/google/src/google/protobuf/compiler/kotlin/src/kotlin_field_generator.cc +++ b/proto/compiler/google/src/google/protobuf/compiler/kotlin/src/kotlin_field_generator.cc @@ -202,7 +202,7 @@ void FieldGenerator::generateSerializationCode(io::Printer *printer, bool isRead // read message itself without tag printer->Print(vars, - "$fieldName$.mergeFrom(input)\n"); + "$fieldName$.mergeFromWithSize(input, expectedSize)\n"); // check that actual size equal to expected size printer->Print(vars, "if (expectedSize != $fieldName$.getSize()) { "