libbluray | branch: master | hpi1 <[email protected]> | Thu Jun 4 14:29:44 2015 +0300| [3c43b555423cd6b5f9714746cfa52a65c935cc56] | committer: hpi1
Check calloc result > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=3c43b555423cd6b5f9714746cfa52a65c935cc56 --- src/libbluray/bdj/bdj.c | 13 ++++++++++++- src/libbluray/bdnav/index_parse.c | 8 ++++++++ src/libbluray/bdnav/meta_parse.c | 4 ++++ src/libbluray/bdnav/sound_parse.c | 33 ++++++++++++++++++++++++-------- src/libbluray/bluray.c | 4 +++- src/libbluray/decoders/textst_render.c | 4 ++++ 6 files changed, 56 insertions(+), 10 deletions(-) diff --git a/src/libbluray/bdj/bdj.c b/src/libbluray/bdj/bdj.c index ef9452c..6747972 100644 --- a/src/libbluray/bdj/bdj.c +++ b/src/libbluray/bdj/bdj.c @@ -464,6 +464,11 @@ static int _create_jvm(void *jvm_lib, const char *java_home, const char *jar_fil } JavaVMOption* option = calloc(1, sizeof(JavaVMOption) * 20); + if (!option) { + BD_DEBUG(DBG_CRIT, "out of memory\n"); + return 0; + } + int n = 0; JavaVMInitArgs args; option[n++].optionString = str_dup ("-Dawt.toolkit=java.awt.BDToolkit"); @@ -538,16 +543,22 @@ BDJAVA* bdj_open(const char *path, struct bluray *bd, return 0; } + BDJAVA* bdjava = calloc(1, sizeof(BDJAVA)); + if (!bdjava) { + dl_dlclose(jvm_lib); + return NULL; + } + JNIEnv* env = NULL; JavaVM *jvm = NULL; if (!_find_jvm(jvm_lib, &env, &jvm) && !_create_jvm(jvm_lib, java_home, jar_file, &env, &jvm)) { + X_FREE(bdjava); dl_dlclose(jvm_lib); return NULL; } - BDJAVA* bdjava = calloc(1, sizeof(BDJAVA)); bdjava->h_libjvm = jvm_lib; bdjava->jvm = jvm; diff --git a/src/libbluray/bdnav/index_parse.c b/src/libbluray/bdnav/index_parse.c index 6c07ba1..64dc5e3 100644 --- a/src/libbluray/bdnav/index_parse.c +++ b/src/libbluray/bdnav/index_parse.c @@ -103,8 +103,16 @@ static int _parse_index(BITSTREAM *bs, INDX_ROOT *index) } index->num_titles = bs_read(bs, 16); + if (!index->num_titles) { + BD_DEBUG(DBG_CRIT, "empty index\n"); + return 0; + } index->titles = calloc(index->num_titles, sizeof(INDX_TITLE)); + if (!index->titles) { + BD_DEBUG(DBG_CRIT, "out of memory\n"); + return 0; + } for (i = 0; i < index->num_titles; i++) { diff --git a/src/libbluray/bdnav/meta_parse.c b/src/libbluray/bdnav/meta_parse.c index 50b8c75..d7a7c6c 100644 --- a/src/libbluray/bdnav/meta_parse.c +++ b/src/libbluray/bdnav/meta_parse.c @@ -145,6 +145,10 @@ META_ROOT *meta_parse(BD_DISC *disc) { #ifdef HAVE_LIBXML2 META_ROOT *root = calloc(1, sizeof(META_ROOT)); + if (!root) { + BD_DEBUG(DBG_CRIT, "out of memory\n"); + return NULL; + } root->dl_count = 0; xmlDocPtr doc; diff --git a/src/libbluray/bdnav/sound_parse.c b/src/libbluray/bdnav/sound_parse.c index c1cbcfb..677eb2a 100644 --- a/src/libbluray/bdnav/sound_parse.c +++ b/src/libbluray/bdnav/sound_parse.c @@ -103,7 +103,15 @@ static int _sound_read_samples(BITSTREAM *bs, SOUND_OBJECT *obj) uint32_t n; uint32_t num_samples = obj->num_frames * obj->num_channels; + if (!num_samples) { + return 1; + } + obj->samples = calloc(num_samples, sizeof(uint16_t)); + if (!obj->samples) { + BD_DEBUG(DBG_CRIT, "out of memory\n"); + return 0; + } for (n = 0; n < num_samples; n++) { obj->samples[n] = bs_read(bs, 16); @@ -116,13 +124,14 @@ void sound_free(SOUND_DATA **p) { if (p && *p) { - unsigned i; - for (i = 0 ; i < (*p)->num_sounds; i++) { - X_FREE((*p)->sounds[i].samples); - } - - X_FREE((*p)->sounds); + if ((*p)->sounds) { + unsigned i; + for (i = 0 ; i < (*p)->num_sounds; i++) { + X_FREE((*p)->sounds[i].samples); + } + X_FREE((*p)->sounds); + } X_FREE(*p); } } @@ -150,21 +159,29 @@ static SOUND_DATA *_sound_parse(BD_FILE_H *fp) bs_skip(&bs, 8); /* reserved */ num_sounds = bs_read(&bs, 8); - if (data_len < 1) { + if (data_len < 1 || num_sounds < 1) { BD_DEBUG(DBG_NAV | DBG_CRIT, "empty database\n"); goto error; } data_offsets = calloc(num_sounds, sizeof(uint32_t)); data = calloc(1, sizeof(SOUND_DATA)); + if (!data_offsets | !data) { + BD_DEBUG(DBG_CRIT, "out of memory\n"); + goto error; + } data->num_sounds = num_sounds; data->sounds = calloc(num_sounds, sizeof(SOUND_OBJECT)); + if (!data->sounds) { + BD_DEBUG(DBG_CRIT, "out of memory\n"); + goto error; + } /* parse headers */ for (i = 0; i < data->num_sounds; i++) { if (!_sound_parse_index(&bs, data_offsets + i, &data->sounds[i])) { - BD_DEBUG(DBG_NAV | DBG_CRIT, "error parsing sound %d attribues\n", i); + BD_DEBUG(DBG_NAV | DBG_CRIT, "error parsing sound %d attributes\n", i); goto error; } } diff --git a/src/libbluray/bluray.c b/src/libbluray/bluray.c index 98781e2..8a61e94 100644 --- a/src/libbluray/bluray.c +++ b/src/libbluray/bluray.c @@ -202,7 +202,9 @@ static void _init_event_queue(BLURAY *bd) { if (!bd->event_queue) { bd->event_queue = calloc(1, sizeof(struct bd_event_queue_s)); - bd_mutex_init(&bd->event_queue->mutex); + if (bd->event_queue) { + bd_mutex_init(&bd->event_queue->mutex); + } } else { bd_mutex_lock(&bd->event_queue->mutex); bd->event_queue->in = 0; diff --git a/src/libbluray/decoders/textst_render.c b/src/libbluray/decoders/textst_render.c index 8d1527e..0e87d4b 100644 --- a/src/libbluray/decoders/textst_render.c +++ b/src/libbluray/decoders/textst_render.c @@ -74,6 +74,10 @@ TEXTST_RENDER *textst_render_init(void) #ifdef HAVE_FT2 TEXTST_RENDER *p = calloc(1, sizeof(TEXTST_RENDER)); + if (!p) { + return NULL; + } + if (!FT_Init_FreeType(&p->ft_lib)) { return p; } _______________________________________________ libbluray-devel mailing list [email protected] https://mailman.videolan.org/listinfo/libbluray-devel
