-
-
Notifications
You must be signed in to change notification settings - Fork 33.7k
bpo-31490: Fix an assertion failure in ctypes in case an _anonymous_ attr is defined only outside _fields_ #3615
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
bpo-31490: Fix an assertion failure in ctypes in case an _anonymous_ attr is defined only outside _fields_ #3615
Conversation
| assert(Py_TYPE(descr) == &PyCField_Type); | ||
| if (Py_TYPE(descr) != &PyCField_Type) { | ||
| PyErr_Format(PyExc_AttributeError, | ||
| "'%U' is specified in _anonymous_ but not in " |
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.
What if fname is not a string?
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.
IIUC, PyObject_GetAttr() would return NULL
| # AttributeError: 'x' is specified in _anonymous_ but not in _fields_ | ||
| with self.assertRaises(AttributeError): | ||
| class Name(Structure): | ||
| _fields_ = [] |
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.
From the documentation:
_anonymous_must be already defined when_fields_is assigned, otherwise it will have no effect.
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.
all right. should we change the other tests too?
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.
Hmm, if they are wrong, it should be a separate issue. OK, left the code as is.
| # AttributeError: 'x' is specified in _anonymous_ but not in _fields_ | ||
| with self.assertRaises(AttributeError): | ||
| class Name(Structure): | ||
| _fields_ = [] |
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.
Hmm, if they are wrong, it should be a separate issue. OK, left the code as is.
|
Thanks @orenmn for the PR, and @serhiy-storchaka for merging it 🌮🎉.. I'm working now to backport this PR to: 2.7, 3.6. |
|
Thanks @orenmn for the PR, and @serhiy-storchaka for merging it 🌮🎉.. I'm working now to backport this PR to: 2.7, 3.6. |
1 similar comment
|
Thanks @orenmn for the PR, and @serhiy-storchaka for merging it 🌮🎉.. I'm working now to backport this PR to: 2.7, 3.6. |
|
Sorry @orenmn and @serhiy-storchaka, I had trouble checking out the |
1 similar comment
|
Sorry @orenmn and @serhiy-storchaka, I had trouble checking out the |
|
Sorry @orenmn and @serhiy-storchaka, I had trouble checking out the |
|
GH-3774 is a backport of this pull request to the 3.6 branch. |
…mous_ attr is defined only outside _fields_. (pythonGH-3615) (cherry picked from commit 30b61b5)
…mous_ attr is defined only outside _fields_. (pythonGH-3615) (cherry picked from commit 30b61b5)
|
Thanks @orenmn for the PR, and @serhiy-storchaka for merging it 🌮🎉.. I'm working now to backport this PR to: 2.7. |
…mous_ attr is defined only outside _fields_. (pythonGH-3615) (cherry picked from commit 30b61b5)
|
GH-3780 is a backport of this pull request to the 2.7 branch. |
stgdict.c: replace the assertion with a test whether the type of the attribute isPyCField_Type, i.e. whether the attribute was specified in_fields_.test_anon.py: add a test to verify that the assertion failure is no more, and thatAttributeErroris raised instead.https://bugs.python.org/issue31490