summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-11-21 05:17:19 +0100
committerwm4 <wm4@nowhere>2014-11-21 05:18:16 +0100
commit9df4e7c70e0c5e8e62ffcc30382614a7e300c79f (patch)
tree6e0c6cb2f61a9294c1a88dd7d0222a4c6720d8c8
parent9c456ab58f7b298400a050aecdf49de4e035528d (diff)
downloadmpv-9df4e7c70e0c5e8e62ffcc30382614a7e300c79f.tar.bz2
mpv-9df4e7c70e0c5e8e62ffcc30382614a7e300c79f.tar.xz
stream: fix endian swapping
In addition to the messed-up expression, the endianness was also inverted. The code reads big endian by default. It "worked" by coincidence, but for little endian, codepoints outside of latin1 were broken. The broken expression was found by Coverity.
-rw-r--r--stream/stream.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/stream/stream.c b/stream/stream.c
index 862d7fe252..2a851e82ec 100644
--- a/stream/stream.c
+++ b/stream/stream.c
@@ -861,8 +861,8 @@ static uint16_t stream_read_word_endian(stream_t *s, bool big_endian)
{
unsigned int y = stream_read_char(s);
y = (y << 8) | stream_read_char(s);
- if (big_endian)
- y = (y >> 8) | ((y << 8) & 0xFF);
+ if (!big_endian)
+ y = ((y >> 8) & 0xFF) | (y << 8);
return y;
}