GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — gh-157242: Do not close io.BytesIO on MemoryError by vstinner · Pull Request #157344 · python/cpython

Conversation

@vstinner

@vstinner vstinner commented Sep 12, 2026 •
edited by bedevere-app Bot
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Member

Replace _PyBytes_Resize() with _PyBytes_ResizeKeepOnError().

Fix truncate(): only set string_size on resize success.

  • Issue: bytearray.resize() must not clear the object on error (memory allocation failure) #157242

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@vstinner
pythongh-157242: Do not close io.BytesIO on MemoryError
00d23bb
Replace _PyBytes_Resize() with _PyBytes_ResizeKeepOnError().

Fix truncate(): only set string_size on resize success.
@bedevere-app bedevere-app Bot mentioned this pull request Sep 12, 2026
bytearray.resize() must not clear the object on error (memory allocation failure) #157242
Closed
@bedevere-app bedevere-app Bot added the awaiting core review label Sep 12, 2026
@vstinner
Fix string_size
6fda0a7
Revert the string_size change. Instead, restore string_size to its
previous value on error.
@vstinner

vstinner commented Sep 12, 2026

Copy link
Copy Markdown
Member Author

io.StringIO makes the object inconsistent on MemoryError! It looks more complicated to fix it, so I focused this PR on io.BytesIO.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@vstinner

vstinner commented Sep 12, 2026

Copy link
Copy Markdown
Member Author

There is still an issue in the Python implementation of BytesIO.truncate(): del self._buffer[pos:] is not atomic on MemoryError, it leaves the byterray in an inconsistent state.

I merge this change anyway to make the situation a little bit better. Replacing _PyBytes_Resize() with _PyBytes_ResizeKeepOnError() doesn't impact performance.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@vstinner
vstinner merged commit 23eda00 into python:main Sep 12, 2026
54 checks passed

Uh oh!

There was an error while loading. Please reload this page.

@vstinner
vstinner deleted the bytesio branch September 12, 2026 17:06
@bedevere-app bedevere-app Bot removed the awaiting core review label Sep 12, 2026
johnslavik pushed a commit to johnslavik/cpython that referenced this pull request Sep 14, 2026
@vstinner @johnslavik
pythongh-157242: Do not close io.BytesIO on MemoryError (python#157344)
865ea88
Replace _PyBytes_Resize() with _PyBytes_ResizeKeepOnError().

Fix truncate(): on error, restore string_size to its previous value.
@vstinner vstinner added the needs backport to 3.15 bugs and security fixes label Oct 12, 2026
@miss-islington-app

miss-islington-app Bot commented Oct 12, 2026

Copy link
Copy Markdown

Thanks @vstinner for the PR 🌮🎉.. I'm working now to backport this PR to: 3.15.
🐍🍒⛏🤖 I'm not a witch! I'm not a witch!

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@bedevere-app

bedevere-app Bot commented Oct 12, 2026

Copy link
Copy Markdown

GH-159275 is a backport of this pull request to the 3.15 branch.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@bedevere-app bedevere-app Bot removed the needs backport to 3.15 bugs and security fixes label Oct 12, 2026
vstinner added a commit that referenced this pull request Oct 13, 2026
@miss-islington @vstinner
[3.15] gh-157242: Do not close io.BytesIO on MemoryError (GH-157344) (#…
3ca92d9
…159275)

gh-157242: Do not close io.BytesIO on MemoryError (GH-157344)

Replace _PyBytes_Resize() with _PyBytes_ResizeKeepOnError().

Fix truncate(): on error, restore string_size to its previous value.
(cherry picked from commit 23eda00)

Co-authored-by: Victor Stinner <[email protected]>
vstinner added a commit that referenced this pull request Oct 16, 2026
@vstinner @maurycy
[3.14] gh-157242: Do not close io.BytesIO on MemoryError (#159529)
2e9acb4
* gh-157242: Add _PyBytes_ResizeKeepOnError() function (#157243)

Add a new internal _PyBytes_ResizeKeepOnError() function similar to
_PyBytes_Resize() but leaves the bytes object unchanged on error.

Co-authored-by: Maurycy Pawłowski-Wieroński <[email protected]>
(cherry picked from commit f5dd52d)

* gh-157242: Fix undefined behavior in _PyBytes_ResizeKeepOnError() (#157352)

Fix undefined behavior in _PyBytes_ResizeKeepOnError(): raise
OverflowError on integer overflow.

(cherry picked from commit 63d4398)

* gh-157242: Do not close io.BytesIO on MemoryError (#157344)

Replace _PyBytes_Resize() with _PyBytes_ResizeKeepOnError().

Fix truncate(): on error, restore string_size to its previous value.

(cherry picked from commit 23eda00)

---------

Co-authored-by: Maurycy Pawłowski-Wieroński <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

No reviews

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

1 participant

@vstinner
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.
You are visitor 01402520 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.