]> granicus.if.org Git - python/commitdiff
[3.6] bpo-12239: Make GetProperty() return None for VT_EMPTY (GH-4539)
authorBerker Peksag <berker.peksag@gmail.com>
Fri, 24 Nov 2017 16:04:40 +0000 (19:04 +0300)
committerGitHub <noreply@github.com>
Fri, 24 Nov 2017 16:04:40 +0000 (19:04 +0300)
The previous behavior was to raise an exception

    NotImplementedError: result of type 0

when the value of the property is VT_EMPTY.

(cherry picked from commit 19fb134185ce155bc53f517116fca73093ba55e9)

Lib/test/test_msilib.py
Misc/NEWS.d/next/Library/2017-11-24-14-07-55.bpo-12239.Nj3A0x.rst [new file with mode: 0644]
PC/_msi.c

index eb2c76e69da2a836114e7ae25bc57d1f7e20073a..fec435e05b747c4d4257cac6c8477e8ee638883a 100644 (file)
@@ -52,6 +52,13 @@ class MsiDatabaseTestCase(unittest.TestCase):
             msilib.OpenDatabase(db_path, msilib.MSIDBOPEN_CREATE)
         self.assertEqual(str(cm.exception), 'create failed')
 
+    def test_get_property_vt_empty(self):
+        db, db_path = init_database()
+        summary = db.GetSummaryInformation(0)
+        self.assertIsNone(summary.GetProperty(msilib.PID_SECURITY))
+        del db
+        self.addCleanup(unlink, db_path)
+
 
 class Test_make_id(unittest.TestCase):
     #http://msdn.microsoft.com/en-us/library/aa369212(v=vs.85).aspx
diff --git a/Misc/NEWS.d/next/Library/2017-11-24-14-07-55.bpo-12239.Nj3A0x.rst b/Misc/NEWS.d/next/Library/2017-11-24-14-07-55.bpo-12239.Nj3A0x.rst
new file mode 100644 (file)
index 0000000..20d9477
--- /dev/null
@@ -0,0 +1,2 @@
+Make :meth:`msilib.SummaryInformation.GetProperty` return ``None`` when the
+value of property is ``VT_EMPTY``.  Initial patch by Mark Mc Mahon.
index 00755d6375e277b570c6b4a98d989eac0b5d7145..a7c8fa3d092a6437a1d0c760c7b503c548ca226b 100644 (file)
--- a/PC/_msi.c
+++ b/PC/_msi.c
@@ -578,6 +578,8 @@ summary_getproperty(msiobj* si, PyObject *args)
             if (sval != sbuf)
                 free(sval);
             return result;
+        case VT_EMPTY:
+            Py_RETURN_NONE;
     }
     PyErr_Format(PyExc_NotImplementedError, "result of type %d", type);
     return NULL;