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) *  |
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) *  |
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) *  |
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. |
|
|