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-151292: `_remote_debugging`: Do not corrupt the binary file when hitting `OverflowError` by maurycy · Pull Request #152892 · python/cpython

Conversation

@maurycy

@maurycy maurycy commented Jul 2, 2026 •
edited by bedevere-app Bot
Loading

Uh oh!

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

Copy link
Copy Markdown
Contributor

The #151292 issue focuses on total_samples:u32 but a big problem is that we're leaving the file corrupted on any OverflowError.

So, for example, someone ran recording for an hour on the production - hit some limit and boom, it's unreadable because the header wasn't finalized:

2026-06-11T02:03:58.920689000+0200 maurycy@gimel /Users/maurycy/src/github.com/maurycy/cpython (vmremap 0bdde7f?) % head -c 128 /tmp/overflow.bin | xxd
00000000: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000010: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000020: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000030: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000040: 28b5 2ffd 0058 5c1d 013a d500 1621 8025  (./..X\..:...!.%
00000050: 49d2 0133 3003 331a 3330 3d32 35a9 ccc0  I..30.3.30=25...
00000060: 3aa9 049c b5d6 b69d d296 3122 4488 0c6d  :.........1"D..m
00000070: 0148 0150 014f 0946 32bd b931 318c b6de  .H.P.O.F2..11...

The PR fixes this by catching the exception and stopping the sampler gracefully and letting the export finalize. As a result, the finalizer cannot raise the OverflowError either.

There are many overflow errors:

cpython/Modules/_remote_debugging/binary_io_writer.c

Lines 632 to 636 in f8514dc

if (entry->pending_rle_count > UINT32_MAX - writer->total_samples) {
PyErr_SetString(PyExc_OverflowError,
"too many samples for binary format");
return -1;
}

cpython/Modules/_remote_debugging/binary_io_writer.c

Lines 681 to 685 in f8514dc

if (writer->total_samples == UINT32_MAX) {
PyErr_SetString(PyExc_OverflowError,
"too many samples for binary format");
return -1;
}

cpython/Modules/_remote_debugging/binary_io_writer.c

Lines 377 to 381 in f8514dc

if (writer->string_count >= UINT32_MAX) {
PyErr_SetString(PyExc_OverflowError,
"too many strings for binary format");
return -1;
}

cpython/Modules/_remote_debugging/binary_io_writer.c

Lines 396 to 400 in f8514dc

if ((uintmax_t)str_len > UINT32_MAX) {
PyErr_Format(PyExc_OverflowError,
"string length %zd exceeds binary format maximum %u",
str_len, UINT32_MAX);
return -1;

cpython/Modules/_remote_debugging/binary_io_writer.c

Lines 444 to 448 in f8514dc

if (writer->frame_count >= UINT32_MAX) {
PyErr_SetString(PyExc_OverflowError,
"too many frames for binary format");
return -1;
}

cpython/Modules/_remote_debugging/binary_io_writer.c

Lines 493 to 497 in f8514dc

if (writer->thread_count >= UINT32_MAX) {
PyErr_SetString(PyExc_OverflowError,
"too many threads for binary format");
return NULL;
}

cpython/Modules/_remote_debugging/binary_io_writer.c

Lines 1054 to 1059 in f8514dc

if (interp_id_long > UINT32_MAX) {
PyErr_Format(PyExc_OverflowError,
"interpreter_id %lu exceeds maximum value %lu",
interp_id_long, (unsigned long)UINT32_MAX);
return -1;
}

cpython/Modules/_remote_debugging/binary_io_writer.c

Lines 55 to 63 in f8514dc

if (old_cap > SIZE_MAX / 2) {
PyErr_SetString(PyExc_OverflowError, "Array capacity overflow");
return -1;
}
size_t new_cap = old_cap * 2;
if (new_cap > SIZE_MAX / elem_size1 || new_cap > SIZE_MAX / elem_size2) {
PyErr_SetString(PyExc_OverflowError, "Array allocation size overflow");
return -1;

Given the limits (u32 or u64) isn't easy to write a test for it, so I just settled for the interpreter.

  • Issue: _remote_debugging: binary format only total_samples:u32 #151292

Sorry, something went wrong.

Uh oh!

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

All reactions
@maurycy
maurycy requested a review from pablogsal as a code owner July 2, 2026 13:35
@bedevere-app bedevere-app Bot mentioned this pull request Jul 2, 2026
_remote_debugging: binary format only total_samples:u32 #151292
Closed
@bedevere-app bedevere-app Bot added the awaiting review label Jul 2, 2026
maurycy
maurycy commented Jul 2, 2026
View reviewed changes
Comment thread Lib/profiling/sampling/binary_collector.py
self._writer.write_sample(stack_frames, timestamp_us)
try:
self._writer.write_sample(stack_frames, timestamp_us)
except OverflowError as e:

@maurycy maurycy Jul 2, 2026 •
edited
Loading

Uh oh!

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

Copy link
Copy Markdown
Contributor Author

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.

@pablogsal Truth be told, I'm not 100% sure what's the best layer for handling "finalizable" exceptions like OverflowError.

The promise of "finalizing the file" is in the BinaryWriter:

cpython/Modules/_remote_debugging/module.c

Lines 1857 to 1864 in 3428959

/*[clinic input]
_remote_debugging.BinaryWriter.__exit__
exc_type: object = None
exc_val: object = None
exc_tb: object = None
Exit context manager, finalizing the file.
[clinic start generated code]*/

This is not the case:

cpython/Lib/profiling/sampling/binary_collector.py

Lines 115 to 120 in 3428959

def __exit__(self, exc_type, exc_val, exc_tb):
"""Context manager exit - finalize unless there was an error."""
if exc_type is None:
self._writer.finalize()
else:
self._writer.close()

cpython/Modules/_remote_debugging/module.c

Line 1874 in 3428959

/* Only finalize on normal exit (no exception) */

Perhaps it's something as simple as weakening exc_type == Py_None, instead of doing a round-trip since the module should contain all the knowledge (ie: which exceptions are finalizable for it.)

This issue presents itself there since we've got both the unwinder and the collector in the bloc :

cpython/Lib/profiling/sampling/sample.py

Line 180 in 3428959

except (RuntimeError, UnicodeDecodeError, MemoryError, OSError):

...and the meaning of MemoryError, RuntimeError or OSError in the unwinder is non-fatal, but for the binary collector it might mean non-finalizable exception.

Of course - the very proper way to approach this is to maintain the finalizable state is in the writer itself, instead of relying on the exceptions... but that's way too much for this PR.

Sorry, something went wrong.

Uh oh!

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

All reactions

@pablogsal pablogsal Jul 4, 2026

Copy link
Copy Markdown
Member

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.

I agree that the module should own this knowledge, but I don’t think weakening exc_type == Py_None is the right contract. What we really need to know is whether the writer can still produce a valid file. So the clean version is probably: the writer tracks “still finalizable” internally. Format-limit errors that are detected before changing writer state leave it finalizable; I/O/compression/partial-write failures mark it broken. Then __exit__ and the collector can both ask the writer state instead of reasoning from broad exception classes.

For this PR I’m fine with the collector-level stop, but I’d avoid broadening __exit__ based only on OverflowError.

Sorry, something went wrong.

Uh oh!

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

maurycy reacted with eyes emoji
All reactions
  • 👀 1 reaction

@pablogsal pablogsal Jul 4, 2026

Copy link
Copy Markdown
Member

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.

Actually I think for this PR, I’d prefer we make the C writer expose the real state instead of catching broad OverflowError. Te idea would be to:

  • add a finalizable flag/state to BinaryWriter
  • sample-count overflow sets “finalizable limit hit” before returning the error
  • write/compression/finalize failures mark the writer broken
  • BinaryCollector catches only that finalizable limit error and stops
  • __exit__ finalizes if the writer is still finalizable, otherwise closes

Sorry, something went wrong.

Uh oh!

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

maurycy reacted with eyes emoji
All reactions
  • 👀 1 reaction
@maurycy

maurycy commented Jul 3, 2026

Copy link
Copy Markdown
Contributor Author

There's an obvious question whether we should raise OverflowError in so many places. I will clean this up, also.

All reactions

Sorry, something went wrong.

Uh oh!

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

@maurycy
maurycy force-pushed the graceful-binary-overflow branch from 479868d to f2008ac Compare July 4, 2026 19:32
maurycy added 4 commits July 11, 2026 12:06
@maurycy
the kolektor
d785cbf
@maurycy
test
2e714c5
@maurycy
better test
26109d0
@maurycy
news
361b0d1
@maurycy
maurycy force-pushed the graceful-binary-overflow branch from f2008ac to 361b0d1 Compare July 11, 2026 10:06
pablogsal
pablogsal reviewed Aug 16, 2026
View reviewed changes

@pablogsal pablogsal left a comment

Copy link
Copy Markdown
Member

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.

Some comments

Sorry, something went wrong.

Uh oh!

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

All reactions
Comment thread Lib/test/test_profiling/test_sampling_profiler/test_binary_format.py Outdated
magic, version = struct.unpack_from("=II", header, 0)
self.assertEqual(magic, 0x54414348) # "TACH"
self.assertEqual(version, 1)
(sample_count,) = struct.unpack_from("=I", header, 28)

@pablogsal pablogsal Aug 16, 2026

Copy link
Copy Markdown
Member

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.

total_samples is a u64 in the header (HDR_SIZE_SAMPLES is 8), so "=I" here only reads half of it. On big-endian (the s390x buildbots) this reads the high word and the assert will fail. Can we read 64 bytes and unpack with "=Q"? btw TestBinaryFormatValidation below already has HDR_OFF_SAMPLES = 28, maybe we can reuse it.

Sorry, something went wrong.

Uh oh!

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

All reactions

@maurycy maurycy Aug 16, 2026 •
edited
Loading

Uh oh!

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

Copy link
Copy Markdown
Contributor Author

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.

@pablogsal Definitely. Thank you for catching this. Sorry for not updating the PR immediately after merging #153425.

Changed to =Q and moved HDR_OFF_SAMPLES, and other consts, to BinaryFormatTestBase in 1231afe

I ack there's still #152892 (comment) pending

Sorry, something went wrong.

Uh oh!

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

All reactions
Comment thread Lib/test/test_profiling/test_sampling_profiler/test_binary_format.py Resolved

Uh oh!

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

Comment thread Lib/profiling/sampling/binary_collector.py Resolved

Uh oh!

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

maurycy and others added 4 commits August 16, 2026 15:31
@maurycy
Merge branch 'main' into graceful-binary-overflow
aecf40d
@maurycy
=Q, move const to the base, not self.running
1231afe
@maurycy
Merge branch 'main' into graceful-binary-overflow
5057295
@pablogsal
pythongh-151292: Track binary writer finalization state
9de4476
pablogsal
pablogsal approved these changes Oct 5, 2026
View reviewed changes

@pablogsal pablogsal left a comment

Copy link
Copy Markdown
Member

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.

LGTM!

Sorry, something went wrong.

Uh oh!

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

All reactions
@pablogsal
pablogsal enabled auto-merge (squash) October 5, 2026 00:08
@bedevere-app bedevere-app Bot added awaiting merge and removed awaiting review labels Oct 5, 2026
@pablogsal
pablogsal merged commit f839c06 into python:main Oct 5, 2026
102 of 104 checks passed

Uh oh!

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

@bedevere-app bedevere-app Bot removed the awaiting merge label Oct 5, 2026
This was referenced Oct 5, 2026
gh-158550: _remote_debugging: Do not advance prev_timestamp when write_sample fails #158551
Closed
_remote_debugging: write_sample advances the timestamp before writing the sample #158550
Closed
@maurycy

maurycy commented Oct 5, 2026 •
edited
Loading

Uh oh!

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

Copy link
Copy Markdown
Contributor Author

@pablogsal Do we want to backport? There's #158551 that's much smaller.

All reactions

Sorry, something went wrong.

Uh oh!

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

@maurycy
maurycy deleted the graceful-binary-overflow branch October 5, 2026 05:10
@pablogsal

pablogsal commented Oct 5, 2026

Copy link
Copy Markdown
Member

@pablogsal Do we want to backport? There's #158551 that's much smaller.

Yes we should backport

maurycy reacted with heart emoji
All reactions
  • ❤️ 1 reaction

Sorry, something went wrong.

Uh oh!

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

@pablogsal pablogsal added the needs backport to 3.15 bugs and security fixes label Oct 5, 2026
@miss-islington-app

miss-islington-app Bot commented Oct 5, 2026

Copy link
Copy Markdown

Thanks @maurycy for the PR, and @pablogsal for merging it 🌮🎉.. I'm working now to backport this PR to: 3.15.
🐍🍒⛏🤖

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 5, 2026

Copy link
Copy Markdown

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

maurycy reacted with heart emoji
All reactions
  • ❤️ 1 reaction

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 5, 2026
pablogsal added a commit that referenced this pull request Oct 5, 2026
@miss-islington @maurycy @pablogsal
[3.15] gh-151292: _remote_debugging: Do not corrupt the binary file…
8a7c23f
… when hitting `OverflowError` (GH-152892) (#158830)

gh-151292: `_remote_debugging`: Do not corrupt the binary file when hitting `OverflowError` (GH-152892)

* the kolektor

* test

* better test

* news

* =Q, move const to the base, not self.running

* gh-151292: Track binary writer finalization state

---------
(cherry picked from commit f839c06)

Co-authored-by: Maurycy Pawłowski-Wieroński <[email protected]>
Co-authored-by: Pablo Galindo Salgado <[email protected]>
pablogsal added a commit to pablogsal/cpython that referenced this pull request Oct 5, 2026
@pablogsal
Revert "[3.15] pythongh-151292: _remote_debugging: Do not corrupt t…
53776ad
…he binary file when hitting `OverflowError` (pythonGH-152892) (python#158830)"

This reverts commit 8a7c23f.
pablogsal added a commit that referenced this pull request Oct 11, 2026
@pablogsal @miss-islington
@maurycy @claude @vstinner @StanFromIreland @tonghuaroot @hetaozdh @edvilme @deadlovelll
[3.15] Restore deferred backports for 3.15.1, including GH-158874 (#1…
4ceb3fa
…58882)

* [3.15] gh-153364: Make frame, coroutine, and task-waiter chain walks iterative and bounded (GH-153365) (#158813)

gh-153364: Make frame, coroutine, and task-waiter chain walks iterative and bounded (GH-153365)

* let me declare single limit

* use our new limit in process_frame_chain()

* add it in parse_async_frame_chain()

* parse_coro_chain()

* NEWS

* async in the message?

* test

* no race

* process_task_awaited_by

* process_task_awaited_by limit test

* NEWS

* MAX_TASK_WAITER_CHAIN_DEPTH

* TASK_WAITER_CHAIN_DEPTH in test

* TASK_WAITER_CHAIN_DEPTH 256

* prevent the drift with the comment

* better naming, better style

* MAX_TASK_WAITER_CHAIN_DEPTH comment

* task-waiter iterative bfs walk

* iterative coro-walk

* nicer news

* 1 << 14

* comment

* unused read_Py_ssize_t

* fix tombstones

* simplify

* correct msg

* better test

* news for tombstones

* left-over from when testing buggy version

* redundant new line
(cherry picked from commit e0861c6)

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

* [3.15] gh-155811: Add a seqcount to `gc_stats` to prevent torn reads (GH-155828) (#158829)

* update_seq

* no need for XCHGL, MOVL is enough?

* gh-155811: Retry an inconsistent GC snapshot once

---------
(cherry picked from commit 5fecd44)

Co-authored-by: Pablo Galindo Salgado <[email protected]>
Co-authored-by: Claude Fable 5.1 <[email protected]>
(cherry picked from commit 0281240)

* [3.15] gh-151292: `_remote_debugging`: Do not corrupt the binary file when hitting `OverflowError` (GH-152892) (#158830)

gh-151292: `_remote_debugging`: Do not corrupt the binary file when hitting `OverflowError` (GH-152892)

* the kolektor

* test

* better test

* news

* =Q, move const to the base, not self.running

* gh-151292: Track binary writer finalization state

---------
(cherry picked from commit f839c06)

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

* [3.15] gh-158583: Fix uninitialized memory read in bytes.fromhex() (GH-158584) (#158691)

gh-158583: Fix uninitialized memory read in bytes.fromhex() (GH-158584)
(cherry picked from commit 9d22a53)

Co-authored-by: Victor Stinner <[email protected]>
(cherry picked from commit 4f7af46)

* [3.15] gh-154194: Degrade frames in Tachyon instead of failing the sample (GH-154195) (#158831)

* gh-154194: Degrade frames in Tachyon instead of failing the sample (#154195)

* degrade gracefully

* news

* better NEWS wording

* do not raise on MAX_REMOTE_STR_READ

* bye MAX_REMOTE_STR_READ

* fix -m asyncio ps|pstree

* test truncation and linetable sentinel

* simpler

* simpler

* redundant now

* respect #157790 in the news

---------

Co-authored-by: Pablo Galindo Salgado <[email protected]>
(cherry picked from commit 7d25916)

* Preserve the stable ABI when creating fallback frame names

---------

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

* [3.15] Add MSan to CI (GH-158625) (#158832)

Run a job that the test suite with MSan to the CI (#158625)

* Run the test suite with MSan in CI

* Additional fixes

* Add `_Py_MSAN_UNPOISON_STRING`

* Apply Victor's suggestions

* Apply Victor's suggestions

---------

(cherry picked from commit b93fb19)

Co-authored-by: Stan Ulbrych <[email protected]>
Co-authored-by: Victor Stinner <[email protected]>
(cherry picked from commit 1bc78de)

* [3.15] gh-156810: Write the profiler's collapsed-stack export as UTF-8 (GH-156811) (#156814)

gh-156810: Write the profiler's collapsed-stack export as UTF-8 (GH-156811)
(cherry picked from commit c3706f4)

Co-authored-by: tonghuaroot (童话) <[email protected]>
(cherry picked from commit fce28da)

* [3.15] gh-158552: Wait for Windows threads to suspend before blocking sampling (GH-158802) (#158845)

gh-158552: Wait for Windows threads to suspend before blocking sampling (GH-158802)

* gh-158552: Wait for Windows threads to suspend before blocking sampling

* Use a named Windows thread enumeration status constant
(cherry picked from commit 1643525)

Co-authored-by: Pablo Galindo Salgado <[email protected]>
(cherry picked from commit 31288da)

* [3.15] gh-152721: Fix quadratic RLE replay time in the profiling binary reader (GH-152722) (#158850)

Backport of GH-152722.

Co-authored-by: tonghuaroot <[email protected]>
(cherry picked from commit ebaca2a)

* [3.15] gh-156545: Fix flamegraph export RecursionError on deeply recursive programs (GH-156546) (#158851)

Backport of GH-156546.

Co-authored-by: tonghuaroot (童话) <[email protected]>
(cherry picked from commit 0ac7217)

* [3.15] gh-158540: Add the profiled script's directory to sys.path (GH-158548) (#158844)

gh-158540: Add the profiled script's directory to sys.path (GH-158548)

* gh-158540: Add the profiled script's directory to sys.path

When a script is profiled with ``python -m profiling.sampling run
script.py`` from another directory, the script cannot import modules
placed next to it, because ``_sync_coordinator._execute_script()``
executes it with the working directory (added by
``_setup_environment()`` for the module case) as ``sys.path[0]``
instead of the script's own directory.

Make the script's directory importable in ``_execute_script()``,
matching the behavior of ``python script.py``.

Add a regression test that runs the coordinator on a script importing
a sibling module.

* Update _sync_coordinator.py Comment simplified

* gh-158540: Resolve symlinks when adding the script directory to sys.path

``python script.py`` resolves symlinks when computing ``sys.path[0]``, so
a script reached through a symlink (``link.py -> sub/where.py``) imports
modules from the real script's directory.  Apply ``os.path.realpath()``
before taking the directory name, and make sure the result is placed at
the front of ``sys.path`` even if it was already listed.

Add a regression test for a symlinked script.

---------
(cherry picked from commit 3f02aab)

Co-authored-by: he_tao <[email protected]>
Co-authored-by: Eduardo Villalpando Mello <[email protected]>
(cherry picked from commit f52d831)

* [3.15] gh-153838: Skip non-regular source files in the heatmap exporter (GH-153839) (#158853)

Backport of GH-153839.

Co-authored-by: tonghuaroot <[email protected]>
(cherry picked from commit 48998df)

* [3.15] gh-158539: Fix exception mode missing handlers in generators/coroutines (GH-158581) (#158852)

* [3.15] gh-158539: Fix exception mode missing handlers in generators/coroutines (GH-158581)

Backport of GH-158581.

Co-authored-by: LucasZhou <[email protected]>

* [3.15] gh-158539: Use portable static assertion messages

* [3.15] gh-158539: Keep layout assertions with debug-offset validation

* [3.15] gh-158539: Use the platform guard for in-process inspection tests

---------

Co-authored-by: LucasZhou <[email protected]>
(cherry picked from commit d625ecb)

* [3.15] gh-158522: Fix truncated stack for a task whose coroutine recurses (GH-158526) (#158870)

Co-authored-by: Timofei Ivankov <[email protected]>
(cherry picked from commit a904b39)

* gh-156545, gh-158539: Fix deep flamegraph export on small C stacks and macOS runtime lookup (#158874)

(cherry picked from commit 114de19)

Include the C-stack test helper from main, introduced by
ce5ae29, which the regression test
requires but 3.15 does not yet provide.

---------

Co-authored-by: Miss Islington (bot) <[email protected]>
Co-authored-by: Maurycy Pawłowski-Wieroński <[email protected]>
Co-authored-by: Claude Fable 5.1 <[email protected]>
Co-authored-by: Victor Stinner <[email protected]>
Co-authored-by: Stan Ulbrych <[email protected]>
Co-authored-by: Victor Stinner <[email protected]>
Co-authored-by: tonghuaroot (童话) <[email protected]>
Co-authored-by: he_tao <[email protected]>
Co-authored-by: Eduardo Villalpando Mello <[email protected]>
Co-authored-by: LucasZhou <[email protected]>
Co-authored-by: Timofei Ivankov <[email protected]>
@AlexWaygood AlexWaygood mentioned this pull request Oct 22, 2026
Fix stdlib stubtest on Python 3.14.9 and 3.15.1 python/typeshed#16596
Merged
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@pablogsal pablogsal pablogsal approved these changes

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.

2 participants

@maurycy @pablogsal
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 01402503 — 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.