Skip to content

3.0/3.1: Bad bug in range() computation (or possible Integer problem) #50583

Closed

Description

@mfxmfx
mannequin
BPO 6334
Nosy @rhettinger, @mdickinson, @benjaminp, @ezio-melotti
Files
  • issue6334.patch
  • 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/mdickinson'
    closed_at = <Date 2009-06-24.19:24:52.866>
    created_at = <Date 2009-06-24.10:51:41.833>
    labels = ['interpreter-core', 'type-bug', 'release-blocker']
    title = '3.0/3.1: Bad bug in range() computation (or possible Integer problem)'
    updated_at = <Date 2009-06-25.11:31:15.735>
    user = 'https://bugs.python.org/mfxmfx'

    bugs.python.org fields:

    activity = <Date 2009-06-25.11:31:15.735>
    actor = 'mfxmfx'
    assignee = 'mark.dickinson'
    closed = True
    closed_date = <Date 2009-06-24.19:24:52.866>
    closer = 'mark.dickinson'
    components = ['Interpreter Core']
    creation = <Date 2009-06-24.10:51:41.833>
    creator = 'mfxmfx'
    dependencies = []
    files = ['14355']
    hgrepos = []
    issue_num = 6334
    keywords = ['patch']
    message_count = 8.0
    messages = ['89660', '89661', '89665', '89667', '89669', '89670', '89674', '89702']
    nosy_count = 5.0
    nosy_names = ['rhettinger', 'mark.dickinson', 'benjamin.peterson', 'ezio.melotti', 'mfxmfx']
    pr_nums = []
    priority = 'release blocker'
    resolution = 'fixed'
    stage = 'resolved'
    status = 'closed'
    superseder = None
    type = 'behavior'
    url = 'https://bugs.python.org/issue6334'
    versions = ['Python 3.0']

    Activity

    1. mfxmfx commented on Jun 24, 2009

      mfxmfxmannequin
      MannequinAuthor

      Please note that the correct answer is 25, and the last element is missing !

      This bug does not show on 64-bit versions (but 46337**2 is near 2**31).

      ~Markus

      C:\Python31>python
      Python 3.1rc2 (r31rc2:73414, Jun 13 2009, 16:43:15) [MSC v.1500 32 bit
      (Intel)] on win32
      Type "help", "copyright", "credits" or "license" for more information.
      >>> len(list(range(46337**2, 46349**2, 46337)))
      24
      
      C:\Python30>python.exe
      Python 3.0.1 (r301:69561, Feb 13 2009, 20:04:18) [MSC v.1500 32 bit
      (Intel)] on win32
      Type "help", "copyright", "credits" or "license" for more information.
      >>> len(list(range(46337**2, 46349**2, 46337)))
      24
    2. added
      interpreter-core(Objects, Python, Grammar, and Parser dirs)
      type-bugAn unexpected behavior, bug, or error
      on Jun 24, 2009
    3. ezio-melotti commented on Jun 24, 2009

      @ezio-melotti
      Member
      Simpler test case:
      Py2.6:
      >>> n = 46349**2
      >>> n
      2148229801L
      >>> range(n-10, n, 3)
      [2148229791L, 2148229794L, 2148229797L, 2148229800L]
      
      Py3.0:
      >>> n = 46349**2
      >>> n
      2148229801
      >>> list(range(n-10, n, 3))
      [2148229791, 2148229794, 2148229797]
    4. mdickinson commented on Jun 24, 2009

      @mdickinson
      Member

      The length calculation in range_iter in Objects/rangeobject.c is
      incorrect, when using a longrangeiterobject. The length is computed
      as: (stop - start)//step. It should be ceiling((stop-start)/step), or
      1 + (stop - start - 1)//step, provided that start <= stop and step > 0.
      It's not clear to me right now whether there may also be problems with
      negative steps, and with cases where start < stop, etc.

      I think this is serious enough to be considered a release blocker for 3.1;
      I'm working on a patch, and will post it later today.

    5. self-assigned this
      on Jun 24, 2009
    6. mdickinson commented on Jun 24, 2009

      @mdickinson
      Member

      Here's a patch for py3k.

      There are also a whole bunch of tests that are commented
      out in BuiltinTest.test_range in Lib/test/test_builtin.py.
      Some of those tests fail with the current py3k; with this
      patch applied, they all pass except the one involving 'badzero'.

    7. benjaminp commented on Jun 24, 2009

      @benjaminp
      Contributor

      The patch looks good. Please apply.

    8. mdickinson commented on Jun 24, 2009

      @mdickinson
      Member

      Applied to py3k in r73547. Will backport to 3.0.

    9. mdickinson commented on Jun 24, 2009

      @mdickinson
      Member

      Backported to release30-maint branch in r73549.

      Thanks for catching this, Markus!

    10. mfxmfx commented on Jun 25, 2009

      mfxmfxmannequin
      MannequinAuthor

      Many thanks for your quick fix! ~Markus

    11. transferred this issue fromon Apr 10, 2022
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

    Metadata

    Metadata

    Assignees

    Labels

    interpreter-core(Objects, Python, Grammar, and Parser dirs)release-blockertype-bugAn unexpected behavior, bug, or error

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions