| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
Sorry, something went wrong.
Account for when self->pos is equal to PY_SSIZE_T_MAX. The length of read was correctly set to zero but the asserts assumed self->pos couldn't reach PY_SSIZE_T_MAX. Return early to avoid edge cases.
For `read_bytes_lock_held` the `size` parameter is always set to 0 by calling code currently if self->pos > self->string_size. I added a range check for self->pos as an extra safety as codepaths chagne but can remove if it's too much. `write_bytes_lock_held`: `endpos` is a `size_t` so can hold `2 * PY_SSIZE_T_MAX`. Value is bounds checked in `resize_buffer_lock_held`. A number of cases use `scan_eol_lock_held` to move forward. That has code which checks `self->pos >= self->string_size` and returns `0`. Callsites all seem to handle that correctly.
|
I audited the codepaths which did self->pos + buffer. For read_bytes_lock_held the size parameter is always set to 0 by calling code currently if self->pos > self->string_size. I added a range check for self->pos as an extra safety as codepaths change but can remove if it's too much. write_bytes_lock_held: endpos is a size_t so can hold 2 * PY_SSIZE_T_MAX. Value is bounds checked in resize_buffer_lock_held. A number of cases use scan_eol_lock_held to move forward. That has code which checks self->pos >= self->string_size and returns 0. Callers seem to handle that correctly (early exit or call read_bytes_lock_held).. |
Sorry, something went wrong.
There was a problem hiding this comment.
LGTM. 👍
Sorry, something went wrong.
|
Thanks @cmaloney for the PR, and @serhiy-storchaka for merging it 🌮🎉.. I'm working now to backport this PR to: 3.13. |
Sorry, something went wrong.
|
Thanks @cmaloney for the PR, and @serhiy-storchaka for merging it 🌮🎉.. I'm working now to backport this PR to: 3.14. |
Sorry, something went wrong.
|
Sorry, @cmaloney and @serhiy-storchaka, I could not cleanly backport this to 3.13 due to a conflict. cherry_picker 7d54374f9c7d91e0ef90c4ad84baf10073cf1d8a 3.13 |
Sorry, something went wrong.
Fix error in assertion which causes failure if pos is equal to PY_SSIZE_T_MAX. Fix undefined behavior in read() and readinto() if pos is larger that the size of the underlying buffer. (cherry picked from commit 7d54374) Co-authored-by: Cody Maloney <cmaloney@users.noreply.github.com>
|
GH-141457 is a backport of this pull request to the 3.14 branch. |
Sorry, something went wrong.
|
@cmaloney, could you please create a backport to 3.13 manually? |
Sorry, something went wrong.
|
GH-141478 is a backport of this pull request to the 3.13 branch. |
Sorry, something went wrong.
Fix error in assertion which causes failure if pos is equal to PY_SSIZE_T_MAX. Fix undefined behavior in read() and readinto() if pos is larger that the size of the underlying buffer.
| Back | FazBrowse Home | New Git URL |
Account for when self->pos is equal to PY_SSIZE_T_MAX. The length of read was correctly set to zero but the asserts assumed self->pos couldn't reach PY_SSIZE_T_MAX. Return early to avoid edge cases.