You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
2.2 KiB
55 lines
2.2 KiB
From 38c54b3ff58972fa16810740fc43933620b6dc0d Mon Sep 17 00:00:00 2001
|
|
From: Axel Spoerl <axel.spoerl@qt.io>
|
|
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 <volker.hilsheimer@qt.io>
|
|
(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<const QStyleOptionFrame *>(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
|
|
|