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>
This commit is contained in:
Axel Spoerl 2022-07-27 15:17:03 +02:00
parent 818a15234c
commit effc8be3ce

View File

@ -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()) {