Skip to content

ctypes: Deprecate SetPointerType() and ARRAY() functions #105733

Description

@vstinner

The ctypes module has two undocumented functions: SetPointerType() and ARRAY(). These functions are marked as XXX Deprecated, but only in comments.

I propose to deprecate ctypes.SetPointerType() and ctypes.ARRAY() by emitting a DeprecationWarning warning.

These functions are not documented and not used in Python, but there are tested.

Linked PRs

Activity

  1. added 3 commits that reference this issue on Jun 13, 2023
  2. added 2 commits that reference this issue on Jul 9, 2023
  3. encukou commented on Jul 25, 2024

    @encukou
    Member

    I disagree with the proposal. (And with taking one hour between a proposal and merge.)

    The plan to remove ARRAY in 3.15 goes against PEP 387:

    If the expected maintenance overhead and security risk of the deprecated behavior is small (e.g. an old function is reimplemented in terms of a new, more general one), it can stay indefinitely (or until the situation changes).

    (I'll note that this clarification got added a few days after this proposal, though.)

    The function is two lines long, and has tests. It has no maintenance overhead or additional security risk.
    It's also used in third-party projects (some of which test with alphas/betas and have now switched to multiplication).

    I propose to restore it and soft-deprecate instead. Would you be OK with that, @vstinner?


    As for SetPointerType, yeah, no one should be using that, and hardly anyone is.

  4. encukou commented on Jul 25, 2024

    @encukou
    Member

    (anecdotally: at EuroPython I've seen a person use ARRAY in the REPL. This is not worth them re-learning how to make array types.)

  5. vstinner commented on Jul 27, 2024

    @vstinner
    MemberAuthor

    I didn't see any complain about the deprecation apart from you. I don't see the benefits of keeping two ways to create an array. PEP 20 says:

    There should be one-- and preferably only one --obvious way to do it.

    A code search on PyPI top 7,500 projects only finds 2 lines:

    PYPI-2024-03-16/astroid-3.1.0.tar.gz: astroid-3.1.0/tests/brain/test_ctypes.py: ctypes.ARRAY(3, 2)
    PYPI-2024-03-16/pwntools-4.12.0.tar.gz: pwntools-4.12.0/pwnlib/adb/bootloader.py: imgarray = ctypes.ARRAY(img_info, self.num_images)
    

    The first one is stupid, ctypes.ARRAY(3, 2) returns 6... The first parameter must be a ctypes type, not an integer.

  6. picnixz commented on Jul 28, 2024

    @picnixz
    Member

    There are a bit more usages on GitHub: https://github.com/search?q=%2F%28%3F-i%29ctypes%5C.ARRAY%5C%28%2F&type=code (but some of them are CPython but I found a bit more normal usages that are not 7 years old)

  7. encukou commented on Jul 29, 2024

    @encukou
    Member

    So it's PEP 20 against PEP 387, or your opinion against mine :(

  8. JelleZijlstra commented on Jul 29, 2024

    @JelleZijlstra
    Member

    I would favor keeping ARRAY, since there is little maintenance cost involved and removing it would break at least some users.

  9. picnixz commented on Jul 29, 2024

    @picnixz
    Member

    I personally like ARRAY because it tells you that are you are creating an array (visually speaking)

  10. vstinner commented on Jul 29, 2024

    @vstinner
    MemberAuthor

    There are a bit more usages on GitHub: https://github.com/search?q=%2F%28%3F-i%29ctypes%5C.ARRAY%5C%28%2F&type=code

    Oh right. Let's keep ARRAY(). But I would suggest to simply remove the deprecation in this case, no need to soft deprecate it if we keep it.

  11. encukou commented on Jul 29, 2024

    @encukou
    Member

    I'm for soft deprectation, because it tells you which of the two ways to do it is the obvious one :)

  12. added a commit that references this issue on Jul 30, 2024
  13. added a commit that references this issue on Jul 30, 2024
  14. added a commit that references this issue on Jul 30, 2024
  15. picnixz commented on Jul 30, 2024

    @picnixz
    Member

    Closing since completed in #122281.

  16. added a commit that references this issue on Aug 22, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

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

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions