[Bug:1.9] nkf may cause memory violation

e$B1sF#$G$9!#e(B

e$B0J2<$N$h$&$Ke(B nkf e$B$K%Q%C%A$r$"$F$Fe(B

Index: ext/nkf/nkf-utf8/nkf.c

— ext/nkf/nkf-utf8/nkf.c (revision 19412)
+++ ext/nkf/nkf-utf8/nkf.c (working copy)
@@ -1482,6 +1482,7 @@
}
if (cp932inv_f
&& CP932INV_TABLE_BEGIN <= c2 && c2 <= CP932INV_TABLE_END){

  • printf(“access cp932inv[%d][%d]\n”, c2 - CP932INV_TABLE_BEGIN, c1 -
    0x40);
    nkf_char c = cp932inv[c2 - CP932INV_TABLE_BEGIN][c1 - 0x40];
    if ©{
    c2 = c >> 8;

e$B0J2<$r<B9T$9$k$He(B

$ ./ruby -rnkf -e ‘NKF.nkf("-Sw", [0xee, 0xff].pack(“C*”))’
access cp932inv[1][191]

e$B$H$J$j$^$9$,!"e(Bcp932inv e$B$N7?$Oe(B

extern const unsigned short cp932inv[2][189];

e$B$G$"$k$?$a!"%"%/%;%90cH?$r$7$F$$$k$H;W$$$^$9!#e(B

e$B3NG’$O$7$F$J$$$G$9$,!"$b$&0l$+=j$Ne(B cp932inv e$B$N%"%/%;%9$He(B
shiftjis_cp932 e$B$N%"%/%;%9$bF1$8LdBj$,5/$-$=$&$J5$$,$7$^$9!#e(B

e$B%A%1%C%He(B #573 e$B$,99?7$5$l$^$7$?!#e(B (by Yui NARUSE)

e$B%9%F!<%?%9e(B Opene$B$+$ie(BClosede$B$KJQ99e(B

e$B=$@5:Q$_$G$9!#e(B

http://redmine.ruby-lang.org/issues/show/573