Skip to content

Commit

Permalink
Prevent segfault when iso2022 parsing
Browse files Browse the repository at this point in the history
Bug-Debian: #14
  • Loading branch information
tats committed Aug 17, 2016
1 parent 807e8b7 commit 9cf6926
Showing 1 changed file with 14 additions and 7 deletions.
21 changes: 14 additions & 7 deletions libwc/iso2022.c
Expand Up @@ -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;
Expand Down Expand Up @@ -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:
Expand Down

0 comments on commit 9cf6926

Please sign in to comment.