From b223b4f9ae63e5d9124704013bd903176c0608f3 Mon Sep 17 00:00:00 2001 From: dsavvinov Date: Thu, 21 Jul 2016 17:48:10 +0300 Subject: [PATCH] Protobuf: added runtime checks for wire types --- .../google/protobuf/compiler/kotlin/protoc | Bin 110112 -> 114448 bytes .../kotlin/src/kotlin_class_generator.cc | 26 +++++++----- .../kotlin/src/kotlin_field_generator.cc | 7 ++++ .../kotlin/src/kotlin_field_generator.h | 2 + .../kotlin/src/kotlin_name_resolver.cc | 38 ++++++++++++++++++ .../kotlin/src/kotlin_name_resolver.h | 2 + 6 files changed, 64 insertions(+), 11 deletions(-) diff --git a/proto/compiler/google/src/google/protobuf/compiler/kotlin/protoc b/proto/compiler/google/src/google/protobuf/compiler/kotlin/protoc index b2377c8317298214d52bb3c2e0a597746ad873ce..62ab8a4116418de7795aa8988b7332e66fad47b1 100755 GIT binary patch delta 28340 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 R&#UBEx|iZ|sOTf${{SrPxq1Kq delta 26703 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 z)!wJeGlgetFieldNumber()); vars["kotlinFunSuffix"] = properties[i]->getKotlinFunctionSuffix(); + vars["kotlinWireType"] = properties[i]->getWireType(); + vars["dl"] = "$"; printer->Print(vars, "$fieldNumber$ -> "); - // code for serialization arrays and messages consists of more than one line and needs enclosing brackets - if (properties[i]->getProtoLabel() == FieldDescriptor::LABEL_REPEATED - || properties[i]->getProtoType() == FieldDescriptor::TYPE_MESSAGE) { - printer->Print("{\n"); - printer->Indent(); - } + printer->Print("{\n"); + printer->Indent(); + + // check that wire type of that field is equal to expected + printer->Print(vars, "if (wireType != $kotlinWireType$) {\n"); + printer->Indent(); + printer->Print(vars, "throw InvalidProtocolBufferException(\"" + "Error: Field number $fieldNumber$ has wire type $kotlinWireType$" + " but read $dl${wireType.toString()}\")"); + printer->Outdent(); + printer->Print("}\n"); properties[i]->generateSerializationCode(printer, /* isRead = */ true, /* noTag = */ true); - if (properties[i]->getProtoLabel() == FieldDescriptor::LABEL_REPEATED - || properties[i]->getProtoType() == FieldDescriptor::TYPE_MESSAGE) { - printer->Outdent(); - printer->Print("}\n"); - } + printer->Outdent(); + printer->Print("}\n"); } // TODO: add parsing of unknown fields 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 b3f435213da..3a602ef7c1e 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 @@ -582,6 +582,13 @@ FieldGenerator FieldGenerator::getUnderlyingTypeGenerator() const { return *this; } +string FieldGenerator::getWireType() const { + if (descriptor->label() == FieldDescriptor::LABEL_REPEATED) { + return "WireType.LENGTH_DELIMITED"; + } + return name_resolving::protobufTypeToKotlinWireType(descriptor->type()); +} + } // namespace kotlin } // namespace compiler diff --git a/proto/compiler/google/src/google/protobuf/compiler/kotlin/src/kotlin_field_generator.h b/proto/compiler/google/src/google/protobuf/compiler/kotlin/src/kotlin_field_generator.h index 6c483789d45..c635145612c 100644 --- a/proto/compiler/google/src/google/protobuf/compiler/kotlin/src/kotlin_field_generator.h +++ b/proto/compiler/google/src/google/protobuf/compiler/kotlin/src/kotlin_field_generator.h @@ -81,6 +81,8 @@ public: /* Return function name in enum namespace that converts from enum to Int */ string getEnumFromIntConverter() const; + + string getWireType() const; void generateCode(io::Printer * printer, bool isBuilder) const; void generateSerializationCode(io::Printer * printer, bool isRead = false, bool noTag = false) const; void generateSizeEstimationCode(io::Printer * printer, string varName, bool noTag = false) const; diff --git a/proto/compiler/google/src/google/protobuf/compiler/kotlin/src/kotlin_name_resolver.cc b/proto/compiler/google/src/google/protobuf/compiler/kotlin/src/kotlin_name_resolver.cc index 3b29043a6b5..a4590b8f2d4 100644 --- a/proto/compiler/google/src/google/protobuf/compiler/kotlin/src/kotlin_name_resolver.cc +++ b/proto/compiler/google/src/google/protobuf/compiler/kotlin/src/kotlin_name_resolver.cc @@ -156,6 +156,44 @@ string protobufTypeToKotlinFunctionSuffix(FieldDescriptor::Type type) { } } +string protobufTypeToKotlinWireType(FieldDescriptor::Type type) { + switch (type) { + case FieldDescriptor::TYPE_DOUBLE: + return "WireType.FIX_64"; + case FieldDescriptor::TYPE_FLOAT: + return "WireType.FIX_32"; + case FieldDescriptor::TYPE_INT64: + return "WireType.VARINT"; + case FieldDescriptor::TYPE_UINT64: + return "WireType.VARINT"; + case FieldDescriptor::TYPE_INT32: + return "WireType.VARINT"; + case FieldDescriptor::TYPE_FIXED64: + return "WireType.FIX_64"; + case FieldDescriptor::TYPE_FIXED32: + return "WireType.FIX_32"; + case FieldDescriptor::TYPE_BOOL: + return "WireType.VARINT"; + case FieldDescriptor::TYPE_STRING: + return "WireType.LENGTH_DELIMITED"; + case FieldDescriptor::TYPE_MESSAGE: + return "WireType.LENGTH_DELIMITED"; + case FieldDescriptor::TYPE_BYTES: + return "WireType.LENGTH_DELIMITED"; + case FieldDescriptor::TYPE_UINT32: + return "WireType.VARINT"; + case FieldDescriptor::TYPE_ENUM: + return "WireType.VARINT"; + case FieldDescriptor::TYPE_SFIXED32: + return "WireType.FIX_32"; + case FieldDescriptor::TYPE_SFIXED64: + return "WireType.FIX_64"; + case FieldDescriptor::TYPE_SINT32: + return "WireType.VARINT"; + case FieldDescriptor::TYPE_SINT64: + return "WireType.VARINT"; + } +} } // namespace name_resolving NameResolver::NameResolver() { diff --git a/proto/compiler/google/src/google/protobuf/compiler/kotlin/src/kotlin_name_resolver.h b/proto/compiler/google/src/google/protobuf/compiler/kotlin/src/kotlin_name_resolver.h index 93910c9b586..fac4149615b 100644 --- a/proto/compiler/google/src/google/protobuf/compiler/kotlin/src/kotlin_name_resolver.h +++ b/proto/compiler/google/src/google/protobuf/compiler/kotlin/src/kotlin_name_resolver.h @@ -41,6 +41,8 @@ std::string protobufTypeToInitValue(FieldDescriptor::Type type); std::string protobufToKotlinType(FieldDescriptor::Type type); +std::string protobufTypeToKotlinWireType(FieldDescriptor::Type type); + /** * Converts one of protobuf wire types to corresponding Kotlin type with proper * naming, so it could be used as suffix after read/write, resulting in function