python/cpython

Commits on Oct 27, 2020

  1. bpo-42157: Rename unicodedata.ucnhash_CAPI (GH-22994)

    Removed the unicodedata.ucnhash_CAPI attribute which was an internal
    PyCapsule object. The related private _PyUnicode_Name_CAPI structure
    was moved to the internal C API.
    
    Rename unicodedata.ucnhash_CAPI as unicodedata._ucnhash_CAPI.
  2. bpo-30681: Support invalid date format or value in email Date header (G…

    …H-22090)
    
    I am re-submitting an older PR which was abandoned but is still relevant, #10783 by @timb07.
    
    The issue being solved () is still relevant. The original PR #10783 was closed as
    the final request changes were not applied and since abandoned.
    
    In this new PR I have re-used the original patch plus applied both comments from the review, by @maxking and @pganssle.
    
    
    For reference, here is the original PR description:
    In email.utils.parsedate_to_datetime(), a failure to parse the date, or invalid date components (such as hour outside 0..23) raises an exception. Document this behaviour, and add tests to test_email/test_utils.py to confirm this behaviour.
    
    In email.headerregistry.DateHeader.parse(), check when parsedate_to_datetime() raises an exception and add a new defect InvalidDateDefect; preserve the invalid value as the string value of the header, but set the datetime attribute to None.
    
    Add tests to test_email/test_headerregistry.py to confirm this behaviour; also added test to test_email/test_inversion.py to confirm emails with such defective date headers round trip successfully.
    
    This pull request incorporates feedback gratefully received from @bitdancer, @brettcannon, @Mariatta and @warsaw, and replaces the earlier PR #2254.
    
    Automerge-Triggered-By: GH:warsaw

Commits on Oct 26, 2020

  1. bpo-42123: Run the parser two times and only enable invalid rules on …

    …the second run (GH-22111)
    
    * Implement running the parser a second time for the errors messages
    
    The first parser run is only responsible for detecting whether
    there is a `SyntaxError` or not. If there isn't the AST gets returned.
    Otherwise, the parser is run a second time with all the `invalid_*`
    rules enabled so that all the customized error messages get produced.
  2. bpo-1635741: _PyUnicode_Name_CAPI moves to internal C API (GH-22713)

    The private _PyUnicode_Name_CAPI structure of the PyCapsule API
    unicodedata.ucnhash_CAPI moves to the internal C API. Moreover, the
    structure gets a new state member which must be passed to the
    getcode() and getname() functions.
    
    * Move Include/ucnhash.h to Include/internal/pycore_ucnhash.h
    * unicodedata module is now built with Py_BUILD_CORE_MODULE.
    * unicodedata: move hashAPI variable into unicodedata_module_state.
  3. bpo-42006: Stop using PyDict_GetItem, PyDict_GetItemString and _PyDic…

    …t_GetItemId. (GH-22648)
    
    These functions are considered not safe because they suppress all internal errors
    and can return wrong result.  PyDict_GetItemString and _PyDict_GetItemId can
    also silence current exception in rare cases.
    
    Remove no longer used _PyDict_GetItemId.
    Add _PyDict_ContainsId and rename _PyDict_Contains into
    _PyDict_Contains_KnownHash.
  4. bpo-42146: Fix memory leak in subprocess.Popen() in case of uid/gid o…

    …verflow (GH-22966)
    
    Fix memory leak in subprocess.Popen() in case of uid/gid overflow
    
    Also add a test that would catch this leak with `--huntrleaks`.
    
    Alas, the test for `extra_groups` also exposes an inconsistency
    in our error reporting: we use a custom ValueError for `extra_groups`,
    but propagate OverflowError for `user` and `group`.

Commits on Oct 25, 2020

Commits on Oct 24, 2020