Browse Source

iconv: fix missing bounds checking for shift_jis decoding

the jis0208 table we use is only 84x94 in size, but the shift_jis
encoding supports a 94x94 grid. attempts to convert sequences outside
of the supported zone resulted in out-of-bounds table reads,
misinterpreting adjacent rodata as part of the character table and
thereby converting these sequences to unexpected characters.
Rich Felker 1 month ago
parent
commit
7ada6dde6f
1 changed files with 1 additions and 0 deletions
  1. 1 0
      src/locale/iconv.c

+ 1 - 0
src/locale/iconv.c

@@ -340,6 +340,7 @@ size_t iconv(iconv_t cd, char **restrict in, size_t *restrict inb, char **restri
 				c++;
 				d -= 159;
 			}
+			if (c>=84) goto ilseq;
 			c = jis0208[c][d];
 			if (!c) goto ilseq;
 			break;