Fix GH-17746: Signed integer overflow when setting ATTR_TIMEOUT #17854
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.
::setAttribute(PDO::ATTR_TIMEOUT, …)
accepts a timeout in seconds, butsqlite3_busy_timeout()
[1] expects the timeout in milliseconds, which is anint
. To avoid signed overflow, we reject values larger than the allowed range.We also cater to negative values by simply clamping those to zero, since
sqlite3_busy_timeout()
handles negative values the same as zero.[1] https://www.sqlite.org/c3ref/busy_timeout.html
@nielsdos said:
I'm not sure about this, since that may raise an exception with
ERRMODE_EXCEPTION
(and possibly even withERRMODE_WARNING
due to a global error handler), and might break working code (not working as intended, but somehow working). Perhaps it's better to postpone that to the master branch.