sc/source/filter/excel/xicontent.cxx |   10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

New commits:
commit dfab1b24bdf4e83ecf6ff701afa45d561fa12557
Author:     Caolán McNamara <caol...@redhat.com>
AuthorDate: Sat Jul 16 17:04:32 2022 +0100
Commit:     Caolán McNamara <caol...@redhat.com>
CommitDate: Sat Jul 16 20:18:42 2022 +0200

    ofz#48693 Timeout
    
    Change-Id: I6912a41afc8325052d197990f1dd193399a7b053
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137126
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caol...@redhat.com>

diff --git a/sc/source/filter/excel/xicontent.cxx 
b/sc/source/filter/excel/xicontent.cxx
index ac7141280a1f..4104447f606b 100644
--- a/sc/source/filter/excel/xicontent.cxx
+++ b/sc/source/filter/excel/xicontent.cxx
@@ -932,6 +932,9 @@ void XclImpValidationManager::ReadDV( XclImpStream& rStrm )
 
 void XclImpValidationManager::Apply()
 {
+    const bool bFuzzing = utl::ConfigManager::IsFuzzing();
+    size_t nPatterns = 0;
+
     ScDocument& rDoc = GetRoot().GetDoc();
     for (const auto& rxDVItem : maDVItems)
     {
@@ -942,11 +945,16 @@ void XclImpValidationManager::Apply()
         aPattern.GetItemSet().Put( SfxUInt32Item( ATTR_VALIDDATA, nHandle ) );
 
         // apply all ranges
-        for ( size_t i = 0, nRanges = rItem.maRanges.size(); i < nRanges; ++i )
+        for ( size_t i = 0, nRanges = rItem.maRanges.size(); i < nRanges; ++i, 
++nPatterns )
         {
             const ScRange & rScRange = rItem.maRanges[ i ];
             rDoc.ApplyPatternAreaTab( rScRange.aStart.Col(), 
rScRange.aStart.Row(),
                 rScRange.aEnd.Col(), rScRange.aEnd.Row(), 
rScRange.aStart.Tab(), aPattern );
+            if (bFuzzing && nPatterns >= 128)
+            {
+                SAL_WARN("sc.filter", "for fuzzing performance, abandoned 
pattern after " << nPatterns << " insertions");
+                break;
+            }
         }
     }
     maDVItems.clear();

Reply via email to