{{ message }}
BUG: Fix missing check for PyErr_Occurred() in _pyarray_correlate.#28898
Merged
Conversation
When running the scipy 1.15 test suite test signal/tests/test_signaltools.py::test_lfilter_bad_object, with Python built in debug mode, we see the following error: ``` Fatal Python error: _Py_CheckSlotResult: Slot * of type float succeeded with an exception set ``` `None` ends up as the first argument to `dot`, and this triggers an error from PyFloat_Multiply. Once an error has occurred, we must avoid calling multiply again, since it asserts that PyErr_Occurred() is false if the output is a non-error, which will fail if an error was set at entry.
seberg
approved these changes
May 5, 2025
seberg
left a comment
Member
There was a problem hiding this comment.
I suppose we used to get away a bit better with just continuing on error. Thanks, looks good to me, mid-term, the dot function should just return an error.
I think it would actually be OK to add a get_dotfunc function to the DType, and just stop using this implementation (maybe set the slot to NULL, or just keep it around a bit longer).
Would be nice to add a short test, although not sure if it is tedious to cover all paths here.
Member
charris
pushed a commit
to charris/numpy
that referenced
this pull request
May 6, 2025
…umpy#28898) When running the scipy 1.15 test suite test signal/tests/test_signaltools.py::test_lfilter_bad_object, with Python built in debug mode, we see the following error: ``` Fatal Python error: _Py_CheckSlotResult: Slot * of type float succeeded with an exception set ``` `None` ends up as the first argument to `dot`, and this triggers an error from PyFloat_Multiply. Once an error has occurred, we must avoid calling multiply again, since it asserts that PyErr_Occurred() is false if the output is a non-error, which will fail if an error was set at entry.
MaanasArora
pushed a commit
to MaanasArora/numpy
that referenced
this pull request
May 8, 2025
…umpy#28898) When running the scipy 1.15 test suite test signal/tests/test_signaltools.py::test_lfilter_bad_object, with Python built in debug mode, we see the following error: ``` Fatal Python error: _Py_CheckSlotResult: Slot * of type float succeeded with an exception set ``` `None` ends up as the first argument to `dot`, and this triggers an error from PyFloat_Multiply. Once an error has occurred, we must avoid calling multiply again, since it asserts that PyErr_Occurred() is false if the output is a non-error, which will fail if an error was set at entry.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

When running the scipy 1.15 test suite test
signal/tests/test_signaltools.py::test_lfilter_bad_object, with Python built in debug mode, we see the following error:
Noneends up as the first argument todot, and this triggers an error from PyFloat_Multiply. Once an error has occurred, we must avoid calling multiply again, since it asserts that PyErr_Occurred() is false if the output is a non-error, which will fail if an error was set at entry.