]> granicus.if.org Git - python/commitdiff
Merged revisions 65681-65682,65684 via svnmerge from
authorThomas Heller <theller@ctypes.org>
Tue, 19 Aug 2008 06:38:12 +0000 (06:38 +0000)
committerThomas Heller <theller@ctypes.org>
Tue, 19 Aug 2008 06:38:12 +0000 (06:38 +0000)
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r65681 | thomas.heller | 2008-08-14 21:10:48 +0200 (Do, 14 Aug 2008) | 4 lines

  issue #3554: ctypes.string_at and ctypes.wstring_at must use the
  pythonapi calling convention so that the GIL is held and error return
  values are checked.
........
  r65682 | thomas.heller | 2008-08-14 22:04:38 +0200 (Do, 14 Aug 2008) | 2 lines

  Try to fix the test on 64-bit platforms.
........
  r65684 | thomas.heller | 2008-08-14 22:19:18 +0200 (Do, 14 Aug 2008) | 2 lines

  Disable the test until I have one that works.
........

Lib/ctypes/__init__.py
Lib/ctypes/test/test_memfunctions.py
Misc/NEWS

index d65ea7b2c28860bdd1a6bd9fd95ad78af5925566..1283f28a6d0e22b88fdfa21e1ea80de3b5623d84 100644 (file)
@@ -485,7 +485,7 @@ _cast = PYFUNCTYPE(py_object, c_void_p, py_object, py_object)(_cast_addr)
 def cast(obj, typ):
     return _cast(obj, obj, typ)
 
-_string_at = CFUNCTYPE(py_object, c_void_p, c_int)(_string_at_addr)
+_string_at = PYFUNCTYPE(py_object, c_void_p, c_int)(_string_at_addr)
 def string_at(ptr, size=-1):
     """string_at(addr[, size]) -> string
 
@@ -497,7 +497,7 @@ try:
 except ImportError:
     pass
 else:
-    _wstring_at = CFUNCTYPE(py_object, c_void_p, c_int)(_wstring_at_addr)
+    _wstring_at = PYFUNCTYPE(py_object, c_void_p, c_int)(_wstring_at_addr)
     def wstring_at(ptr, size=-1):
         """wstring_at(addr[, size]) -> string
 
index 6a6411e9eb1637f5340ddcb99506e3ef50f6d83c..4bee77fe3af2017365a0a05db643acb21a80ed0d 100644 (file)
@@ -3,6 +3,16 @@ import unittest
 from ctypes import *
 
 class MemFunctionsTest(unittest.TestCase):
+##    def test_overflow(self):
+##        # string_at and wstring_at must use the Python calling
+##        # convention (which acquires the GIL and checks the Python
+##        # error flag).  Provoke an error and catch it; see also issue
+##        # #3554: <http://bugs.python.org/issue3554>
+##        self.assertRaises((OverflowError, MemoryError, SystemError),
+##                          lambda: wstring_at(u"foo", sys.maxint - 1))
+##        self.assertRaises((OverflowError, MemoryError, SystemError),
+##                          lambda: string_at("foo", sys.maxint - 1))
+
     def test_memmove(self):
         # large buffers apparently increase the chance that the memory
         # is allocated in high address space.
index 5ec45875cf107b267b452d59210fb82052a7c6a6..38237722025ae60e8ccd467319a70c2387c122cd 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -103,6 +103,12 @@ Library
 
 - Removed the sunaudio module. Use sunau instead.
 
+- Issue #3554: ctypes.string_at and ctypes.wstring_at did call Python
+  api functions without holding the GIL, which could lead to a fatal
+  error when they failed.
+
+- Issue #799428: Fix Tkinter.Misc._nametowidget to unwrap Tcl command objects.
+
 - Removed "ast" function aliases from the parser module.
 
 - Issue #3313: Fixed a crash when a failed dlopen() call does not set