codec/h264: fix potential segfault and mf_init
authorNorbert Federa <norbert.federa@thincast.com>
Tue, 17 Oct 2017 17:28:54 +0000 (19:28 +0200)
committerNorbert Federa <norbert.federa@thincast.com>
Tue, 17 Oct 2017 17:28:54 +0000 (19:28 +0200)
libfreerdp/codec/h264.c
libfreerdp/codec/h264_mf.c

index 7777310..357465d 100644 (file)
@@ -468,7 +468,7 @@ BOOL h264_context_init(H264_CONTEXT* h264)
        for (i = 0; i < MAX_SUBSYSTEMS; i++)
        {
                H264_CONTEXT_SUBSYSTEM* subsystem = subSystems[i];
-               if (!subsystem->Init)
+               if (!subsystem || !subsystem->Init)
                        break;
 
                if (subsystem->Init(h264))
index 7037ca7..69a149b 100644 (file)
@@ -517,10 +517,12 @@ static BOOL mf_init(H264_CONTEXT* h264)
                                 "MFCreateMediaType");
        sys->MFCreateDXGIDeviceManager = (pfnMFCreateDXGIDeviceManager) GetProcAddress(
                                             sys->mfplat, "MFCreateDXGIDeviceManager");
-
+       /**
+        * Note: MFCreateDXGIDeviceManager is supported starting from Windows 8.
+        *       Don't fail below if GetProcAddress returned NULL.
+        */
        if (!sys->MFStartup || !sys->MFShutdown || !sys->MFCreateSample
-           || !sys->MFCreateMemoryBuffer ||
-           !sys->MFCreateMediaType || !sys->MFCreateDXGIDeviceManager)
+           || !sys->MFCreateMemoryBuffer || !sys->MFCreateMediaType)
                goto error;
 
        CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);