aboutsummaryrefslogtreecommitdiffstats
path: root/sources
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2018-10-31 12:51:15 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2018-10-31 14:40:25 +0000
commit8383c2ff7f383385707bd2fc3e33071988507910 (patch)
tree13d7eac0f72759293f57ca032646b34f1e81203f /sources
parent6978325323208c395d135f19847a8ad0b13f93f9 (diff)
QIODevice bindings: Fix invalid reads in read() functions
When running test in debug mode on Windows, failures occurred: File "sources/pyside2/tests/QtCore/qfileread_test.py", line 41, in readData return super(FileChild2, self).readData(maxlen) UnicodeDecodeError 'utf-8' codec can't decode byte 0xcd in position 21: invalid continuation byte File "C:/dev/pyside/pyside-setup511d/sources/pyside2/tests/QtCore/qfile_test.py", line 57, in testBasic self.assertFalse(obj.getChar()[0]) UnicodeDecodeError 'utf-8' codec can't decode byte 0xcc in position 0: unexpected end of data This is caused by missing initializers and terminating \0 characters in the QByteArrays introduced by ca806b438e8a27dc4562ac806d189765e93e09e5, unearthed by MSVC helpfully filling unitinialized data with random values. Fix by using a QByteArray of size n + 1 filled with 0. Initialize the character variable in the fix_char* template. Task-number: PYSIDE-40 Change-Id: Ia604841a89f1b1b9564c16d2f23cd9f7c20f5628 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'sources')
-rw-r--r--sources/pyside2/PySide2/QtCore/typesystem_core_common.xml10
-rw-r--r--sources/pyside2/PySide2/typesystem_templates.xml2
2 files changed, 5 insertions, 7 deletions
diff --git a/sources/pyside2/PySide2/QtCore/typesystem_core_common.xml b/sources/pyside2/PySide2/QtCore/typesystem_core_common.xml
index 631403c3f..48f234f2b 100644
--- a/sources/pyside2/PySide2/QtCore/typesystem_core_common.xml
+++ b/sources/pyside2/PySide2/QtCore/typesystem_core_common.xml
@@ -3035,9 +3035,8 @@
</modify-function>
<modify-function signature="readData(char*,qint64)">
<inject-code class="target">
- QByteArray ba;
- ba.resize(%2);
- %CPPSELF.%FUNCTION_NAME(ba.data(), ba.size());
+ QByteArray ba(1 + int(%2), char(0));
+ %CPPSELF.%FUNCTION_NAME(ba.data(), int(%2));
%PYARG_0 = Shiboken::String::fromCString(ba.constData());
</inject-code>
<modify-argument index="1">
@@ -3059,9 +3058,8 @@
</modify-function>
<modify-function signature="readLineData(char*,qint64)">
<inject-code class="target">
- QByteArray ba;
- ba.resize(%2);
- %CPPSELF.%FUNCTION_NAME(ba.data(), ba.size());
+ QByteArray ba(1 + int(%2), char(0));
+ %CPPSELF.%FUNCTION_NAME(ba.data(), int(%2));
%PYARG_0 = Shiboken::String::fromCString(ba.constData());
</inject-code>
<modify-argument index="1">
diff --git a/sources/pyside2/PySide2/typesystem_templates.xml b/sources/pyside2/PySide2/typesystem_templates.xml
index a17337258..187dc5c42 100644
--- a/sources/pyside2/PySide2/typesystem_templates.xml
+++ b/sources/pyside2/PySide2/typesystem_templates.xml
@@ -203,7 +203,7 @@
</template>
<template name="fix_char*">
- char val_;
+ char val_{};
%BEGIN_ALLOW_THREADS
%RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(&amp;val_);
%END_ALLOW_THREADS