From 88edec1bf4f970c196466670951206f6fbd4f2b9 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Mon, 23 Sep 2024 11:33:08 +0200 Subject: [PATCH] TextEditor: Avoid divide by zero error And adding a few asserts in places that could cause this to happen. Fixes: QTCREATORBUG-31623 Change-Id: I8de5db14313791b1d6614dc0e29d0d3dd65e8542 Reviewed-by: Eike Ziller --- src/plugins/texteditor/fontsettings.cpp | 3 ++- src/plugins/texteditor/texteditor.cpp | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/plugins/texteditor/fontsettings.cpp b/src/plugins/texteditor/fontsettings.cpp index 3cb58fd1282..54e384984b3 100644 --- a/src/plugins/texteditor/fontsettings.cpp +++ b/src/plugins/texteditor/fontsettings.cpp @@ -103,6 +103,7 @@ bool FontSettings::fromSettings(const FormatDescriptions &descriptions, const Qt m_fontSize = s->value(group + fontSizeKey, m_fontSize).toInt(); m_fontZoom= s->value(group + fontZoomKey, m_fontZoom).toInt(); m_lineSpacing = s->value(group + lineSpacingKey, m_lineSpacing).toInt(); + QTC_ASSERT(m_lineSpacing >= 0, m_lineSpacing = 100); m_antialias = s->value(group + antialiasKey, DEFAULT_ANTIALIAS).toBool(); if (s->contains(group + schemeFileNamesKey)) { @@ -337,7 +338,7 @@ qreal FontSettings::lineSpacing() const QFont currentFont = font(); currentFont.setPointSize(std::max(m_fontSize * m_fontZoom / 100, 1)); qreal spacing = QFontMetricsF(currentFont).lineSpacing(); - if (m_lineSpacing != 100) + if (QTC_GUARD(m_lineSpacing > 0) && m_lineSpacing != 100) spacing *= qreal(m_lineSpacing) / 100; return spacing; } diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index 8ced95c0fc0..4d71d42c45b 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -5160,6 +5160,7 @@ void TextEditorWidgetPrivate::updateLineAnnotation(const PaintEventData &data, q->viewport()->update(annotationRect.rect.toAlignedRect()); } m_annotationRects[data.block.blockNumber()] = newRects; + QTC_ASSERT(data.lineSpacing != 0, return); const int maxVisibleLines = data.viewportRect.height() / data.lineSpacing; if (m_annotationRects.size() >= maxVisibleLines * 2) scheduleCleanupAnnotationCache();