mirror of
https://github.com/php/php-src.git
synced 2025-08-16 22:18:50 +02:00
Fix bug #79037 (global buffer-overflow in mbfl_filt_conv_big5_wchar
)
This commit is contained in:
parent
0f79b1bf30
commit
2bcbc95f03
2 changed files with 22 additions and 5 deletions
|
@ -138,6 +138,17 @@ static unsigned short cp950_pua_tbl[][4] = {
|
||||||
{0xf70f,0xf848,0xc740,0xc8fe},
|
{0xf70f,0xf848,0xc740,0xc8fe},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static inline int is_in_cp950_pua(int c1, int c) {
|
||||||
|
if ((c1 >= 0xfa && c1 <= 0xfe) || (c1 >= 0x8e && c1 <= 0xa0) ||
|
||||||
|
(c1 >= 0x81 && c1 <= 0x8d) || (c1 >= 0xc7 && c1 <= 0xc8)) {
|
||||||
|
return (c >=0x40 && c <= 0x7e) || (c >= 0xa1 && c <= 0xfe);
|
||||||
|
}
|
||||||
|
if (c1 == 0xc6) {
|
||||||
|
return c >= 0xa1 && c <= 0xfe;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Big5 => wchar
|
* Big5 => wchar
|
||||||
*/
|
*/
|
||||||
|
@ -186,11 +197,7 @@ mbfl_filt_conv_big5_wchar(int c, mbfl_convert_filter *filter)
|
||||||
|
|
||||||
if (filter->from->no_encoding == mbfl_no_encoding_cp950) {
|
if (filter->from->no_encoding == mbfl_no_encoding_cp950) {
|
||||||
/* PUA for CP950 */
|
/* PUA for CP950 */
|
||||||
if (w <= 0 &&
|
if (w <= 0 && is_in_cp950_pua(c1, c)) {
|
||||||
(((c1 >= 0xfa && c1 <= 0xfe) || (c1 >= 0x8e && c1 <= 0xa0) ||
|
|
||||||
(c1 >= 0x81 && c1 <= 0x8d) ||(c1 >= 0xc7 && c1 <= 0xc8))
|
|
||||||
&& ((c > 0x39 && c < 0x7f) || (c > 0xa0 && c < 0xff))) ||
|
|
||||||
((c1 == 0xc6) && (c > 0xa0 && c < 0xff))) {
|
|
||||||
c2 = c1 << 8 | c;
|
c2 = c1 << 8 | c;
|
||||||
for (k = 0; k < sizeof(cp950_pua_tbl)/(sizeof(unsigned short)*4); k++) {
|
for (k = 0; k < sizeof(cp950_pua_tbl)/(sizeof(unsigned short)*4); k++) {
|
||||||
if (c2 >= cp950_pua_tbl[k][2] && c2 <= cp950_pua_tbl[k][3]) {
|
if (c2 >= cp950_pua_tbl[k][2] && c2 <= cp950_pua_tbl[k][3]) {
|
||||||
|
|
10
ext/mbstring/tests/bug79037.phpt
Normal file
10
ext/mbstring/tests/bug79037.phpt
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
--TEST--
|
||||||
|
Bug #79037: global buffer-overflow in `mbfl_filt_conv_big5_wchar`
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
|
||||||
|
var_dump(mb_convert_encoding("\x81\x3a", "UTF-8", "CP950"));
|
||||||
|
|
||||||
|
?>
|
||||||
|
--EXPECT--
|
||||||
|
string(1) "?"
|
Loading…
Add table
Add a link
Reference in a new issue