libbluray | branch: master | hpi1 <[email protected]> | Sun May 17 13:13:00 2015 +0300| [a508631b5f885d951c81e6bf02622157e13c42e0] | committer: hpi1
disc: check memory allocations > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=a508631b5f885d951c81e6bf02622157e13c42e0 --- src/libbluray/disc/aacs.c | 3 +++ src/libbluray/disc/bdplus.c | 21 ++++++++++++++------- src/libbluray/disc/dec.c | 4 ++++ src/libbluray/disc/disc.c | 30 ++++++++++++++++++++++++++---- src/libbluray/disc/udf_fs.c | 6 ++++++ 5 files changed, 53 insertions(+), 11 deletions(-) diff --git a/src/libbluray/disc/aacs.c b/src/libbluray/disc/aacs.c index 217ef6f..3059d66 100644 --- a/src/libbluray/disc/aacs.c +++ b/src/libbluray/disc/aacs.c @@ -108,6 +108,9 @@ static void *_open_libaacs(void) BD_AACS *libaacs_load(void) { BD_AACS *p = calloc(1, sizeof(BD_AACS)); + if (!p) { + return NULL; + } p->h_libaacs = _open_libaacs(); if (!p->h_libaacs) { diff --git a/src/libbluray/disc/bdplus.c b/src/libbluray/disc/bdplus.c index b8c4d57..363719f 100644 --- a/src/libbluray/disc/bdplus.c +++ b/src/libbluray/disc/bdplus.c @@ -107,6 +107,9 @@ static void *_libbdplus_open(void) BD_BDPLUS *libbdplus_load(void) { BD_BDPLUS *p = calloc(1, sizeof(BD_BDPLUS)); + if (!p) { + return NULL; + } BD_DEBUG(DBG_BDPLUS, "attempting to load libbdplus\n"); @@ -241,10 +244,12 @@ BD_BDPLUS_ST *libbdplus_m2ts(BD_BDPLUS *p, uint32_t clip_id, uint64_t pos) if (!p->m2ts) { /* use old API */ BD_BDPLUS_ST *ret = calloc(1, sizeof(BD_BDPLUS_ST)); - ret->lib = p; - ret->st = NULL; - p->title(p->bdplus, clip_id); - p->seek(p->bdplus, pos); + if (ret) { + ret->lib = p; + ret->st = NULL; + p->title(p->bdplus, clip_id); + p->seek(p->bdplus, pos); + } return ret; } @@ -258,9 +263,11 @@ BD_BDPLUS_ST *libbdplus_m2ts(BD_BDPLUS *p, uint32_t clip_id, uint64_t pos) p->m2ts_close(st); } else { BD_BDPLUS_ST *ret = calloc(1, sizeof(BD_BDPLUS_ST)); - ret->lib = p; - ret->st = st; - BD_DEBUG(DBG_BLURAY | DBG_CRIT, "BD+ active for clip %05d.m2ts\n", clip_id); + if (ret) { + ret->lib = p; + ret->st = st; + BD_DEBUG(DBG_BLURAY | DBG_CRIT, "BD+ active for clip %05d.m2ts\n", clip_id); + } return ret; } } diff --git a/src/libbluray/disc/dec.c b/src/libbluray/disc/dec.c index 694646e..290dd4d 100644 --- a/src/libbluray/disc/dec.c +++ b/src/libbluray/disc/dec.c @@ -158,6 +158,10 @@ static int _bdrom_have_file(void *p, const char *dir, const char *file) char *path; path = str_printf("%s" DIR_SEP "%s", dir, file); + if (!path) { + return 0; + } + fp = dev->pf_file_open_bdrom(dev->file_open_bdrom_handle, path); X_FREE(path); diff --git a/src/libbluray/disc/disc.c b/src/libbluray/disc/disc.c index ecd53e3..32295f2 100644 --- a/src/libbluray/disc/disc.c +++ b/src/libbluray/disc/disc.c @@ -65,6 +65,10 @@ static BD_FILE_H *_bdrom_open_path(void *p, const char *rel_path) char *abs_path; abs_path = str_printf("%s%s", disc->disc_root, rel_path); + if (!abs_path) { + return NULL; + } + fp = file_open(abs_path, "rb"); X_FREE(abs_path); @@ -78,6 +82,10 @@ static BD_DIR_H *_bdrom_open_dir(void *p, const char *dir) char *path; path = str_printf("%s%s", disc->disc_root, dir); + if (!path) { + return NULL; + } + dp = dir_open(path); X_FREE(path); @@ -96,8 +104,10 @@ static BD_FILE_H *_overlay_open_path(BD_DISC *p, const char *rel_path) if (p->overlay_root) { char *abs_path = str_printf("%s%s", p->overlay_root, rel_path); - fp = file_open(abs_path, "rb"); - X_FREE(abs_path); + if (abs_path) { + fp = file_open(abs_path, "rb"); + X_FREE(abs_path); + } } bd_mutex_unlock(&p->ovl_mutex); @@ -113,8 +123,10 @@ static BD_DIR_H *_overlay_open_dir(BD_DISC *p, const char *dir) if (p->overlay_root) { char *abs_path = str_printf("%s%s", p->disc_root, dir); - dp = dir_open_default()(abs_path); - X_FREE(abs_path); + if (abs_path) { + dp = dir_open_default()(abs_path); + X_FREE(abs_path); + } } bd_mutex_unlock(&p->ovl_mutex); @@ -183,6 +195,10 @@ static BD_DIR_H *_combine_dirs(BD_DIR_H *ovl, BD_DIR_H *rom) dp->read = _comb_dir_read; dp->close = _comb_dir_close; dp->internal = calloc(1, sizeof(COMB_DIR)); + if (!dp->internal) { + X_FREE(dp); + goto out; + } while (!dir_read(ovl, &entry)) { _comb_dir_append(dp, &entry); @@ -191,6 +207,8 @@ static BD_DIR_H *_combine_dirs(BD_DIR_H *ovl, BD_DIR_H *rom) _comb_dir_append(dp, &entry); } } + + out: dir_close(ovl); dir_close(rom); @@ -342,6 +360,10 @@ BD_FILE_H *disc_open_file(BD_DISC *p, const char *dir, const char *file) char *path; path = str_printf("%s" DIR_SEP "%s", dir, file); + if (!path) { + return NULL; + } + fp = disc_open_path(p, path); X_FREE(path); diff --git a/src/libbluray/disc/udf_fs.c b/src/libbluray/disc/udf_fs.c index 1eec761..3e438ca 100644 --- a/src/libbluray/disc/udf_fs.c +++ b/src/libbluray/disc/udf_fs.c @@ -67,6 +67,9 @@ static int64_t _file_read(BD_FILE_H *file, uint8_t *buf, int64_t size) BD_FILE_H *udf_file_open(void *udf, const char *filename) { BD_FILE_H *file = calloc(1, sizeof(BD_FILE_H)); + if (!file) { + return NULL; + } BD_DEBUG(DBG_FILE, "Opening UDF file %s... (%p)\n", filename, (void*)file); @@ -116,6 +119,9 @@ static int _dir_read(BD_DIR_H *dir, BD_DIRENT *entry) BD_DIR_H *udf_dir_open(void *udf, const char* dirname) { BD_DIR_H *dir = calloc(1, sizeof(BD_DIR_H)); + if (!dir) { + return NULL; + } BD_DEBUG(DBG_DIR, "Opening UDF dir %s... (%p)\n", dirname, (void*)dir); _______________________________________________ libbluray-devel mailing list [email protected] https://mailman.videolan.org/listinfo/libbluray-devel
