Prevent segfault when iso2022 parsing
Bug-Debian: https://github.com/tats/w3m/issues/14
This commit is contained in:
		| @@ -405,7 +405,8 @@ wc_push_to_iso2022(Str os, wc_wchar_t cc, wc_status *st) | ||||
|     case WC_CCS_A_CS94: | ||||
| 	if (cc.ccs == WC_CCS_US_ASCII) | ||||
| 	    cc.ccs = st->g0_ccs; | ||||
| 	g = cs94_gmap[WC_CCS_INDEX(cc.ccs) - WC_F_ISO_BASE]; | ||||
| 	if (WC_CCS_INDEX(cc.ccs) >= WC_F_ISO_BASE) | ||||
| 	    g = cs94_gmap[WC_CCS_INDEX(cc.ccs) - WC_F_ISO_BASE]; | ||||
| 	break; | ||||
|     case WC_CCS_A_CS94W: | ||||
| 	is_wide = 1; | ||||
| @@ -435,31 +436,37 @@ wc_push_to_iso2022(Str os, wc_wchar_t cc, wc_status *st) | ||||
| 	    break; | ||||
| #endif | ||||
| 	} | ||||
| 	g = cs94w_gmap[WC_CCS_INDEX(cc.ccs) - WC_F_ISO_BASE]; | ||||
| 	if (WC_CCS_INDEX(cc.ccs) >= WC_F_ISO_BASE) | ||||
| 	    g = cs94w_gmap[WC_CCS_INDEX(cc.ccs) - WC_F_ISO_BASE]; | ||||
| 	break; | ||||
|     case WC_CCS_A_CS96: | ||||
| 	g = cs96_gmap[WC_CCS_INDEX(cc.ccs) - WC_F_ISO_BASE]; | ||||
| 	if (WC_CCS_INDEX(cc.ccs) >= WC_F_ISO_BASE) | ||||
| 	    g = cs96_gmap[WC_CCS_INDEX(cc.ccs) - WC_F_ISO_BASE]; | ||||
| 	break; | ||||
|     case WC_CCS_A_CS96W: | ||||
| 	is_wide = 1; | ||||
| 	g = cs96w_gmap[WC_CCS_INDEX(cc.ccs) - WC_F_ISO_BASE]; | ||||
| 	if (WC_CCS_INDEX(cc.ccs) >= WC_F_ISO_BASE) | ||||
| 	    g = cs96w_gmap[WC_CCS_INDEX(cc.ccs) - WC_F_ISO_BASE]; | ||||
| 	break; | ||||
|     case WC_CCS_A_CS942: | ||||
| 	g = cs942_gmap[WC_CCS_INDEX(cc.ccs) - WC_F_ISO_BASE]; | ||||
| 	if (WC_CCS_INDEX(cc.ccs) >= WC_F_ISO_BASE) | ||||
| 	    g = cs942_gmap[WC_CCS_INDEX(cc.ccs) - WC_F_ISO_BASE]; | ||||
| 	break; | ||||
|     case WC_CCS_A_UNKNOWN_W: | ||||
| 	if (WcOption.no_replace) | ||||
| 	    return; | ||||
| 	is_wide = 1; | ||||
| 	cc.ccs = WC_CCS_US_ASCII; | ||||
| 	g = cs94_gmap[WC_CCS_INDEX(cc.ccs) - WC_F_ISO_BASE]; | ||||
| 	if (WC_CCS_INDEX(cc.ccs) >= WC_F_ISO_BASE) | ||||
| 	    g = cs94_gmap[WC_CCS_INDEX(cc.ccs) - WC_F_ISO_BASE]; | ||||
| 	cc.code = ((wc_uint32)WC_REPLACE_W[0] << 8) | WC_REPLACE_W[1]; | ||||
| 	break; | ||||
|     case WC_CCS_A_UNKNOWN: | ||||
| 	if (WcOption.no_replace) | ||||
| 	    return; | ||||
| 	cc.ccs = WC_CCS_US_ASCII; | ||||
| 	g = cs94_gmap[WC_CCS_INDEX(cc.ccs) - WC_F_ISO_BASE]; | ||||
| 	if (WC_CCS_INDEX(cc.ccs) >= WC_F_ISO_BASE) | ||||
| 	    g = cs94_gmap[WC_CCS_INDEX(cc.ccs) - WC_F_ISO_BASE]; | ||||
| 	cc.code = (wc_uint32)WC_REPLACE[0]; | ||||
| 	break; | ||||
|     default: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user