aboutsummaryrefslogtreecommitdiffstats
path: root/sources/pyside6/PySide6
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2021-03-03 09:56:40 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2021-03-17 09:03:23 +0100
commit3a18da91353a71e801658329c55b170c18bcd824 (patch)
treef6b2d91a7c94f5a30b7f28569591882e93153255 /sources/pyside6/PySide6
parent3c3802fbc026010a00c235aab9a548b7cafbe2ad (diff)
Qt Datavisualization: Fix crashes in QBar/SurfaceDataProxy add/set/insertRow()
These function take an allocated array. Replace them by functions that take the list by const-ref and pass the allocated copy. Pick-to: 5.15 Fixes: PYSIDE-1438 Change-Id: Id58cdbc4b939713b71724f5d4a67f0448c74f33f Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Diffstat (limited to 'sources/pyside6/PySide6')
-rw-r--r--sources/pyside6/PySide6/QtDataVisualization/typesystem_datavisualization.xml103
-rw-r--r--sources/pyside6/PySide6/glue/qtdatavisualization.cpp32
2 files changed, 90 insertions, 45 deletions
diff --git a/sources/pyside6/PySide6/QtDataVisualization/typesystem_datavisualization.xml b/sources/pyside6/PySide6/QtDataVisualization/typesystem_datavisualization.xml
index e36d7e8de..1fdbc71f4 100644
--- a/sources/pyside6/PySide6/QtDataVisualization/typesystem_datavisualization.xml
+++ b/sources/pyside6/PySide6/QtDataVisualization/typesystem_datavisualization.xml
@@ -118,16 +118,43 @@
<parent index="this" action="add"/>
</modify-argument>
</modify-function>
- <modify-function signature="addRow(QList&lt;QBarDataItem&gt;*)">
- <modify-argument index="1">
- <parent index="this" action="add"/>
- </modify-argument>
- </modify-function>
- <modify-function signature="addRow(QList&lt;QBarDataItem&gt;*, const QString&amp;)">
- <modify-argument index="1">
- <parent index="this" action="add"/>
- </modify-argument>
- </modify-function>
+
+ <!-- PYSIDE-1438: Replace all add/set/insertRow() taking a 'QList*' by overloads
+ taking 'const QList &' since an allocated list needs to be passed. -->
+ <modify-function signature="addRow(QList&lt;QBarDataItem&gt;*)" remove="all"/>
+ <add-function signature="addRow(const QList&lt;QBarDataItem&gt;&amp;)" return-type="int">
+ <inject-code class="target" position="beginning" file="../glue/qtdatavisualization.cpp"
+ snippet="dataproxy-addrow"/>
+ </add-function>
+ <modify-function signature="addRow(QList&lt;QBarDataItem&gt;*,const QString&amp;)" remove="all"/>
+ <add-function signature="addRow(const QList&lt;QBarDataItem&gt;&amp;,const QString&amp;)"
+ return-type="int">
+ <inject-code class="target" position="beginning" file="../glue/qtdatavisualization.cpp"
+ snippet="dataproxy-addrow-string"/>
+ </add-function>
+
+ <modify-function signature="insertRow(int,QList&lt;QBarDataItem&gt;*)" remove="all"/>
+ <add-function signature="insertRow(int,const QList&lt;QBarDataItem&gt;&amp;)">
+ <inject-code class="target" position="beginning" file="../glue/qtdatavisualization.cpp"
+ snippet="dataproxy-insertrow"/>
+ </add-function>
+ <modify-function signature="insertRow(int,QList&lt;QBarDataItem&gt;*,const QString&amp;)" remove="all"/>
+ <add-function signature="insertRow(int,const QList&lt;QBarDataItem&gt;&amp;, const QString&amp;)">
+ <inject-code class="target" position="beginning" file="../glue/qtdatavisualization.cpp"
+ snippet="dataproxy-insertrow-string"/>
+ </add-function>
+
+ <modify-function signature="setRow(int,QList&lt;QBarDataItem&gt;*)" remove="all"/>
+ <add-function signature="setRow(int,const QList&lt;QBarDataItem&gt;&amp;)">
+ <inject-code class="target" position="beginning" file="../glue/qtdatavisualization.cpp"
+ snippet="dataproxy-setrow"/>
+ </add-function>
+ <modify-function signature="setRow(int,QList&lt;QBarDataItem&gt;*,const QString&amp;)" remove="all"/>
+ <add-function signature="setRow(int,const QList&lt;QBarDataItem&gt;&amp;,const QString&amp;)">
+ <inject-code class="target" position="beginning" file="../glue/qtdatavisualization.cpp"
+ snippet="dataproxy-setrow-string"/>
+ </add-function>
+
<modify-function signature="addRows(const QBarDataArray&amp;)">
<modify-argument index="1">
<parent index="this" action="add"/>
@@ -138,16 +165,6 @@
<parent index="this" action="add"/>
</modify-argument>
</modify-function>
- <modify-function signature="insertRow(int, QList&lt;QBarDataItem&gt;*)">
- <modify-argument index="2">
- <parent index="this" action="add"/>
- </modify-argument>
- </modify-function>
- <modify-function signature="insertRow(int, QList&lt;QBarDataItem&gt;*, const QString&amp;)">
- <modify-argument index="2">
- <parent index="this" action="add"/>
- </modify-argument>
- </modify-function>
<modify-function signature="insertRows(int, const QBarDataArray&amp;)">
<modify-argument index="2">
<parent index="this" action="add"/>
@@ -158,16 +175,6 @@
<parent index="this" action="add"/>
</modify-argument>
</modify-function>
- <modify-function signature="setRow(int, QList&lt;QBarDataItem&gt;*)">
- <modify-argument index="2">
- <parent index="this" action="add"/>
- </modify-argument>
- </modify-function>
- <modify-function signature="setRow(int, QList&lt;QBarDataItem&gt;*, const QString&amp;)">
- <modify-argument index="2">
- <parent index="this" action="add"/>
- </modify-argument>
- </modify-function>
<modify-function signature="setRows(int, const QBarDataArray&amp;)">
<modify-argument index="2">
<parent index="this" action="add"/>
@@ -250,21 +257,27 @@
</object-type>
<value-type name="QSurfaceDataItem"/>
<object-type name="QSurfaceDataProxy">
- <modify-function signature="addRow(QList&lt;QSurfaceDataItem&gt;*)">
- <modify-argument index="1">
- <parent index="this" action="add"/>
- </modify-argument>
- </modify-function>
- <modify-function signature="insertRow(int, QList&lt;QSurfaceDataItem&gt;*)">
- <modify-argument index="2">
- <parent index="this" action="add"/>
- </modify-argument>
- </modify-function>
- <modify-function signature="setRow(int, QList&lt;QSurfaceDataItem&gt;*)">
- <modify-argument index="2">
- <parent index="this" action="add"/>
- </modify-argument>
- </modify-function>
+
+ <!-- PYSIDE-1438: Replace all add/set/insertRow() taking a 'QList*' by overloads
+ taking 'const QList &' since an allocated list needs to be passed. -->
+ <modify-function signature="addRow(QList&lt;QSurfaceDataItem&gt;*)" remove="all"/>
+ <add-function signature="addRow(const QList&lt;QSurfaceDataItem&gt;&amp;)" return-type="int">
+ <inject-code class="target" position="beginning" file="../glue/qtdatavisualization.cpp"
+ snippet="dataproxy-addrow"/>
+ </add-function>
+
+ <modify-function signature="insertRow(int,QList&lt;QSurfaceDataItem&gt;*)" remove="all"/>
+ <add-function signature="insertRow(int,const QList&lt;QSurfaceDataItem&gt;&amp;)">
+ <inject-code class="target" position="beginning" file="../glue/qtdatavisualization.cpp"
+ snippet="dataproxy-insertrow"/>
+ </add-function>
+
+ <modify-function signature="setRow(int,QList&lt;QSurfaceDataItem&gt;*)" remove="all"/>
+ <add-function signature="setRow(int,const QList&lt;QSurfaceDataItem&gt;&amp;)">
+ <inject-code class="target" position="beginning" file="../glue/qtdatavisualization.cpp"
+ snippet="dataproxy-setrow"/>
+ </add-function>
+
<modify-function signature="resetArray(QSurfaceDataArray*)">
<modify-argument index="1">
<parent index="this" action="add"/>
diff --git a/sources/pyside6/PySide6/glue/qtdatavisualization.cpp b/sources/pyside6/PySide6/glue/qtdatavisualization.cpp
index 119d79a40..0a9e5db76 100644
--- a/sources/pyside6/PySide6/glue/qtdatavisualization.cpp
+++ b/sources/pyside6/PySide6/glue/qtdatavisualization.cpp
@@ -40,3 +40,35 @@
// @snippet releaseownership
Shiboken::Object::releaseOwnership(%PYARG_1);
// @snippet releaseownership
+
+// @snippet dataproxy-addrow
+using ListType = decltype(%1);
+%RETURN_TYPE %0 = %CPPSELF.addRow(new ListType(%1));
+%PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](%0);
+// @snippet dataproxy-addrow
+
+// @snippet dataproxy-addrow-string
+using ListType = decltype(%1);
+%RETURN_TYPE %0 = %CPPSELF.addRow(new ListType(%1), %2);
+%PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](%0);
+// @snippet dataproxy-addrow-string
+
+// @snippet dataproxy-insertrow
+using ListType = decltype(%2);
+%CPPSELF.insertRow(%1, new ListType(%2));
+// @snippet dataproxy-insertrow
+
+// @snippet dataproxy-insertrow-string
+using ListType = decltype(%2);
+%CPPSELF.insertRow(%1, new ListType(%2), %3);
+// @snippet dataproxy-insertrow-string
+
+// @snippet dataproxy-setrow
+using ListType = decltype(%2);
+%CPPSELF.setRow(%1, new ListType(%2));
+// @snippet dataproxy-setrow
+
+// @snippet dataproxy-setrow-string
+using ListType = decltype(%2);
+%CPPSELF.setRow(%1, new ListType(%2), %3);
+// @snippet dataproxy-setrow-string