Commit 15360e59 authored by Adam Cozzette's avatar Adam Cozzette Committed by GitHub

Merge pull request #2689 from ckennelly/aliasing-fixed32-fixed64

Avoid aliasing CodedInputStream::buffer_ when parsing little endian integers
parents 38c238e3 56da8282
...@@ -996,8 +996,7 @@ inline const uint8* CodedInputStream::ReadLittleEndian64FromArray( ...@@ -996,8 +996,7 @@ inline const uint8* CodedInputStream::ReadLittleEndian64FromArray(
inline bool CodedInputStream::ReadLittleEndian32(uint32* value) { inline bool CodedInputStream::ReadLittleEndian32(uint32* value) {
#if defined(PROTOBUF_LITTLE_ENDIAN) #if defined(PROTOBUF_LITTLE_ENDIAN)
if (GOOGLE_PREDICT_TRUE(BufferSize() >= static_cast<int>(sizeof(*value)))) { if (GOOGLE_PREDICT_TRUE(BufferSize() >= static_cast<int>(sizeof(*value)))) {
memcpy(value, buffer_, sizeof(*value)); buffer_ = ReadLittleEndian32FromArray(buffer_, value);
Advance(sizeof(*value));
return true; return true;
} else { } else {
return ReadLittleEndian32Fallback(value); return ReadLittleEndian32Fallback(value);
...@@ -1010,8 +1009,7 @@ inline bool CodedInputStream::ReadLittleEndian32(uint32* value) { ...@@ -1010,8 +1009,7 @@ inline bool CodedInputStream::ReadLittleEndian32(uint32* value) {
inline bool CodedInputStream::ReadLittleEndian64(uint64* value) { inline bool CodedInputStream::ReadLittleEndian64(uint64* value) {
#if defined(PROTOBUF_LITTLE_ENDIAN) #if defined(PROTOBUF_LITTLE_ENDIAN)
if (GOOGLE_PREDICT_TRUE(BufferSize() >= static_cast<int>(sizeof(*value)))) { if (GOOGLE_PREDICT_TRUE(BufferSize() >= static_cast<int>(sizeof(*value)))) {
memcpy(value, buffer_, sizeof(*value)); buffer_ = ReadLittleEndian64FromArray(buffer_, value);
Advance(sizeof(*value));
return true; return true;
} else { } else {
return ReadLittleEndian64Fallback(value); return ReadLittleEndian64Fallback(value);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment