diff --git a/src/ProtocolBuffers/CodedInputStream.cs b/src/ProtocolBuffers/CodedInputStream.cs index b7fe9c33..78d92519 100644 --- a/src/ProtocolBuffers/CodedInputStream.cs +++ b/src/ProtocolBuffers/CodedInputStream.cs @@ -219,16 +219,19 @@ namespace Google.ProtocolBuffers { /// public String ReadString() { int size = (int) ReadRawVarint32(); - if (size < bufferSize - bufferPos && size > 0) { + // No need to read any data for an empty string. + if (size == 0) { + return ""; + } + if (size <= bufferSize - bufferPos) { // Fast path: We already have the bytes in a contiguous buffer, so // just copy directly from it. String result = Encoding.UTF8.GetString(buffer, bufferPos, size); bufferPos += size; return result; - } else { - // Slow path: Build a byte array first then copy it. - return Encoding.UTF8.GetString(ReadRawBytes(size)); } + // Slow path: Build a byte array first then copy it. + return Encoding.UTF8.GetString(ReadRawBytes(size)); } ///