From 2f8b3ef21cb66470c2774a5dc0cccbaf7d22681c Mon Sep 17 00:00:00 2001
From: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
Date: Wed, 24 Jul 2019 13:16:35 -0400
Subject: editeng: detect invalid paragraphs when drawing

This prevents live-lock (endless loop) in case
the paragraphs are invalid.

Change-Id: I77cc7818dabc8e518bd7ca3f5161d46ba3fe50b4
(cherry picked from commit deab77cb71c01171d0f8284339627ed33798c3a1)
Reviewed-on: https://gerrit.libreoffice.org/85002
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Michael Meeks <michael.meeks@collabora.com>
(cherry picked from commit 3592d49eff0d063b26250ce32eea138af3108b79)
Reviewed-on: https://gerrit.libreoffice.org/85678
Tested-by: Jenkins
Reviewed-by: Ashod Nakashian <ashnakash@gmail.com>
---
 editeng/source/editeng/impedit.cxx | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

(limited to 'editeng')

diff --git a/editeng/source/editeng/impedit.cxx b/editeng/source/editeng/impedit.cxx
index 2c398703bc74..6107f950608a 100644
--- a/editeng/source/editeng/impedit.cxx
+++ b/editeng/source/editeng/impedit.cxx
@@ -272,8 +272,10 @@ void ImpEditView::DrawSelectionXOR( EditSelection aTmpSel, vcl::Region* pRegion,
 
     ContentNode* pStartNode = aTmpSel.Min().GetNode();
     ContentNode* pEndNode = aTmpSel.Max().GetNode();
-    sal_Int32 nStartPara = pEditEngine->GetEditDoc().GetPos( pStartNode );
-    sal_Int32 nEndPara = pEditEngine->GetEditDoc().GetPos( pEndNode );
+    const sal_Int32 nStartPara = pEditEngine->GetEditDoc().GetPos(pStartNode);
+    const sal_Int32 nEndPara = pEditEngine->GetEditDoc().GetPos(pEndNode);
+    if (nStartPara == EE_PARA_NOT_FOUND || nEndPara == EE_PARA_NOT_FOUND)
+        return;
     for ( sal_Int32 nPara = nStartPara; nPara <= nEndPara; nPara++ )
     {
         ParaPortion* pTmpPortion = pEditEngine->GetParaPortions().SafeGetObject( nPara );
-- 
cgit