From be14af2d51852951dbfea41913a7dd9d1190151e Mon Sep 17 00:00:00 2001 From: V3n3RiX Date: Thu, 23 Mar 2023 00:43:56 +0000 Subject: gentoo auto-resync : 23:03:2023 - 00:43:55 --- .../files/qtwidgets-5.15.8-QTBUG-104917.patch | 54 ++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 dev-qt/qtwidgets/files/qtwidgets-5.15.8-QTBUG-104917.patch (limited to 'dev-qt/qtwidgets/files/qtwidgets-5.15.8-QTBUG-104917.patch') diff --git a/dev-qt/qtwidgets/files/qtwidgets-5.15.8-QTBUG-104917.patch b/dev-qt/qtwidgets/files/qtwidgets-5.15.8-QTBUG-104917.patch new file mode 100644 index 000000000000..fae665b14d2e --- /dev/null +++ b/dev-qt/qtwidgets/files/qtwidgets-5.15.8-QTBUG-104917.patch @@ -0,0 +1,54 @@ +From 38c54b3ff58972fa16810740fc43933620b6dc0d Mon Sep 17 00:00:00 2001 +From: Axel Spoerl +Date: Wed, 27 Jul 2022 15:17:03 +0200 +Subject: [PATCH] Add nullptr guard in + QStyleSheetStyle::drawPrimitive(PE_PanelLineEdit) + +Drawing PE_PanelLineEdit in QStyleSheetStyle with the default argument +widget = nullptr causes a segfault. + +drawPrimitive tries to fall back to a container widget's render rule +and therefore calls containerWidget() - which crashes when called with +nullptr. + +Container widget fallback is pointless when drawPrimitive() is called +with widget == nullptr. This patch skips it in that case. + +Fixes: QTBUG-104917 +Pick-to: 6.4 6.3 6.2 +Change-Id: I09e57dccfebb81a308944c233846d5b9ef58819e +Reviewed-by: Volker Hilsheimer +(cherry picked from commit effc8be3ce848770a093d51d5651908c375e83f8) +--- + src/widgets/styles/qstylesheetstyle.cpp | 15 +++++++++------ + 1 file changed, 9 insertions(+), 6 deletions(-) + +diff --git a/src/widgets/styles/qstylesheetstyle.cpp b/src/widgets/styles/qstylesheetstyle.cpp +index 9fcb8ba522..50fdee0f69 100644 +--- a/src/widgets/styles/qstylesheetstyle.cpp ++++ b/src/widgets/styles/qstylesheetstyle.cpp +@@ -4449,12 +4449,15 @@ void QStyleSheetStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *op + + case PE_PanelLineEdit: + if (const QStyleOptionFrame *frm = qstyleoption_cast(opt)) { +- QWidget *container = containerWidget(w); +- if (container != w) { +- QRenderRule containerRule = renderRule(container, opt); +- if (!containerRule.hasNativeBorder() || !containerRule.baseStyleCanDraw()) +- return; +- rule = containerRule; ++ // Fall back to container widget's render rule ++ if (w) { ++ QWidget *container = containerWidget(w); ++ if (container != w) { ++ QRenderRule containerRule = renderRule(container, opt); ++ if (!containerRule.hasNativeBorder() || !containerRule.baseStyleCanDraw()) ++ return; ++ rule = containerRule; ++ } + } + + if (rule.hasNativeBorder()) { +-- +2.40.0 + -- cgit v1.2.3