Skip to content

Commit 377ab25

Browse files
committed
fix a5efec8 to cover more cases (#2397)
1 parent d067ab3 commit 377ab25

File tree

1 file changed

+16
-4
lines changed

1 file changed

+16
-4
lines changed

Diff for: src/filters/load_text.c

+16-4
Original file line numberDiff line numberDiff line change
@@ -315,18 +315,24 @@ char *gf_text_get_utf8_line(char *szLine, u32 lineSize, FILE *txt_in, s32 unicod
315315
if (!unicode_type && (szLine[i] & 0x80)) {
316316
/*non UTF8 (likely some win-CP)*/
317317
if ((szLine[i+1] & 0xc0) != 0x80) {
318+
if (j >= GF_ARRAY_LENGTH(szLineConv))
319+
break;
318320
szLineConv[j] = 0xc0 | ( (szLine[i] >> 6) & 0x3 );
319321
j++;
320322
szLine[i] &= 0xbf;
321323
}
322324
/*UTF8 2 bytes char*/
323325
else if ( (szLine[i] & 0xe0) == 0xc0) {
326+
if (j >= GF_ARRAY_LENGTH(szLineConv))
327+
break;
324328
szLineConv[j] = szLine[i];
325329
i++;
326330
j++;
327331
}
328332
/*UTF8 3 bytes char*/
329333
else if ( (szLine[i] & 0xf0) == 0xe0) {
334+
if (j+1 >= GF_ARRAY_LENGTH(szLineConv))
335+
break;
330336
szLineConv[j] = szLine[i];
331337
i++;
332338
j++;
@@ -336,6 +342,8 @@ char *gf_text_get_utf8_line(char *szLine, u32 lineSize, FILE *txt_in, s32 unicod
336342
}
337343
/*UTF8 4 bytes char*/
338344
else if ( (szLine[i] & 0xf8) == 0xf0) {
345+
if (j+2 >= GF_ARRAY_LENGTH(szLineConv))
346+
break;
339347
szLineConv[j] = szLine[i];
340348
i++;
341349
j++;
@@ -350,14 +358,18 @@ char *gf_text_get_utf8_line(char *szLine, u32 lineSize, FILE *txt_in, s32 unicod
350358
continue;
351359
}
352360
}
361+
362+
if (j >= GF_ARRAY_LENGTH(szLineConv))
363+
break;
364+
353365
szLineConv[j] = szLine[i];
354366
j++;
355367

356-
if (j >= GF_ARRAY_LENGTH(szLineConv) - 1) {
357-
GF_LOG(GF_LOG_DEBUG, GF_LOG_PARSER, ("[TXTIn] Line too long to convert to utf8 (len: %d)\n", len));
358-
break;
359-
}
360368

369+
}
370+
if ( j >= GF_ARRAY_LENGTH(szLineConv) ) {
371+
GF_LOG(GF_LOG_DEBUG, GF_LOG_PARSER, ("[TXTIn] Line too long to convert to utf8 (len: %d)\n", len));
372+
j = GF_ARRAY_LENGTH(szLineConv) -1 ;
361373
}
362374
szLineConv[j] = 0;
363375
strcpy(szLine, szLineConv);

0 commit comments

Comments
 (0)