@@ -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