Skip to content

Creation of an internal decimal context for _pylong has side effects on decimal #123284

Description

@picnixz

Bug report

Bug description:

The _decimal module was recently fixed in #123243. I also found that _pylong leaks globals due to the creation of a global context to use as a local context:

_unbounded_dec_context = decimal.getcontext().copy()
_unbounded_dec_context.prec = decimal.MAX_PREC
_unbounded_dec_context.Emax = decimal.MAX_EMAX
_unbounded_dec_context.Emin = decimal.MIN_EMIN
_unbounded_dec_context.traps[decimal.Inexact] = 1 # sanity check

This context is used as with decimal.localcontext(_unbounded_dec_context). On the other hand decimal.getcontext().copy() returns a copy of the decimal context for the current thread (or set it to decimal.DefaultContext if none exists). Instead of setting it like that, I suggest that we construct a decimal.Context() object directly in _pylong instead of possibly polluting the decimal module (whether it's the C or the python implementation).

CPython versions tested on:

CPython main branch

Operating systems tested on:

Linux

Linked PRs

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

stdlibStandard Library Python modules in the Lib/ directorytype-bugAn unexpected behavior, bug, or error

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions