]> granicus.if.org Git - python/commitdiff
Issue #29082: Fixed loading libraries in ctypes by unicode names on Windows.
authorSerhiy Storchaka <storchaka@gmail.com>
Thu, 12 Jan 2017 15:00:32 +0000 (17:00 +0200)
committerSerhiy Storchaka <storchaka@gmail.com>
Thu, 12 Jan 2017 15:00:32 +0000 (17:00 +0200)
Original patch by Chi Hsuan Yen.

Lib/ctypes/test/test_loading.py
Misc/NEWS
Modules/_ctypes/callproc.c

index 81a27e35df92a81aa1424ccc4477660cfddd752f..e64fff7b0351561dcc8baf3572ab4e47a6c91d18 100644 (file)
@@ -3,6 +3,7 @@ import sys, unittest
 import os
 from ctypes.util import find_library
 from ctypes.test import is_resource_enabled
+import test.test_support as support
 
 libc_name = None
 if os.name == "nt":
@@ -27,6 +28,12 @@ class LoaderTest(unittest.TestCase):
         CDLL(os.path.basename(libc_name))
         self.assertRaises(OSError, CDLL, self.unknowndll)
 
+    @support.requires_unicode
+    @unittest.skipUnless(libc_name is not None, 'could not find libc')
+    def test_load_unicode(self):
+        CDLL(unicode(libc_name))
+        self.assertRaises(OSError, CDLL, unicode(self.unknowndll))
+
     @unittest.skipUnless(libc_name is not None, 'could not find libc')
     @unittest.skipUnless(libc_name is not None and
                          os.path.basename(libc_name) == "libc.so.6",
index ce3853c09f4697b37225c519077d63c4c268a1b7..8b5f146d1173f91b42a38cf597f64df115bab34a 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -23,6 +23,9 @@ Extension Modules
 Library
 -------
 
+- Issue #29082: Fixed loading libraries in ctypes by unicode names on Windows.
+  Original patch by Chi Hsuan Yen.
+
 - Issue #29006: Revert change from issue #10513 for making sqlite more liable to
   emit "database table is locked" errors.
 
index 3a12eb603e5e8b3744bb5a82bf29a16cee7dbcab..91233d508c57ffeead61c539af721cda78a03194 100644 (file)
@@ -1281,7 +1281,7 @@ static PyObject *load_library(PyObject *self, PyObject *args)
     PyObject *nameobj;
     PyObject *ignored;
     HMODULE hMod;
-    if (!PyArg_ParseTuple(args, "S|O:LoadLibrary", &nameobj, &ignored))
+    if (!PyArg_ParseTuple(args, "O|O:LoadLibrary", &nameobj, &ignored))
         return NULL;
 #ifdef _UNICODE
     name = alloca((PyString_Size(nameobj) + 1) * sizeof(WCHAR));