Fix illegal access before get name 73/115673/2
authorSeokHoon Lee <andy.shlee@samsung.com>
Tue, 21 Feb 2017 04:56:04 +0000 (13:56 +0900)
committerSeokHoon Lee <andy.shlee@samsung.com>
Tue, 21 Feb 2017 05:54:46 +0000 (14:54 +0900)
Signed-off-by: SeokHoon Lee <andy.shlee@samsung.com>
Change-Id: I4258f4ee45175fb5936e3ee77a0cabdee894f8e8

packaging/libmm-wfd.spec
src/include/mm_wfd_sink_enum.h
src/mm_wfd_sink_manager.c
src/mm_wfd_sink_priv.c

index dc77a717c02ab445b40809df0977eb0ee320fbee..2aebd656da486036384499dfd7a37a422467b9d7 100644 (file)
@@ -1,6 +1,6 @@
 Name:       libmm-wfd
 Summary:    Multimedia Framework Wifi-Display Library
-Version:    0.2.216
+Version:    0.2.217
 Release:    0
 Group:      System/Libraries
 License:    Apache-2.0
index 60f5cbf3f94bdf4a0cd1fcc0bd849c0d1de7fd1c..a9ec4bd60a289e3a72a145c383a425af3392b0ec 100644 (file)
 #define _MM_WFD_SINK_WFD_ENUM_H_
 
 typedef enum {
-       WFD_SESSION_MODE_MIXED          = 0,
-       WFD_SESSION_MODE_VIDEO_ONLY,
-       WFD_SESSION_MODE_AUDIO_ONLY
+       WFD_SESSION_MODE_UNKNOWN        = 0,
+       WFD_SESSION_MODE_MIXED          = (1 << 0),
+       WFD_SESSION_MODE_VIDEO_ONLY     = (1 << 1),
+       WFD_SESSION_MODE_AUDIO_ONLY     = (1 << 2)
 } WFDSinkSessionMOde;
 
 typedef enum {
index 697cddd40119c6a76d847ba63a8552927b27a372..4fbf50ea42ae35a8ed0a8dc8efcdb31151594d64 100644 (file)
@@ -120,7 +120,7 @@ __mm_wfd_sink_manager_thread(gpointer data)
                                break;
                        case WFD_SINK_MANAGER_CMD_LINK_V_DECODEBIN:
                                wfd_sink_debug("try to link video decodebin. session mode = %d", wfd_sink->ini.sink_session_mode);
-                               if (wfd_sink->ini.sink_session_mode == WFD_SESSION_MODE_AUDIO_ONLY) {
+                               if (wfd_sink->ini.sink_session_mode & WFD_SESSION_MODE_AUDIO_ONLY) {
                                        wfd_sink_debug("Audio only mode skip link video decodebin.");
                                        break;
                                }
@@ -138,7 +138,7 @@ __mm_wfd_sink_manager_thread(gpointer data)
                                break;
                        case WFD_SINK_MANAGER_CMD_PREPARE_V_PIPELINE:
                                wfd_sink_debug("try to prepare video pipeline. session mode = %d", wfd_sink->ini.sink_session_mode);
-                               if (wfd_sink->ini.sink_session_mode == WFD_SESSION_MODE_AUDIO_ONLY) {
+                               if (wfd_sink->ini.sink_session_mode & WFD_SESSION_MODE_AUDIO_ONLY) {
                                        wfd_sink_debug("Audio only mode skip prepare video pipeline.");
                                        break;
                                }
@@ -156,7 +156,7 @@ __mm_wfd_sink_manager_thread(gpointer data)
                                break;
                        case WFD_SINK_MANAGER_CMD_UNPREPARE_V_PIPELINE:
                                wfd_sink_debug("try to unprepare video pipeline. session mode = %d", wfd_sink->ini.sink_session_mode);
-                               if (wfd_sink->ini.sink_session_mode == WFD_SESSION_MODE_AUDIO_ONLY) {
+                               if (wfd_sink->ini.sink_session_mode & WFD_SESSION_MODE_AUDIO_ONLY) {
                                        wfd_sink_debug("Audio only mode skip unprepare video pipeline.");
                                        break;
                                }
index 1f59ca09eda7671adf2dc5b1edae6b9cce01dd13..df57f84561b5ff3782331b9a508dc1f85f93f074 100644 (file)
@@ -194,8 +194,7 @@ int _mm_wfd_sink_prepare(mm_wfd_sink_t *wfd_sink)
        }
 
        wfd_sink_info("Current session mode : %d", wfd_sink->ini.sink_session_mode);
-       if(wfd_sink->ini.sink_session_mode == WFD_SESSION_MODE_MIXED ||
-                       wfd_sink->ini.sink_session_mode == WFD_SESSION_MODE_VIDEO_ONLY) {
+       if(wfd_sink->ini.sink_session_mode & (WFD_SESSION_MODE_MIXED | WFD_SESSION_MODE_VIDEO_ONLY)) {
                /* create video decodebin */
                result = __mm_wfd_sink_create_video_decodebin(wfd_sink);
                if (result < MM_ERROR_NONE) {
@@ -2399,15 +2398,19 @@ __mm_wfd_sink_demux_pad_added(GstElement *demux, GstPad *pad, gpointer data)
                                                        wfd_sink->pipeline->mainbin &&
                                                        wfd_sink->pipeline->mainbin[WFD_SINK_M_PIPE].gst);
 
+       name = gst_pad_get_name(pad);
+       if(name == NULL) {
+               wfd_sink_error("fail to get pad");
+               goto ERROR;
+       }
+
        wfd_sink_debug("Mux pad added, session mode = %d, name[0] = %c", wfd_sink->ini.sink_session_mode, name[0]);
-       if(wfd_sink->ini.sink_session_mode == WFD_SESSION_MODE_AUDIO_ONLY && name[0] == 'v') {
+       if((wfd_sink->ini.sink_session_mode & WFD_SESSION_MODE_AUDIO_ONLY) && name[0] == 'v') {
                wfd_sink_error("Skip video pad add in audio only mode");
                // Do nothing
                goto done;
        }
 
-       name = gst_pad_get_name(pad);
-
        pipeline = wfd_sink->pipeline->mainbin[WFD_SINK_M_PIPE].gst;
 
        /* take srcpad from demuxer added pad */
@@ -3004,7 +3007,7 @@ static int __mm_wfd_sink_create_pipeline(mm_wfd_sink_t *wfd_sink)
        MMWFDSINK_PAD_PROBE(wfd_sink, NULL, mainbin[WFD_SINK_M_A_VALVE].gst, "sink");
 
        wfd_sink_error("Current session mode : %d", wfd_sink->ini.sink_session_mode);
-       if(wfd_sink->ini.sink_session_mode == WFD_SESSION_MODE_MIXED || wfd_sink->ini.sink_session_mode == WFD_SESSION_MODE_VIDEO_ONLY) {
+       if(wfd_sink->ini.sink_session_mode & (WFD_SESSION_MODE_MIXED | WFD_SESSION_MODE_VIDEO_ONLY)) {
                /* create valve for video */
                MMWFDSINK_CREATE_ELEMENT(mainbin, WFD_SINK_M_V_VALVE, "valve", "video_valve", FALSE);
                MMWFDSINK_PAD_PROBE(wfd_sink, NULL, mainbin[WFD_SINK_M_V_VALVE].gst, "src");