From c662d03699a086611965ee55f8a7c5e5d17f95d5 Mon Sep 17 00:00:00 2001 From: dsavvinov Date: Mon, 8 Aug 2016 14:24:07 +0300 Subject: [PATCH] Protobuf: fixed bugs in getVarint32Size/getVarint64Size. Fixed bug in serialization of packed fields --- .../google/protobuf/compiler/kotlin/Makefile | 17 +-- .../google/protobuf/compiler/kotlin/protoc | Bin 114448 -> 114448 bytes .../kotlin/src/kotlin_field_generator.cc | 2 +- .../compiler/kotlin/test/connect.proto | 2 +- proto/compiler/src/CodedInputStream.kt | 93 +---------------- proto/compiler/src/CodedOutputStream.kt | 98 +----------------- proto/compiler/src/KotlinOutputStream.kt | 4 +- proto/compiler/src/WireFormat.kt | 4 +- 8 files changed, 16 insertions(+), 204 deletions(-) diff --git a/proto/compiler/google/src/google/protobuf/compiler/kotlin/Makefile b/proto/compiler/google/src/google/protobuf/compiler/kotlin/Makefile index 9e736b2237d..7bd832d180a 100644 --- a/proto/compiler/google/src/google/protobuf/compiler/kotlin/Makefile +++ b/proto/compiler/google/src/google/protobuf/compiler/kotlin/Makefile @@ -26,20 +26,11 @@ clean: rm -rf $(BINDIR) generate: - ./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/direction.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_done.proto ./protoc --kotlin_out=$$HOME/Downloads/carkot/proto/compiler/protoc-artifacts ./test/route.proto - ./protoc --kotlin_out=$$HOME/Downloads/carkot/proto/compiler/protoc-artifacts ./test/cross-branch-access.proto - ./protoc --kotlin_out=$$HOME/Downloads/carkot/proto/compiler/protoc-artifacts ./test/base.proto - ./protoc --kotlin_out=$$HOME/Downloads/carkot/proto/compiler/protoc-artifacts ./test/extended.proto + ./protoc --kotlin_out=$$HOME/Downloads/carkot/proto/compiler/protoc-artifacts ./test/rc_session.proto -debug: - gdb --args ./protoc --kotlin_out=$$HOME/Downloads/carkot/proto/compiler/src ./test/addressbook.proto - gdb --args ./protoc --kotlin_out=$$HOME/Downloads/carkot/proto/compiler/src ./test/nested-msg.proto - -.PHONY: clean all generate debug +.PHONY: clean all generate diff --git a/proto/compiler/google/src/google/protobuf/compiler/kotlin/protoc b/proto/compiler/google/src/google/protobuf/compiler/kotlin/protoc index 0204430d3ff744cedf534b26532afbacf7293076..6083f21eb90e3ee45a89cad1b5441a30adef8669 100755 GIT binary patch delta 22087 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 delta 23438 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, "output.write$suffix$NoTag ()\n"); + printer->Print(vars, "output.write$suffix$NoTag ($fieldName$)\n"); } else { printer->Print(vars, "output.write$suffix$ ($fieldNumber$, $fieldName$)\n"); diff --git a/proto/compiler/google/src/google/protobuf/compiler/kotlin/test/connect.proto b/proto/compiler/google/src/google/protobuf/compiler/kotlin/test/connect.proto index 36c6410ace1..31c086b9677 100644 --- a/proto/compiler/google/src/google/protobuf/compiler/kotlin/test/connect.proto +++ b/proto/compiler/google/src/google/protobuf/compiler/kotlin/test/connect.proto @@ -5,7 +5,7 @@ option java_package = "proto.car"; option java_outer_classname = "Connect"; message ConnectionRequest { - int32 ip = 1; + repeated int32 ip = 1; int32 port = 2; } diff --git a/proto/compiler/src/CodedInputStream.kt b/proto/compiler/src/CodedInputStream.kt index 98873956132..35e2c5825c7 100644 --- a/proto/compiler/src/CodedInputStream.kt +++ b/proto/compiler/src/CodedInputStream.kt @@ -99,71 +99,6 @@ class CodedInputStream(buffer: ByteArray) { return readZigZag64NoTag() } - fun readFixed32(expectedFieldNumber: Int): Int { - val tag = readTag(expectedFieldNumber, WireType.FIX_32) - return readFixed32NoInt() - } - - fun readFixed32NoInt(): Int { - return readLittleEndianInt() - } - - fun readSFixed32(expectedFieldNumber: Int): Int { - val tag = readTag(expectedFieldNumber, WireType.FIX_32) - return readSFixed32NoTag() - } - - fun readSFixed32NoTag(): Int { - return readLittleEndianInt() - } - - fun readFixed64(expectedFieldNumber: Int): Long { - val tag = readTag(expectedFieldNumber, WireType.FIX_64) - return readFixed64NoTag() - } - - fun readFixed64NoTag(): Long { - return readLittleEndianLong() - } - - fun readSFixed64(expectedFieldNumber: Int): Long { - val tag = readTag(expectedFieldNumber, WireType.FIX_64) - return readSFixed64NoTag() - } - - fun readSFixed64NoTag(): Long { - return readLittleEndianLong() - } - - fun readDouble(expectedFieldNumber: Int): Double { - val tag = readTag(expectedFieldNumber, WireType.FIX_64) - return readDoubleNoTag() - } - - fun readDoubleNoTag(): Double { - return readLittleEndianDouble() - } - - fun readFloat(expectedFieldNumber: Int): Float { - val tag = readTag(expectedFieldNumber, WireType.FIX_32) - return readFloatNoTag() - } - - fun readFloatNoTag(): Float { - return readLittleEndianFloat() - } - - fun readString(expectedFieldNumber: Int): String { - val tag = readTag(expectedFieldNumber, WireType.LENGTH_DELIMITED) - return readStringNoTag() - } - - fun readStringNoTag(): String { - val length = readInt32NoTag() - val value = String(readRawBytes(length)) - return value - } - fun readBytes(expectedFieldNumber: Int): ByteArray { val tag = readTag(expectedFieldNumber, WireType.LENGTH_DELIMITED) return readBytesNoTag() @@ -200,34 +135,12 @@ class CodedInputStream(buffer: ByteArray) { } } - fun readLittleEndianDouble(): Double { - val byteBuffer = ByteBuffer.wrap(readRawBytes(8)) - byteBuffer.order(ByteOrder.LITTLE_ENDIAN) - return byteBuffer.getDouble(0) - } - - fun readLittleEndianFloat(): Float { - val byteBuffer = ByteBuffer.wrap(readRawBytes(4)) - byteBuffer.order(ByteOrder.LITTLE_ENDIAN) - return byteBuffer.getFloat(0) - } - - fun readLittleEndianInt(): Int { - val byteBuffer = ByteBuffer.wrap(readRawBytes(8)) - byteBuffer.order(ByteOrder.LITTLE_ENDIAN) - return byteBuffer.getInt(0) - } - - fun readLittleEndianLong(): Long { - val byteBuffer = ByteBuffer.wrap(readRawBytes(4)) - byteBuffer.order(ByteOrder.LITTLE_ENDIAN) - return byteBuffer.getLong(0) - } - fun readRawBytes(count: Int): ByteArray { val ba = ByteArray(count) - for (i in 0..(count - 1)) { + var i = 0 + while (i < count) { ba[i] = inputStream.read().toByte() + i++ } return ba } diff --git a/proto/compiler/src/CodedOutputStream.kt b/proto/compiler/src/CodedOutputStream.kt index 19a490ff539..0f6e26be2d8 100644 --- a/proto/compiler/src/CodedOutputStream.kt +++ b/proto/compiler/src/CodedOutputStream.kt @@ -87,68 +87,6 @@ class CodedOutputStream(val buffer: ByteArray) { writeInt64NoTag((value shl 1) xor (value shr 63)) } - fun writeFixed32(fieldNumber: Int, value: Int?) { - value ?: return - writeTag(fieldNumber, WireType.FIX_32) - writeFixed32NoTag(value) - } - - fun writeFixed32NoTag(value: Int) { - writeLittleEndian(value) - } - - // See notes on unsigned integers implementation above - fun writeSFixed32(fieldNumber: Int, value: Int?) { - value ?: return - writeTag(fieldNumber, WireType.FIX_32) - writeSFixed32NoTag(value) - } - - fun writeSFixed32NoTag(value: Int) { - writeLittleEndian(value) - } - - fun writeFixed64(fieldNumber: Int, value: Long?) { - value ?: return - writeTag(fieldNumber, WireType.FIX_64) - writeFixed64NoTag(value) - } - - fun writeFixed64NoTag(value: Long) { - writeLittleEndian(value) - } - - // See notes on unsigned integers implementation above - fun writeSFixed64(fieldNumber: Int, value: Long?) { - value ?: return - writeTag(fieldNumber, WireType.FIX_64) - writeSFixed64NoTag(value) - } - - fun writeSFixed64NoTag(value: Long) { - writeLittleEndian(value) - } - - fun writeDouble(fieldNumber: Int, value: Double?) { - value ?: return - writeTag(fieldNumber, WireType.FIX_64) - writeDoubleNoTag(value) - } - - fun writeDoubleNoTag(value: Double) { - writeLittleEndian(value) - } - - fun writeFloat(fieldNumber: Int, value: Float?) { - value ?: return - writeTag(fieldNumber, WireType.FIX_32) - writeFloatNoTag(value) - } - - fun writeFloatNoTag(value: Float) { - writeLittleEndian(value) - } - fun writeString(fieldNumber: Int, value: String?) { value ?: return writeTag(fieldNumber, WireType.LENGTH_DELIMITED) @@ -179,39 +117,7 @@ class CodedOutputStream(val buffer: ByteArray) { * Then she/he can re-use low-level methods for operating with raw values, that are not annotated with Protobuf tags. */ - fun writeLittleEndian(value: Int?) { - value ?: return - val bb = ByteBuffer.allocate(4) - bb.order(ByteOrder.LITTLE_ENDIAN) - bb.putInt(value) - output.write(bb.array()) - } - - fun writeLittleEndian(value: Long?) { - value ?: return - val bb = ByteBuffer.allocate(8) - bb.order(ByteOrder.LITTLE_ENDIAN) - bb.putLong(value) - output.write(bb.array()) - } - - fun writeLittleEndian(value: Double?) { - value ?: return - val bb = ByteBuffer.allocate(8) - bb.order(ByteOrder.LITTLE_ENDIAN) - bb.putDouble(value) - output.write(bb.array()) - } - - fun writeLittleEndian(value: Float?) { - value ?: return - val bb = ByteBuffer.allocate(4) - bb.order(ByteOrder.LITTLE_ENDIAN) - bb.putFloat(value) - output.write(bb.array()) - } - - fun writeInt32NoTag(value: Int?) { + fun writeInt32NoTag(value: Int?) { value ?: return var curValue: Int = value @@ -233,7 +139,7 @@ class CodedOutputStream(val buffer: ByteArray) { res[resSize] = curByte.toByte() resSize++ - } while(curValue != 0) + } while (curValue != 0) output.write(res, 0, resSize) } diff --git a/proto/compiler/src/KotlinOutputStream.kt b/proto/compiler/src/KotlinOutputStream.kt index 01e0ed2a410..51f80aaf766 100644 --- a/proto/compiler/src/KotlinOutputStream.kt +++ b/proto/compiler/src/KotlinOutputStream.kt @@ -10,9 +10,11 @@ class KotlinOutputStream(val buffer: ByteArray) { } fun write (data: ByteArray, begin: Int, size: Int) { - for (i in begin..(begin + size - 1)) { + var i = begin + while (i < begin + size) { buffer[pos] = data[i] pos += 1 + i++ } } } diff --git a/proto/compiler/src/WireFormat.kt b/proto/compiler/src/WireFormat.kt index 0f2f3b685f5..120d8c8f58f 100644 --- a/proto/compiler/src/WireFormat.kt +++ b/proto/compiler/src/WireFormat.kt @@ -31,7 +31,7 @@ object WireFormat { var size = 0 while (curValue != 0) { size += 1 - curValue = value ushr VARINT_INFO_BITS_COUNT + curValue = curValue ushr VARINT_INFO_BITS_COUNT } return size } @@ -41,7 +41,7 @@ object WireFormat { var size = 0 while (curValue != 0L) { size += 1 - curValue = value ushr VARINT_INFO_BITS_COUNT + curValue = curValue ushr VARINT_INFO_BITS_COUNT } return size }