Fix a bug in webrtc::ByteReader

The specializations for 4-byte reading did not return correct
values. This has to do with the order of casting and shifting. Also
adding a test to expose the bug (and verify the other byte sizes).

Review URL: https://codereview.webrtc.org/1615653011

Cr-Commit-Position: refs/heads/master@{#11364}
This commit is contained in:
henrik.lundin
2016-01-24 23:47:51 -08:00
committed by Commit bot
parent f91e6d0438
commit 7a83951b27
2 changed files with 47 additions and 2 deletions

View File

@ -310,12 +310,19 @@ class ByteReader<T, 4, false> {
public:
static T ReadBigEndian(const uint8_t* data) {
static_assert(sizeof(T) >= 4, kSizeErrorMsg);
return (data[0] << 24) | (data[1] << 16) | (data[2] << 8) | data[3];
return (Get(data, 0) << 24) | (Get(data, 1) << 16) | (Get(data, 2) << 8) |
Get(data, 3);
}
static T ReadLittleEndian(const uint8_t* data) {
static_assert(sizeof(T) >= 4, kSizeErrorMsg);
return data[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24);
return Get(data, 0) | (Get(data, 1) << 8) | (Get(data, 2) << 16) |
(Get(data, 3) << 24);
}
private:
inline static T Get(const uint8_t* data, unsigned int index) {
return static_cast<T>(data[index]);
}
};