From 9d931ce6260c8d5ede80aedec48a68bfb7771c23 Mon Sep 17 00:00:00 2001 From: Martijn van Beurden Date: Wed, 19 Jun 2024 13:00:30 +0200 Subject: [PATCH] Make UTF-8 decoder more restrictive Fixes https://github.com/xiph/flac/issues/706 --- src/libFLAC/bitreader.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/libFLAC/bitreader.c b/src/libFLAC/bitreader.c index 829b308e00..44bc4e89ed 100644 --- a/src/libFLAC/bitreader.c +++ b/src/libFLAC/bitreader.c @@ -939,23 +939,23 @@ FLAC__bool FLAC__bitreader_read_utf8_uint32(FLAC__BitReader *br, FLAC__uint32 *v v = x; i = 0; } - else if(x & 0xC0 && !(x & 0x20)) { /* 110xxxxx */ + else if((x & 0xE0) == 0xC0) { /* 110xxxxx */ v = x & 0x1F; i = 1; } - else if(x & 0xE0 && !(x & 0x10)) { /* 1110xxxx */ + else if((x & 0xF0) == 0xE0) { /* 1110xxxx */ v = x & 0x0F; i = 2; } - else if(x & 0xF0 && !(x & 0x08)) { /* 11110xxx */ + else if((x & 0xF8) == 0xF0) { /* 11110xxx */ v = x & 0x07; i = 3; } - else if(x & 0xF8 && !(x & 0x04)) { /* 111110xx */ + else if((x & 0xFC) == 0xF8) { /* 111110xx */ v = x & 0x03; i = 4; } - else if(x & 0xFC && !(x & 0x02)) { /* 1111110x */ + else if((x & 0xFE) == 0xFC) { /* 1111110x */ v = x & 0x01; i = 5; } @@ -994,27 +994,27 @@ FLAC__bool FLAC__bitreader_read_utf8_uint64(FLAC__BitReader *br, FLAC__uint64 *v v = x; i = 0; } - else if(x & 0xC0 && !(x & 0x20)) { /* 110xxxxx */ + else if((x & 0xE0) == 0xC0) { /* 110xxxxx */ v = x & 0x1F; i = 1; } - else if(x & 0xE0 && !(x & 0x10)) { /* 1110xxxx */ + else if((x & 0xF0) == 0xE0) { /* 1110xxxx */ v = x & 0x0F; i = 2; } - else if(x & 0xF0 && !(x & 0x08)) { /* 11110xxx */ + else if((x & 0xF8) == 0xF0) { /* 11110xxx */ v = x & 0x07; i = 3; } - else if(x & 0xF8 && !(x & 0x04)) { /* 111110xx */ + else if((x & 0xFC) == 0xF8) { /* 111110xx */ v = x & 0x03; i = 4; } - else if(x & 0xFC && !(x & 0x02)) { /* 1111110x */ + else if((x & 0xFE) == 0xFC) { /* 1111110x */ v = x & 0x01; i = 5; } - else if(x & 0xFE && !(x & 0x01)) { /* 11111110 */ + else if(x == 0xFE) { /* 11111110 */ v = 0; i = 6; }