Skip to content

Commit b6b5b32

Browse files
authored
Make UTF-8 decoder more restrictive (#712)
Fixes #706
1 parent b773157 commit b6b5b32

File tree

1 file changed

+11
-11
lines changed

1 file changed

+11
-11
lines changed

src/libFLAC/bitreader.c

+11-11
Original file line numberDiff line numberDiff line change
@@ -939,23 +939,23 @@ FLAC__bool FLAC__bitreader_read_utf8_uint32(FLAC__BitReader *br, FLAC__uint32 *v
939939
v = x;
940940
i = 0;
941941
}
942-
else if(x & 0xC0 && !(x & 0x20)) { /* 110xxxxx */
942+
else if((x & 0xE0) == 0xC0) { /* 110xxxxx */
943943
v = x & 0x1F;
944944
i = 1;
945945
}
946-
else if(x & 0xE0 && !(x & 0x10)) { /* 1110xxxx */
946+
else if((x & 0xF0) == 0xE0) { /* 1110xxxx */
947947
v = x & 0x0F;
948948
i = 2;
949949
}
950-
else if(x & 0xF0 && !(x & 0x08)) { /* 11110xxx */
950+
else if((x & 0xF8) == 0xF0) { /* 11110xxx */
951951
v = x & 0x07;
952952
i = 3;
953953
}
954-
else if(x & 0xF8 && !(x & 0x04)) { /* 111110xx */
954+
else if((x & 0xFC) == 0xF8) { /* 111110xx */
955955
v = x & 0x03;
956956
i = 4;
957957
}
958-
else if(x & 0xFC && !(x & 0x02)) { /* 1111110x */
958+
else if((x & 0xFE) == 0xFC) { /* 1111110x */
959959
v = x & 0x01;
960960
i = 5;
961961
}
@@ -994,27 +994,27 @@ FLAC__bool FLAC__bitreader_read_utf8_uint64(FLAC__BitReader *br, FLAC__uint64 *v
994994
v = x;
995995
i = 0;
996996
}
997-
else if(x & 0xC0 && !(x & 0x20)) { /* 110xxxxx */
997+
else if((x & 0xE0) == 0xC0) { /* 110xxxxx */
998998
v = x & 0x1F;
999999
i = 1;
10001000
}
1001-
else if(x & 0xE0 && !(x & 0x10)) { /* 1110xxxx */
1001+
else if((x & 0xF0) == 0xE0) { /* 1110xxxx */
10021002
v = x & 0x0F;
10031003
i = 2;
10041004
}
1005-
else if(x & 0xF0 && !(x & 0x08)) { /* 11110xxx */
1005+
else if((x & 0xF8) == 0xF0) { /* 11110xxx */
10061006
v = x & 0x07;
10071007
i = 3;
10081008
}
1009-
else if(x & 0xF8 && !(x & 0x04)) { /* 111110xx */
1009+
else if((x & 0xFC) == 0xF8) { /* 111110xx */
10101010
v = x & 0x03;
10111011
i = 4;
10121012
}
1013-
else if(x & 0xFC && !(x & 0x02)) { /* 1111110x */
1013+
else if((x & 0xFE) == 0xFC) { /* 1111110x */
10141014
v = x & 0x01;
10151015
i = 5;
10161016
}
1017-
else if(x & 0xFE && !(x & 0x01)) { /* 11111110 */
1017+
else if(x == 0xFE) { /* 11111110 */
10181018
v = 0;
10191019
i = 6;
10201020
}

0 commit comments

Comments
 (0)