[DirectShow] Fix potention undefined behavior on destruction
authorKonstantin Ritt <ritt.ks@gmail.com>
Sat, 11 Apr 2015 15:33:20 +0000 (19:33 +0400)
committerKonstantin Ritt <ritt.ks@gmail.com>
Mon, 13 Apr 2015 09:58:12 +0000 (09:58 +0000)
The exact warning is:
> deleting object of polymorphic class type which has non-virtual
  destructor might cause undefined behavior

Change-Id: I8f259def3f1f7f776fb31ace9dfcc7145426f5c0
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
src/plugins/directshow/player/directshowiosource.h
src/plugins/directshow/player/directshowmediatypelist.cpp
src/plugins/directshow/player/directshowmediatypelist.h
src/plugins/directshow/player/directshowpinenum.h

index fb3774a..e45c852 100644 (file)
@@ -49,7 +49,7 @@ class DirectShowIOSource
 {
 public:
     DirectShowIOSource(DirectShowEventLoop *loop);
-    ~DirectShowIOSource();
+    virtual ~DirectShowIOSource();
 
     void setDevice(QIODevice *device);
     void setAllocator(IMemAllocator *allocator);
index c50f31e..7adf98c 100644 (file)
@@ -41,7 +41,7 @@ class DirectShowMediaTypeEnum : public IEnumMediaTypes
 {
 public:
     DirectShowMediaTypeEnum(DirectShowMediaTypeList *list, int token, int index = 0);
-    ~DirectShowMediaTypeEnum();
+    virtual ~DirectShowMediaTypeEnum();
 
     // IUnknown
     HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject);
@@ -143,6 +143,10 @@ DirectShowMediaTypeList::DirectShowMediaTypeList()
 {
 }
 
+DirectShowMediaTypeList::~DirectShowMediaTypeList()
+{
+}
+
 IEnumMediaTypes *DirectShowMediaTypeList::createMediaTypeEnum()
 {
     return new DirectShowMediaTypeEnum(this, m_mediaTypeToken, 0);
index c06363d..008293a 100644 (file)
@@ -42,6 +42,7 @@ class DirectShowMediaTypeList : public IUnknown
 {
 public:
     DirectShowMediaTypeList();
+    virtual ~DirectShowMediaTypeList();
 
     IEnumMediaTypes *createMediaTypeEnum();
 
index 47b4e1a..3cc62e2 100644 (file)
@@ -42,7 +42,7 @@ class DirectShowPinEnum : public IEnumPins
 {
 public:
     DirectShowPinEnum(const QList<IPin *> &pins);
-    ~DirectShowPinEnum();
+    virtual ~DirectShowPinEnum();
 
     // IUnknown
     HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject);