New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
dir on return value of msilib.OpenDatabase() crashes python #55911
Comments
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). |
A call to PyType_Ready() fixes the issue, see attached patch. |
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? |
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. |
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?) |
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. |
This is a generic issue as there are multiple unready types that can raise (or in this case crash) with code that should work. bpo-26906 gives other examples and discussion of possible generic solutions that would make this issue obsolete. |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: