This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: fix mmap module (broken seek, 64-bit stuff, overflows)
Type: Stage:
Components: None Versions:
process
Status: closed Resolution:
Dependencies: Superseder:
Assigned To: akuchling Nosy List: akuchling, gvanrossum, tim.peters, tmick
Priority: normal Keywords: patch

Created on 2000-06-07 03:08 by tmick, last changed 2022-04-10 16:02 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
None tmick, 2000-06-07 03:08 None
Messages (7)
msg32743 - (view) Author: Trent Mick (tmick) (Python triager) Date: 2000-06-07 03:08
 
msg32744 - (view) Author: Guido van Rossum (gvanrossum) * (Python committer) Date: 2000-06-27 15:04
Andrew, I'm not sure if you can review patches for Windows, but since it's your module, I'd like you to have a look at this first. Tim should get it next.
msg32745 - (view) Author: A.M. Kuchling (akuchling) * (Python committer) Date: 2000-06-27 15:12
The patches look OK, particularly the fixing of the seek() 
method.  I'm not sure why various casts are changed from (long) to (int), and wonder if those casts could simply be removed, but that's not a problem.
msg32746 - (view) Author: Tim Peters (tim.peters) * (Python committer) Date: 2000-06-28 07:03
Best I can tell, this has already been checked in!
So marking Closed, and assigning back to AMK.  Andrew, scream at me if I done wrong here.
msg32747 - (view) Author: Trent Mick (tmick) (Python triager) Date: 2000-06-07 03:09
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.
msg32748 - (view) Author: Trent Mick (tmick) (Python triager) Date: 2000-06-07 03:14
This patch fixes some issues in the mmap module. The changes are:
- The use of HFILE for Win32 is no longer appropriate for Win32/64,
  all of the associated system calls use a pointer length integer, hence HFILE
  is replaced with INT_PTR (a Windows world typedef for this)

- Do proper bounds checking limiting the length of a mmap'd file to [0,
  INT_MAX] (see _GetMapSize()). INT_MAX is chosen because this is the current
  restriction on the length of Python objects and a mmap'd file larger than
  this cannot be used effectively anyway. For instance a mmap'd file longer
  than INT_MAX cannot be sliced beyond INT_MAX, or indexed, etc. Until the
  limit on the size of Python objects increases then there is little use in
  having larger mmap'd files.

- The mmap_seek is fairly significantly broken (seeking from the current
  position or from the end are both borken, IIRC). This patch fixes that,
  checks for possible out of range seek values, and extends test_mmap.py to
  test this stuff.

- Use a C int for variables associated with the length field of Python
  objects, this is what it is and the distinction matters on Linux64, for
  example.

- Use safe number literals. (some unsigned)0xFFFFFFFF -> (some unsigned)-1
  The former does not give the intended result iff 'some unsigned' is >
  32-bits.
msg32749 - (view) Author: Trent Mick (tmick) (Python triager) Date: 2000-06-27 15:52
Some of the casts were changed from (long) to (int) because 'int' was the size being returned (for example in the length value to PyString_FromStringAndSize, or the mmap find method is specified to return an int and not a long, note that sizeof(int) != sizeof(long) on Linux64.

Note that this has already been checked in:
http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/python/dist/src/Modules/mmapmodule.c.diff?cvsroot=python&r1=2.12&r2=2.13&f=H

...and in the actual checkin the first cast to (int) was dropped anyway :). Maybe you did that yourself, Andrew.
History
Date User Action Args
2022-04-10 16:02:00adminsetgithub: 32438
2000-06-07 03:08:54tmickcreate