aboutsummaryrefslogtreecommitdiffstats
path: root/libwc
diff options
context:
space:
mode:
authorTatsuya Kinoshita <tats@debian.org>2016-11-18 13:08:33 +0000
committerTatsuya Kinoshita <tats@debian.org>2016-11-18 13:30:19 +0000
commit716bc126638393c733399d11d3228edb82877faa (patch)
tree2c423546357e61279fbc6d7fbdd155c432685ba7 /libwc
parentUpdate ChangeLog (diff)
downloadw3m-716bc126638393c733399d11d3228edb82877faa.tar.gz
w3m-716bc126638393c733399d11d3228edb82877faa.zip
Prevent global-buffer-overflow in wc_any_to_ucs()
Bug-Debian: https://github.com/tats/w3m/issues/43
Diffstat (limited to 'libwc')
-rw-r--r--libwc/ucs.c1
-rw-r--r--libwc/ucs.map43
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) */