From: Sangchul Lee Date: Tue, 21 Jul 2020 08:37:10 +0000 (+0900) Subject: Fix crash X-Git-Tag: submit/tizen/20200722.045405^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F08%2F239108%2F2;p=platform%2Fcore%2Fapi%2Fmediastreamer.git Fix crash Add null check before strdup(). Getting the ini instance codes are changed. [Version] 0.1.100 [Issue Type] Bug Fix Change-Id: I4806d33c257bfc669523f970e1bd579b0e9fa745 Signed-off-by: Sangchul Lee --- diff --git a/packaging/capi-media-streamer.spec b/packaging/capi-media-streamer.spec index a8dee9b..368d96b 100644 --- a/packaging/capi-media-streamer.spec +++ b/packaging/capi-media-streamer.spec @@ -1,6 +1,6 @@ Name: capi-media-streamer Summary: A Media Streamer API -Version: 0.1.99 +Version: 0.1.100 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/media_streamer_node.c b/src/media_streamer_node.c index d536448..cb048a9 100644 --- a/src/media_streamer_node.c +++ b/src/media_streamer_node.c @@ -1958,11 +1958,16 @@ int ms_node_get_param_value(media_streamer_node_s *node, param_s *param, char ** !g_strcmp0(param->param_name, MEDIA_STREAMER_PARAM_FLIP) || !g_strcmp0(param->param_name, MEDIA_STREAMER_PARAM_DISPLAY_GEOMETRY_METHOD)) { string_val = g_strdup_printf("%d", g_value_get_enum(&value)); + } else { + ms_error("should not be reached here, could not find the param name[%s] of the node[%s]", param->param_name, node->name); + ret = MEDIA_STREAMER_ERROR_INVALID_OPERATION; + goto end; } - *string_value = strdup(string_val); + *string_value = string_val ? strdup(string_val) : NULL; g_free(string_val); +end: g_value_reset(&value); g_value_unset(&value); diff --git a/src/media_streamer_util.c b/src/media_streamer_util.c index 6c76fcd..273c607 100644 --- a/src/media_streamer_util.c +++ b/src/media_streamer_util.c @@ -104,27 +104,28 @@ static const format_s container_format_table[] = { {MEDIA_FORMAT_MAX, NULL} }; +static dictionary *g_ini_instance = NULL; + static dictionary *__ms_get_ini_instance(void) { - static dictionary *instance = NULL; - dictionary *ms_dict = NULL; - - ms_debug_fenter(); - - if (!instance) { - /* loading existing ini file */ - ms_dict = iniparser_load(MEDIA_STREAMER_INI_PATH); - - if (!ms_dict) + if (!g_ini_instance) { + g_ini_instance = iniparser_load(MEDIA_STREAMER_INI_PATH); + if (!g_ini_instance) ms_warning("Could not open ini [%s]. Media-streamer will use default values.", MEDIA_STREAMER_INI_PATH); else - ms_debug("Open ini file [%s].", MEDIA_STREAMER_INI_PATH); - instance = ms_dict; + ms_debug("Open ini file [%s], instance[%p]", MEDIA_STREAMER_INI_PATH, g_ini_instance); } - ms_debug_fleave(); + return g_ini_instance; +} - return instance; +static void __ms_free_ini_instance(void) +{ + if (g_ini_instance) { + iniparser_freedict(g_ini_instance); + ms_debug("ini instance[%p] is freed", g_ini_instance); + g_ini_instance = NULL; + } } gchar *ms_ini_get_string(const char *ini_path, const char *default_str) @@ -186,13 +187,9 @@ void ms_ini_read_list(const char *key, gchar ***list) void ms_load_ini_settings(media_streamer_ini_t *ini) { - ms_debug_fenter(); - - /* get ini values */ memset(ini, 0, sizeof(media_streamer_ini_t)); if (__ms_get_ini_instance()) { - /* general */ ini->generate_dot = iniparser_getboolean(__ms_get_ini_instance(), "general:generate dot", DEFAULT_GENERATE_DOT); if (ini->generate_dot == TRUE) { const gchar *dot_path = iniparser_getstring(__ms_get_ini_instance(), "general:dot dir", MEDIA_STREAMER_DEFAULT_DOT_DIR); @@ -209,24 +206,20 @@ void ms_load_ini_settings(media_streamer_ini_t *ini) /* Read gstreamer arguments list */ ms_ini_read_list("general:gstreamer arguments", &ini->gst_args); + __ms_free_ini_instance(); } else { /* if dict is not available just fill the structure with default values */ ini->generate_dot = DEFAULT_GENERATE_DOT; ini->use_decodebin = DEFAULT_USE_DECODEBIN; } - /* general */ + /* TODO: dump all ini settings */ ms_debug("Media Streamer param [generate_dot] : %d", ini->generate_dot); ms_debug("Media Streamer param [use_decodebin] : %d", ini->use_decodebin); - - ms_debug_fleave(); - } void ms_unload_ini_settings(media_streamer_ini_t *ini) { - dictionary *dict; - ms_retm_if(!ini, "ini is null"); /* Clean up exclude elements list */ @@ -237,9 +230,6 @@ void ms_unload_ini_settings(media_streamer_ini_t *ini) /* Clean up gstreamer arguments list */ g_strfreev(ini->gst_args); - - if ((dict = __ms_get_ini_instance())) - iniparser_freedict(dict); } static const gchar *__ms_find_item(const format_s table[], media_format_mimetype_e mime)