-
-
Notifications
You must be signed in to change notification settings - Fork 30.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
dict() resize failure #102701
Labels
type-bug
An unexpected behavior, bug, or error
Comments
slightly smaller reproducer: d = dict.fromkeys(range(357913941))
# dies with this line
d[357913942]=None |
Thank you for simple reproducer. |
methane
added a commit
to methane/cpython
that referenced
this issue
Mar 16, 2023
This was referenced Mar 16, 2023
methane
added a commit
that referenced
this issue
Mar 17, 2023
miss-islington
pushed a commit
to miss-islington/cpython
that referenced
this issue
Mar 17, 2023
(cherry picked from commit 65fb7c4) Co-authored-by: Inada Naoki <[email protected]>
miss-islington
added a commit
that referenced
this issue
Mar 17, 2023
(cherry picked from commit 65fb7c4) Co-authored-by: Inada Naoki <[email protected]>
carljm
added a commit
to carljm/cpython
that referenced
this issue
Mar 17, 2023
* main: (34 commits) pythongh-102701: Fix overflow in dictobject.c (pythonGH-102750) pythonGH-78530: add support for generators in `asyncio.wait` (python#102761) Increase stack reserve size for Windows debug builds to avoid test crashes (pythonGH-102764) pythongh-102755: Add PyErr_DisplayException(exc) (python#102756) Fix outdated note about 'int' rounding or truncating (python#102736) pythongh-102192: Replace PyErr_Fetch/Restore etc by more efficient alternatives (python#102760) pythongh-99726: Improves correctness of stat results for Windows, and uses faster API when available (pythonGH-102149) pythongh-102192: remove redundant exception fields from ssl module socket (python#102466) pythongh-102192: Replace PyErr_Fetch/Restore etc by more efficient alternatives (python#102743) pythongh-102737: Un-ignore ceval.c in the CI globals check (pythongh-102745) pythonGH-102748: remove legacy support for generator based coroutines from `asyncio.iscoroutine` (python#102749) pythongh-102721: Improve coverage of `_collections_abc._CallableGenericAlias` (python#102722) pythonGH-102653: Make recipe docstring show the correct distribution (python#102742) Add comments to `{typing,_collections_abc}._type_repr` about each other (python#102752) pythongh-102594: PyErr_SetObject adds note to exception raised on normalization error (python#102675) pythongh-94440: Fix issue of ProcessPoolExecutor shutdown hanging (python#94468) pythonGH-100112: avoid using iterable coroutines in asyncio internally (python#100128) pythongh-102690: Use Edge as fallback in webbrowser instead of IE (python#102691) pythongh-102660: Fix Refleaks in import.c (python#102744) pythongh-102738: remove from cases generator the code related to register instructions (python#102739) ...
Thanks for the fix and the great bug report! |
Fidget-Spinner
pushed a commit
to Fidget-Spinner/cpython
that referenced
this issue
Mar 27, 2023
warsaw
pushed a commit
to warsaw/cpython
that referenced
this issue
Apr 11, 2023
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Bug report
When running under python 3.11.1, 3.11.2 and 3.12.a6, the dict() data structure fails to resize past 357913941 elements. This worked last (in what I have available) under python 3.10.8 and I can find no documentation that limits the size of a dict to a finite size. The system has >512G of memory and this example easily fits in that memory.
My reproducer is mem.py:
output:
357913941
As an aside (2^31)/3/2 = 357913941. It looks to me like there is an int32 in the code that's trying to represent the size of the dict. (GROWTH_FACTOR=3) I'm not sure where the extra factor of 2 is coming from yet.
Simplest reproducer is:
output:
d[a]=1
~^^^
MemoryError
exit code=1
Your environment
I have tested on 3.10.8 (no failure) 3.11.1, 3.11.2, 3.12.a6 (fail)
This test must be run on a 64bit system with >40G of RAM free. (I have not tested on a system with less memory but I assume an Out of Memory error from the OS will stop the python program before the dict() failure>)
To reproduce I built the python with:
In pyconfig.h
SIZEOF_VOID_P = 8
SIZEOF_SIZE_T = 8
OS:
Red Hat Enterprise Linux release 8.7 (Ootpa)
cat /proc/meminfo
MemTotal: 263686408 kB
MemFree: 150322584 kB
MemAvailable: 221228188 kB
...
Fails with both Intel and AMD servers.
Linked PRs
The text was updated successfully, but these errors were encountered: