summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAxel Spoerl <axel.spoerl@qt.io>2022-07-27 15:17:03 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2022-07-27 19:36:05 +0000
commite044da9d804633ec37687150baf20cc02348ef7d (patch)
tree6b23a50fb11dae4c583bb62fdb42750a178efb16
parent6da1cb109832f21f3c4cb39f0f5bbe2fe075695d (diff)
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 Change-Id: I09e57dccfebb81a308944c233846d5b9ef58819e Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> (cherry picked from commit effc8be3ce848770a093d51d5651908c375e83f8) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/widgets/styles/qstylesheetstyle.cpp13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/widgets/styles/qstylesheetstyle.cpp b/src/widgets/styles/qstylesheetstyle.cpp
index 016c97350c..2653f7bb71 100644
--- a/src/widgets/styles/qstylesheetstyle.cpp
+++ b/src/widgets/styles/qstylesheetstyle.cpp
@@ -4646,11 +4646,14 @@ void QStyleSheetStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *op
case PE_PanelLineEdit:
if (const QStyleOptionFrame *frm = qstyleoption_cast<const QStyleOptionFrame *>(opt)) {
- if (QWidget *container = containerWidget(w); 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) {
+ if (QWidget *container = containerWidget(w); container != w) {
+ QRenderRule containerRule = renderRule(container, opt);
+ if (!containerRule.hasNativeBorder() || !containerRule.baseStyleCanDraw())
+ return;
+ rule = containerRule;
+ }
}
if (rule.hasNativeBorder()) {