diff options
-rw-r--r-- | src/ProtocolBuffers/CodedInputStream.cs | 11 |
1 files changed, 7 insertions, 4 deletions
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 { /// </summary> 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)); } /// <summary> |