diff --git a/libmpdemux/demux_mkv.c b/libmpdemux/demux_mkv.c index 6491354dff..b026370cbf 100644 --- a/libmpdemux/demux_mkv.c +++ b/libmpdemux/demux_mkv.c @@ -2546,16 +2546,19 @@ handle_subtitles(demuxer_t *demuxer, mkv_track_t *track, char *block, ptr1++; /* Newline */ - if (*ptr1 == '\\' && ptr1+1-block < size && (*(ptr1+1)|0x20) == 'n') + while (*ptr1 == '\\' && ptr1+1-block < size && (*(ptr1+1)|0x20) == 'n') { mkv_d->clear_subs_at[mkv_d->subs.lines++] = timecode + block_duration; *ptr2 = '\0'; if (mkv_d->subs.lines >= SUB_MAX_TEXT) { - mp_msg (MSGT_DEMUX, MSGL_WARN, "[mkv] Warning: too many " - "sublines to render, skipping\n"); - return; + mp_msg (MSGT_DEMUX, MSGL_WARN, "\n[mkv] Warning: too many " + "sublines to render, skipping after first %i\n", + SUB_MAX_TEXT); + mkv_d->subs.lines--; + ptr1=block+size; + break; } ptr2 = mkv_d->subs.text[mkv_d->subs.lines]; ptr1 += 2; @@ -2568,7 +2571,7 @@ handle_subtitles(demuxer_t *demuxer, mkv_track_t *track, char *block, } else { - while (ptr1 - block != size) + while (ptr1 - block < size) { if (*ptr1 == '\n' || *ptr1 == '\r') { @@ -2579,9 +2582,12 @@ handle_subtitles(demuxer_t *demuxer, mkv_track_t *track, char *block, = timecode + block_duration; if (mkv_d->subs.lines >= SUB_MAX_TEXT) { - mp_msg (MSGT_DEMUX, MSGL_WARN, "[mkv] Warning: too many " - "sublines to render, skipping\n"); - return; + mp_msg (MSGT_DEMUX, MSGL_WARN, "\n[mkv] Warning: too many " + "sublines to render, skipping after first %i\n", + SUB_MAX_TEXT); + mkv_d->subs.lines--; + ptr1=block+size; + break; } ptr2 = mkv_d->subs.text[mkv_d->subs.lines]; state = 1; diff --git a/subreader.h b/subreader.h index 06a9878fea..6c7fddaf0b 100644 --- a/subreader.h +++ b/subreader.h @@ -29,7 +29,7 @@ extern int sub_format; #define MAX_SUBTITLE_FILES 128 -#define SUB_MAX_TEXT 10 +#define SUB_MAX_TEXT 12 #define SUB_ALIGNMENT_BOTTOMLEFT 1 #define SUB_ALIGNMENT_BOTTOMCENTER 2 #define SUB_ALIGNMENT_BOTTOMRIGHT 3