Prechádzať zdrojové kódy

Merge pull request #3133 from overleaf/hb-fix-bibtex-error-crash

Stop bib log parser after 500 iterations per parser

GitOrigin-RevId: 415624c20154b4fd4054f166179cd455a7cc2d4d
Hugh O'Brien 6 rokov pred
rodič
commit
b48b937f26

+ 1 - 1
services/web/frontend/js/ide/pdf/controllers/PdfController.js

@@ -615,7 +615,7 @@ App.controller('PdfController', function(
     function processBiber(log) {
     function processBiber(log) {
       const { errors, warnings } = BibLogParser.parse(log, {})
       const { errors, warnings } = BibLogParser.parse(log, {})
       const all = [].concat(errors, warnings)
       const all = [].concat(errors, warnings)
-      accumulateResults({ type: 'BibTeX', all, errors, warnings })
+      accumulateResults({ type: 'BibTeX:', all, errors, warnings })
     }
     }
 
 
     // output the results
     // output the results

+ 12 - 3
services/web/frontend/js/vendor/libs/bib-log-parser.js

@@ -23,10 +23,19 @@ define(function() {
     iterationCount = 0;
     iterationCount = 0;
     while (match = re.exec(text)) {
     while (match = re.exec(text)) {
       iterationCount += 1;
       iterationCount += 1;
-      if (iterationCount >= 10000) {
-        return result;
-      }
       newEntry = process(match);
       newEntry = process(match);
+
+      // Too many log entries can cause browser crashes
+      // Construct a too many files error from the last match
+      const maxErrors = 100
+      if (iterationCount >= maxErrors) {
+        const level = newEntry.level + "s"
+        newEntry.message = `Over ${maxErrors} ${level} returned. Download raw logs to see full list`;
+        newEntry.line = undefined;
+        result.unshift(newEntry)
+        return [result, ""];
+      }
+
       result.push(newEntry);
       result.push(newEntry);
       text = (match.input.slice(0, match.index)) + (match.input.slice(match.index + match[0].length + 1, match.input.length));
       text = (match.input.slice(0, match.index)) + (match.input.slice(match.index + match[0].length + 1, match.input.length));
     }
     }