-
-
Notifications
You must be signed in to change notification settings - Fork 31.9k
gh-46376: add (failing) tests for ctypes/pointer/cast/set_contents #108519
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
base: main
Are you sure you want to change the base?
Conversation
The previous fix was only reverted for 3.11 so we could release 3.11.5. The rest isn't in such a hurry so I hope we can fix it forward instead. |
2a2cf53
to
9a6b23a
Compare
I'm planning to fix it yes, but I'd like the tests to be merged first, if you agree that it's reasonable |
5cf867d
to
a84b664
Compare
There are too many moving parts:
The biggest bug right now seems to be that Another shortcut, would be to take my original idea, look into |
3e346a8
to
5dbb4ae
Compare
d44a269
to
b6e92ba
Compare
Previous attempt to fix pythongh-46376 was incomplete and overall it didn't succeed, and was reverted in 3.11. However, we have discovered some dangerous issues with ctypes, that aren't fixed or documented anywhere. This commit adds tests (@expectedfailure) so at least developers are aware of situations where memory might be corrupted, leaked or when changing a pointer value might have no effect. Hopefully, we should be able to remove @expectedfailure in the future, with new shiny ctypes implementation or at least a bugfix.
b6e92ba
to
0116633
Compare
Hi, Would you mind adding only the tests that succeed? There's quite a few of those here. |
@@ -1,8 +1,10 @@ | |||
import gc |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Move this one after ctypes
(for sorting imports).
class Struct(Structure): | ||
_fields_ = [("a", POINTER(c_int))] | ||
|
||
x = Struct(a=pointer(w.setdefault(23,c_int(23)))) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
x = Struct(a=pointer(w.setdefault(23,c_int(23)))) | |
x = Struct(a=pointer(w.setdefault(23, c_int(23)))) |
@@ -98,6 +100,29 @@ def test_p_cint(self): | |||
x = pointer(i) | |||
self.assertEqual(x._objects, {'1': i}) | |||
|
|||
@unittest.expectedFailure # gh-46376, gh-107131, gh-107940, gh-108222 | |||
def test_pp_ownership(self): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is it possible to instead have a huge expectedFailure
, to correctly detect where it is failing instead? Because among the assert*
calls, I don't know which of these is the one that should actually fail (same question for all the other expected failures).
Previous attempt to fix gh-46376 was incomplete and overall it didn't succeed, and was reverted. However, we have discovered some dangerous issues with ctypes, that aren't fixed or documented anywhere.
This commit adds tests (@expectedfailure) so at least developers are aware of situations where memory might be corrupted, leaked or when changing a pointer value might have no effect.
Hopefully, we should be able to remove @expectedfailure in the future, with new shiny ctypes implementation or at least a bugfix.
/cc @ambv