diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2020-06-25 09:12:58 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-25 09:12:58 (GMT) |
commit | 0ef6a3fc0eb9337656ef843bbcde09c15267173d (patch) | |
tree | d5e40d0340e78797c5870a4d251631c431df602a /PC | |
parent | c1634ac834729eb46caf98efcb7e33b8698d54a7 (diff) | |
download | cpython-0ef6a3fc0eb9337656ef843bbcde09c15267173d.zip cpython-0ef6a3fc0eb9337656ef843bbcde09c15267173d.tar.gz cpython-0ef6a3fc0eb9337656ef843bbcde09c15267173d.tar.bz2 |
bpo-41074: Fix support of non-ASCII names and SQL in msilib. (GH-21126)
* Fix support of non-ASCII names in functions OpenDatabase()
and init_database().
* Fix support of non-ASCII SQL in method Database.OpenView().
(cherry picked from commit 55939b1708d6fc0d36d2be11ccdc6bf207e1bd41)
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Diffstat (limited to 'PC')
-rw-r--r-- | PC/_msi.c | 12 |
1 files changed, 6 insertions, 6 deletions
@@ -872,14 +872,14 @@ static PyObject* msidb_openview(msiobj *msidb, PyObject *args) { int status; - char *sql; + const wchar_t *sql; MSIHANDLE hView; msiobj *result; - if (!PyArg_ParseTuple(args, "s:OpenView", &sql)) + if (!PyArg_ParseTuple(args, "u:OpenView", &sql)) return NULL; - if ((status = MsiDatabaseOpenView(msidb->h, sql, &hView)) != ERROR_SUCCESS) + if ((status = MsiDatabaseOpenViewW(msidb->h, sql, &hView)) != ERROR_SUCCESS) return msierror(status); result = PyObject_New(struct msiobj, &msiview_Type); @@ -998,18 +998,18 @@ static PyTypeObject msidb_Type = { static PyObject* msiopendb(PyObject *obj, PyObject *args) { int status; - char *path; + const wchar_t *path; int persist; MSIHANDLE h; msiobj *result; - if (!PyArg_ParseTuple(args, "si:MSIOpenDatabase", &path, &persist)) + if (!PyArg_ParseTuple(args, "ui:MSIOpenDatabase", &path, &persist)) return NULL; /* We need to validate that persist is a valid MSIDBOPEN_* value. Otherwise, MsiOpenDatabase may treat the value as a pointer, leading to unexpected behavior. */ if (Py_INVALID_PERSIST(persist)) return msierror(ERROR_INVALID_PARAMETER); - status = MsiOpenDatabase(path, (LPCSTR)(SIZE_T)persist, &h); + status = MsiOpenDatabaseW(path, (LPCWSTR)(SIZE_T)persist, &h); if (status != ERROR_SUCCESS) return msierror(status); |