From 2fd1c7565bdc2c631e66fc83c54b8698edd4d4b2 Mon Sep 17 00:00:00 2001 From: okonomiyaki3000 Date: Fri, 16 Dec 2011 15:05:22 +0900 Subject: [PATCH 1/2] Problem: It seems that, under circumstances I do not understand, some NaN value gets passed to getState and then on to $tokenizeRows which causes empty array to be returned. getState then tries to access element 0 of this array and ugly things start to happen. Solution: never return empty array from $tokenizeRows --- lib/ace/background_tokenizer.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/ace/background_tokenizer.js b/lib/ace/background_tokenizer.js index 0ee8990c..e5fe73bd 100644 --- a/lib/ace/background_tokenizer.js +++ b/lib/ace/background_tokenizer.js @@ -130,8 +130,8 @@ var BackgroundTokenizer = function(tokenizer, editor) { }; this.$tokenizeRows = function(firstRow, lastRow) { - if (!this.doc) - return []; + if (!this.doc || isNaN(firstRow) || isNaN(lastRow)) + return [{'state':'start','tokens':[]}]; var rows = []; From 581668441a0b7d700d28374e2cb7489925535d1a Mon Sep 17 00:00:00 2001 From: okonomiyaki3000 Date: Fri, 16 Dec 2011 15:15:54 +0900 Subject: [PATCH 2/2] Changed 6 instances of 'char' to 'chr'. char is a reserved word in JavaScript and should not be used as a variable name. --- lib/ace/edit_session/bracket_match.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/ace/edit_session/bracket_match.js b/lib/ace/edit_session/bracket_match.js index 477125a1..3fcf1413 100644 --- a/lib/ace/edit_session/bracket_match.js +++ b/lib/ace/edit_session/bracket_match.js @@ -92,15 +92,15 @@ function BracketMatch() { while (true) { while (valueIndex >= 0) { - var char = value.charAt(valueIndex); - if (char == openBracket) { + var chr = value.charAt(valueIndex); + if (chr == openBracket) { depth -= 1; if (depth == 0) { return {row: iterator.getCurrentTokenRow(), column: valueIndex + iterator.getCurrentTokenColumn()}; } } - else if (char == bracket) { + else if (chr == bracket) { depth += 1; } valueIndex -= 1; @@ -146,15 +146,15 @@ function BracketMatch() { var value = token.value; var valueLength = value.length; while (valueIndex < valueLength) { - var char = value.charAt(valueIndex); - if (char == closingBracket) { + var chr = value.charAt(valueIndex); + if (chr == closingBracket) { depth -= 1; if (depth == 0) { return {row: iterator.getCurrentTokenRow(), column: valueIndex + iterator.getCurrentTokenColumn()}; } } - else if (char == bracket) { + else if (chr == bracket) { depth += 1; } valueIndex += 1;