libbluray | branch: master | hpi1 <[email protected]> | Thu Jun 4 14:40:57 2015 +0300| [98e272260b3b2bcdf7cc21e07e37fcf8e0fa4ad0] | committer: hpi1
Check for null Do not crash with incomplete data (ex. if parsing fails in middle of file). > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=98e272260b3b2bcdf7cc21e07e37fcf8e0fa4ad0 --- src/libbluray/bdnav/clpi_parse.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/libbluray/bdnav/clpi_parse.c b/src/libbluray/bdnav/clpi_parse.c index 1ad632c..ec57a38 100644 --- a/src/libbluray/bdnav/clpi_parse.c +++ b/src/libbluray/bdnav/clpi_parse.c @@ -622,10 +622,12 @@ _clean_program(CLPI_PROG_INFO *p) { int ii; - for (ii = 0; ii < p->num_prog; ii++) { - X_FREE(p->progs[ii].streams); + if (p && p->progs) { + for (ii = 0; ii < p->num_prog; ii++) { + X_FREE(p->progs[ii].streams); + } + X_FREE(p->progs); } - X_FREE(p->progs); } static void @@ -633,11 +635,13 @@ _clean_cpi(CLPI_CPI *cpi) { int ii; - for (ii = 0; ii < cpi->num_stream_pid; ii++) { - X_FREE(cpi->entry[ii].coarse); - X_FREE(cpi->entry[ii].fine); + if (cpi && cpi->entry) { + for (ii = 0; ii < cpi->num_stream_pid; ii++) { + X_FREE(cpi->entry[ii].coarse); + X_FREE(cpi->entry[ii].fine); + } + X_FREE(cpi->entry); } - X_FREE(cpi->entry); } void @@ -649,11 +653,13 @@ clpi_free(CLPI_CL *cl) return; } X_FREE(cl->clip.atc_delta); + if (cl->sequence.atc_seq) { + for (ii = 0; ii < cl->sequence.num_atc_seq; ii++) { + X_FREE(cl->sequence.atc_seq[ii].stc_seq); + } - for (ii = 0; ii < cl->sequence.num_atc_seq; ii++) { - X_FREE(cl->sequence.atc_seq[ii].stc_seq); + X_FREE(cl->sequence.atc_seq); } - X_FREE(cl->sequence.atc_seq); _clean_program(&cl->program); _clean_cpi(&cl->cpi); _______________________________________________ libbluray-devel mailing list [email protected] https://mailman.videolan.org/listinfo/libbluray-devel
