Skip to content
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

simple 64-bit fixes in Parser/ dir #32445

Closed
tmick mannequin opened this issue Jun 7, 2000 · 4 comments
Closed

simple 64-bit fixes in Parser/ dir #32445

tmick mannequin opened this issue Jun 7, 2000 · 4 comments
Assignees

Comments

@tmick
Copy link
Mannequin

tmick mannequin commented Jun 7, 2000

BPO 400523
Nosy @gvanrossum
Files
  • None: None
  • Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

    Show more details

    GitHub fields:

    assignee = 'https://github.com/gvanrossum'
    closed_at = <Date 2000-06-07.04:03:40.000>
    created_at = <Date 2000-06-07.03:44:03.000>
    labels = []
    title = 'simple 64-bit fixes in Parser/ dir'
    updated_at = <Date 2000-06-07.04:03:40.000>
    user = 'https://bugs.python.org/tmick'

    bugs.python.org fields:

    activity = <Date 2000-06-07.04:03:40.000>
    actor = 'tmick'
    assignee = 'gvanrossum'
    closed = True
    closed_date = None
    closer = None
    components = ['None']
    creation = <Date 2000-06-07.03:44:03.000>
    creator = 'tmick'
    dependencies = []
    files = ['2453']
    hgrepos = []
    issue_num = 400523
    keywords = ['patch']
    message_count = 4.0
    messages = ['32779', '32780', '32781', '32782']
    nosy_count = 2.0
    nosy_names = ['gvanrossum', 'tmick']
    pr_nums = []
    priority = 'normal'
    resolution = None
    stage = None
    status = 'closed'
    superseder = None
    type = None
    url = 'https://bugs.python.org/issue400523'
    versions = []

    @tmick
    Copy link
    Mannequin Author

    tmick mannequin commented Jun 7, 2000

    No description provided.

    @tmick tmick mannequin closed this as completed Jun 7, 2000
    @tmick tmick mannequin assigned gvanrossum Jun 7, 2000
    @tmick tmick mannequin closed this as completed Jun 7, 2000
    @tmick tmick mannequin assigned gvanrossum Jun 7, 2000
    @tmick
    Copy link
    Mannequin Author

    tmick mannequin commented Jun 7, 2000

    I confirm that, to the best of my knowledge and belief, this
    contribution is free of any claims of third parties under
    copyright, patent or other rights or interests ("claims"). To
    the extent that I have any such claims, I hereby grant to CNRI a
    nonexclusive, irrevocable, royalty-free, worldwide license to
    reproduce, distribute, perform and/or display publicly, prepare
    derivative versions, and otherwise use this contribution as part
    of the Python software and its related documentation, or any
    derivative versions thereof, at no cost to CNRI or its licensed
    users, and to authorize others to do so.

    I acknowledge that CNRI may, at its sole discretion, decide
    whether or not to incorporate this contribution in the Python
    software and its related documentation. I further grant CNRI
    permission to use my name and other identifying information
    provided to CNRI by me for use in connection with the Python
    software and its related documentation.

    @tmick
    Copy link
    Mannequin Author

    tmick mannequin commented Jun 7, 2000

    This patch is one of a set of five (one per python/dist/src/* directory).
    They have been broken up to keep the patches small such that people might
    spend the time to review them. If one single patch would be prefered I can
    provide that.

    This patch makes some simple changes for the benefit of 64-bit platforms (to
    avoid possible overflows where C data types have changed sizes and to
    eliminate unnecessary warnings). Each change fits into one of the following
    categories:

    • Change a local variable declaration from int to size_t where appropriate.
      This is typically done for variables that hold strlen() or sizeof()
      results. On 64-bit platforms sizeof(int) < sizeof(size_t), so using size_t
      avoids a downcast warning (or overflow). The variable is often later
      downcast to an int anyway but it is (IMO) more appropriate to do the
      downcast where the downcast is necessary and not before. 32-bit platforms
      are not affected by this change.
    • Change (int) casts to (size_t) casts within comparisons where appropriate.
      This can avoid an unnecessary possible overflow (in somecases) and a
      warning on 64-bit platforms.
    • Remove pointer downcasts to (long) for comparison (see Objects/object.c).
      This is unreliable on Win64 where sizeof(void*) > sizeof(long).
    • Add a check for int overflow and raise and OverflowError where it cannot be
      proven a priori that int will not overflow. This is usually associated with
      string lengths. While it may seem overkill to have a check to ensure that a
      string does not overflow 2G characters it *is* a potential for silent
      overflow.
    • [Python/thread_nt.c] Use %p instead of %ld printf formatter for debugging
      output to print a pointer. %ld results in data loss on Win64.

    @tmick
    Copy link
    Mannequin Author

    tmick mannequin commented Jun 7, 2000

    [Tim Peters]

    [Trent Mick]
    > ...
    > On 64-bit platforms sizeof(int) < sizeof(size_t), so
    > using size_t avoids a downcast warning (or overflow).

    I suppose we should be more careful about explaining the need for these
    changes. For example, the claim above isn't true, as there are 64-bit
    platforms where sizeof(int) == sizeof(size_t) too (the Cray J90 is one such
    platform Python kind of <wink> runs on today, and indeed even shorts are 64
    bits on that one).

    The problems here are that Python implicitly assumes sizeof(int) ==
    sizeof(size_t), because at the time Python was written size_t didn't exist
    and the long K&R tradition preceding ANSI C was that strlen returned an
    int-sized thing and malloc took one. So they're all in the nature of
    cleaning up after the C committee a decade later <wink>.

    @ezio-melotti ezio-melotti transferred this issue from another repository Apr 9, 2022
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Labels
    None yet
    Projects
    None yet
    Development

    No branches or pull requests

    1 participant