diff options
author | Axel Spoerl <axel.spoerl@qt.io> | 2022-07-27 15:17:03 +0200 |
---|---|---|
committer | Axel Spoerl <axel.spoerl@qt.io> | 2022-07-27 21:35:49 +0200 |
commit | effc8be3ce848770a093d51d5651908c375e83f8 (patch) | |
tree | 8fea00d7cdd7866faf4b3eb5bba66118233a4765 /src/widgets/styles | |
parent | 818a15234c8fb80cd9adad54bd726cf69726fa79 (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
Pick-to: 6.4 6.3 6.2
Change-Id: I09e57dccfebb81a308944c233846d5b9ef58819e
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Diffstat (limited to 'src/widgets/styles')
-rw-r--r-- | src/widgets/styles/qstylesheetstyle.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/widgets/styles/qstylesheetstyle.cpp b/src/widgets/styles/qstylesheetstyle.cpp index 0437561d13..6abef62835 100644 --- a/src/widgets/styles/qstylesheetstyle.cpp +++ b/src/widgets/styles/qstylesheetstyle.cpp @@ -4612,11 +4612,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()) { |