Issue 11702: dir on return value of msilib.OpenDatabase() crashes python (original) (raw)

Created on 2011-03-28 15:13 by markm, last changed 2022-04-11 14:57 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
msi_opendatabase.patch amaury.forgeotdarc,2011-03-28 22:28 review
msi_opendatabase_2.patch markm,2011-03-29 22:10 Patch View, Record & Summary Types also review
support_dir_for_msi_objs.patch markm,2011-05-21 01:01 review
Messages (7)
msg132402 - (view) Author: Mark Mc Mahon (markm) * Date: 2011-03-28 15:13
Running the following code: >>> import msilib >>> db = msilib.OpenDatabase('c:/windows/installer/1c7a1.msi', 1) >>> db <_msi.Database object at 0x01E230A0> >>> dir(db) (Python crashes - tested on current Trunk and Python 2.7.1). I tried tracking it through the C code - and it seems to be a problem when dir is checking for __dir__ (the pointer in PyObject_GetAttrString seems to be incorrect).
msg132436 - (view) Author: Amaury Forgeot d'Arc (amaury.forgeotdarc) * (Python committer) Date: 2011-03-28 22:28
A call to PyType_Ready() fixes the issue, see attached patch. I added a test that opens a random file in c:\windows\installer, I don't know if this is correct for all Windows version.
msg132539 - (view) Author: Mark Mc Mahon (markm) * Date: 2011-03-29 22:10
That fixed it - but it seems we need that for the other Types defined in the module. Regarding testing - would it be a good idea to add an MSI to the test suite - or better to create one during testing (using msilib) and then use that in the tests?
msg136201 - (view) Author: Brian Curtin (brian.curtin) * (Python committer) Date: 2011-05-18 02:40
If we can generate a testable MSI file that would be the best. Including a very small pre-generated MSI for the purposes of the test would be acceptable. As-is, the tests don't pass because my machine has C:\Windows\installer\1032f.msi that gets used for the test, which apparently doesn't work with this functionality, and other machines may end up with the same situation. I'm not sure if that's a bug in the code or in whatever MSI that is, though. The OpenDatabase call returns "unknown error 6e" for both new tests.
msg136418 - (view) Author: Mark Mc Mahon (markm) * Date: 2011-05-21 01:01
I wasn't so happy trawling through \windows\installer either :) Creating an MSI to test is very simple, and actually quicker than I had originally thought. The latest patch (support_dir_for_msi_objs.patch) creates the one and just uses that. Optionally I could create a new one each time setUp()/tearDown(). But was thinking - let's do that if/when we need to :) The latest patch updates the tests - but no change to the C code. (I doubt the error you received is a bug in msilib, and I couldn't repro even by opening EVERY MSI in my windows\installer dir. It could be a rights/security issue? The previous test was not opening as READ ONLY - even though it never saved the db, so that may be another reason?)
msg223144 - (view) Author: Mark Lawrence (BreamoreBoy) * Date: 2014-07-15 20:04
The attached patch is short and sweet and looks okay to my untrained eye. I believe it should apply cleanly as there've been very few changes to _msi.c. Can we have a formal patch review please.
msg277920 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2016-10-03 02:03
This is a generic issue as there are multiple unready types that can raise (or in this case crash) with code that should work. #26906 gives other examples and discussion of possible generic solutions that would make this issue obsolete.
History
Date User Action Args
2022-04-11 14:57:15 admin set github: 55911
2021-10-18 21:23:54 iritkatriel set status: open -> closedsuperseder: Special method lookup fails on uninitialized typesresolution: duplicatestage: patch review -> resolved
2016-10-03 18:00:19 BreamoreBoy set nosy: - BreamoreBoy
2016-10-03 02:03:26 terry.reedy set nosy: + terry.reedy, serhiy.storchakamessages: + versions: + Python 3.5, Python 3.6, Python 3.7, - Python 3.2
2014-07-15 20:10:26 brian.curtin set nosy: - brian.curtin
2014-07-15 20:04:14 BreamoreBoy set nosy: + BreamoreBoy, tim.golden, zach.ware, steve.dowermessages: +
2011-05-21 01:01:56 markm set files: + support_dir_for_msi_objs.patchmessages: +
2011-05-18 02:40:02 brian.curtin set nosy: + brian.curtinmessages: +
2011-03-29 22:10:18 markm set files: + msi_opendatabase_2.patchmessages: +
2011-03-28 22:28:36 amaury.forgeotdarc set files: + msi_opendatabase.patchnosy: + amaury.forgeotdarcmessages: + keywords: + patchstage: patch review
2011-03-28 18:47:35 eric.araujo set nosy: + loewis
2011-03-28 15:13:42 markm create