mirror of
https://github.com/python/cpython.git
synced 2025-08-03 08:34:29 +00:00
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().
This commit is contained in:
parent
152f0b8bee
commit
55939b1708
3 changed files with 21 additions and 8 deletions
12
PC/_msi.c
12
PC/_msi.c
|
@ -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);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue