libbluray | branch: master | hpi1 <[email protected]> | Thu Feb 7 23:25:15 2013 +0200| [43d9227aedd39531d087780b9d08691eaac116d4] | committer: hpi1
Limit preload clip size > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=43d9227aedd39531d087780b9d08691eaac116d4 --- src/libbluray/bluray.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/libbluray/bluray.c b/src/libbluray/bluray.c index f8bae7b..1e9a92f 100644 --- a/src/libbluray/bluray.c +++ b/src/libbluray/bluray.c @@ -103,7 +103,7 @@ typedef struct { typedef struct { NAV_CLIP *clip; - uint64_t clip_size; + size_t clip_size; uint8_t *buf; } BD_PRELOAD; @@ -591,6 +591,8 @@ static void _close_preload(BD_PRELOAD *p) memset(p, 0, sizeof(*p)); } +#define PRELOAD_SIZE_LIMIT (512*1024*1024) /* do not preload clips larger than 512M */ + static int _preload_m2ts(BLURAY *bd, BD_PRELOAD *p) { /* setup and open BD_STREAM */ @@ -600,12 +602,17 @@ static int _preload_m2ts(BLURAY *bd, BD_PRELOAD *p) memset(&st, 0, sizeof(st)); st.clip = p->clip; + if (st.clip_size > PRELOAD_SIZE_LIMIT) { + BD_DEBUG(DBG_BLURAY|DBG_CRIT, "_preload_m2ts(): too large clip (%"PRId64")\n", st.clip_size); + return 0; + } + if (!_open_m2ts(bd, &st)) { return 0; } /* allocate buffer */ - p->clip_size = st.clip_size; + p->clip_size = (size_t)st.clip_size; p->buf = realloc(p->buf, p->clip_size); /* read clip to buffer */ _______________________________________________ libbluray-devel mailing list [email protected] http://mailman.videolan.org/listinfo/libbluray-devel
