Skip to content

Commit

Permalink
Merge pull request #5048 from tuffnatty/fix/scriptingpython-nuls
Browse files Browse the repository at this point in the history
ScriptingPython: keep NULs in Python strings unchanged
  • Loading branch information
pawelsalawa authored Aug 19, 2024
2 parents 4632be5 + ce192ea commit 7221565
Showing 1 changed file with 22 additions and 6 deletions.
28 changes: 22 additions & 6 deletions Plugins/ScriptingPython/scriptingpython.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,9 @@ QString ScriptingPython::extractError()
return QString();

PyObject* strErr = PyObject_Repr(value);
QString err = QString::fromUtf8(PyUnicode_AsUTF8(strErr));
Py_ssize_t size;
const char *buf = PyUnicode_AsUTF8AndSize(strErr, &size);
QString err = QString::fromUtf8(buf, size);
PyErr_Clear();

Py_XDECREF(type);
Expand Down Expand Up @@ -305,7 +307,11 @@ QVariant ScriptingPython::pythonObjToVariant(PyObject* obj)
return QVariant();

if (PyUnicode_Check(obj))
return QString::fromUtf8(PyUnicode_AsUTF8(obj));
{
Py_ssize_t size;
const char *buf = PyUnicode_AsUTF8AndSize(obj, &size);
return QString::fromUtf8(buf, size);
}

if (PyLong_Check(obj))
return PyLong_AsLongLong(obj);
Expand Down Expand Up @@ -390,7 +396,9 @@ QVariant ScriptingPython::pythonObjToVariant(PyObject* obj)
}

PyObject* strObj = PyObject_Repr(obj);
QString result = QString::fromUtf8(PyUnicode_AsUTF8(strObj));
Py_ssize_t size;
const char *buf = PyUnicode_AsUTF8AndSize(strObj, &size);
QString result = QString::fromUtf8(buf, size);
Py_DECREF(strObj);
return result;
}
Expand All @@ -401,7 +409,9 @@ QString ScriptingPython::pythonObjToString(PyObject* obj)
if (!strObj)
return QString();

QString result = QString::fromUtf8(PyUnicode_AsUTF8(strObj));
Py_ssize_t size;
const char *buf = PyUnicode_AsUTF8AndSize(strObj, &size);
QString result = QString::fromUtf8(buf, size);
Py_DECREF(strObj);
return result;
}
Expand Down Expand Up @@ -569,11 +579,17 @@ SqlQueryPtr ScriptingPython::dbCommonEval(PyObject* sqlArg, const char* fnName)
SQLITE_ERROR);
}

sql = QString::fromUtf8(PyUnicode_AsUTF8(strObj));
Py_ssize_t size;
const char *buf = PyUnicode_AsUTF8AndSize(strObj, &size);
sql = QString::fromUtf8(buf, size);
Py_DECREF(strObj);
}
else
sql = QString::fromUtf8(PyUnicode_AsUTF8(sqlArg));
{
Py_ssize_t size;
const char *buf = PyUnicode_AsUTF8AndSize(sqlArg, &size);
sql = QString::fromUtf8(buf, size);
}

PyThreadState* state = PyThreadState_Get();
ContextPython* ctx = contexts[state];
Expand Down

0 comments on commit 7221565

Please sign in to comment.