diff options
| author | Tatsuya Kinoshita <tats@debian.org> | 2016-11-18 13:08:33 +0000 | 
|---|---|---|
| committer | Tatsuya Kinoshita <tats@debian.org> | 2016-11-18 13:30:19 +0000 | 
| commit | 716bc126638393c733399d11d3228edb82877faa (patch) | |
| tree | 2c423546357e61279fbc6d7fbdd155c432685ba7 | |
| parent | Update ChangeLog (diff) | |
| download | w3m-716bc126638393c733399d11d3228edb82877faa.tar.gz w3m-716bc126638393c733399d11d3228edb82877faa.zip | |
Prevent global-buffer-overflow in wc_any_to_ucs()
Bug-Debian: https://github.com/tats/w3m/issues/43
| -rw-r--r-- | libwc/ucs.c | 1 | ||||
| -rw-r--r-- | libwc/ucs.map | 43 | 
2 files changed, 44 insertions, 0 deletions
| diff --git a/libwc/ucs.c b/libwc/ucs.c index 727e574..18c3a67 100644 --- a/libwc/ucs.c +++ b/libwc/ucs.c @@ -178,6 +178,7 @@ wc_any_to_ucs(wc_wchar_t cc)  	    return WC_C_UCS2_EURO;  	}  	map = pcs_ucs_map[f - WC_F_PCS_BASE]; +	map_size = pcs_ucs_map_size[f - WC_F_PCS_BASE];  	cc.code &= 0x7f;  	break;      case WC_CCS_A_PCSW: diff --git a/libwc/ucs.map b/libwc/ucs.map index 5d6f688..aa6190f 100644 --- a/libwc/ucs.map +++ b/libwc/ucs.map @@ -175,6 +175,49 @@ static wc_uint16 *pcs_ucs_map[] = {    NULL,			/* (Raw) */  }; +static wc_uint32 *pcs_ucs_map_size[] = { +  0x80,			/* cp437_ucs_map */ +  0x80,			/* cp737_ucs_map */ +  0x80,			/* cp775_ucs_map */ +  0x80,			/* cp850_ucs_map */ +  0x80,			/* cp852_ucs_map */ +  0x80,			/* cp855_ucs_map */ +  0x80,			/* cp856_ucs_map */ +  0x80,			/* cp857_ucs_map */ +  0x80,			/* cp860_ucs_map */ +  0x80,			/* cp861_ucs_map */ +  0x80,			/* cp862_ucs_map */ +  0x80,			/* cp863_ucs_map */ +  0x80,			/* cp864_ucs_map */ +  0x80,			/* cp865_ucs_map */ +  0x80,			/* cp866_ucs_map */ +  0x80,			/* cp869_ucs_map */ +  0x80,			/* cp874_ucs_map */ +  0x80,			/* cp1006_ucs_map */ +  0x80,			/* cp1250_ucs_map */ +  0x80,			/* cp1251_ucs_map */ +  0x80,			/* cp1252_ucs_map */ +  0x80,			/* cp1253_ucs_map */ +  0x80,			/* cp1254_ucs_map */ +  0x80,			/* cp1255_ucs_map */ +  0x80,			/* cp1256_ucs_map */ +  0x80,			/* cp1257_ucs_map */ +  0x80,			/* cp1258_ucs_map */ +  0,			/* NULL */ +  0x80,			/* tcvn57121_ucs_map */ +  0x20,			/* tcvn57122_ucs_map */ +  0,			/* NULL */ +  0x80,			/* viscii111_ucs_map */ +  0x20,			/* viscii112_ucs_map */ +  0x80,			/* vps1_ucs_map */ +  0x20,			/* vps2_ucs_map */ +  0x80,			/* koi8r_ucs_map */ +  0x80,			/* koi8u_ucs_map */ +  0x80,			/* nextstep_ucs_map */ +  0,			/* NULL */ +  0,			/* NULL (Raw) */ +}; +  static wc_uint16 *cs94w_ucs_map[] = {    jisx0208x02131_ucs_map,	/* 40 (JIS C 6226) */    gb2312_ucs_map,		/* 41 (GB 2312) */ | 
