diff --git a/lib/ace/search.js b/lib/ace/search.js index e6a6f922..e30f3aad 100644 --- a/lib/ace/search.js +++ b/lib/ace/search.js @@ -116,11 +116,12 @@ Search.SELECTION = 2; if (!this.$options.needle) return null; - if (this.$options.backwards) { - var iterator = this.$backwardMatchIterator(session); - } else { - iterator = this.$forwardMatchIterator(session); - } + var iterator = this.$options.backwards + ? this.$backwardMatchIterator(session) + : this.$forwardMatchIterator(session); + + if (!iterator) + return false; var firstRange = null; iterator.forEach(function(range) { @@ -143,11 +144,12 @@ Search.SELECTION = 2; if (!options.needle) return []; - if (options.backwards) { - var iterator = this.$backwardMatchIterator(session); - } else { - iterator = this.$forwardMatchIterator(session); - } + var iterator = options.backwards + ? this.$backwardMatchIterator(session) + : this.$forwardMatchIterator(session); + + if (!iterator) + return false; var ignoreCursor = !options.start && options.wrap && options.scope == Search.ALL; if (ignoreCursor) @@ -178,6 +180,9 @@ Search.SELECTION = 2; **/ this.replace = function(input, replacement) { var re = this.$assembleRegExp(); + if (!re) + return; + var match = re.exec(input); if (match && match[0].length == input.length) { if (this.$options.regExp) { @@ -199,6 +204,9 @@ Search.SELECTION = 2; **/ this.$forwardMatchIterator = function(session) { var re = this.$assembleRegExp(); + if (!re) + return false; + var self = this; return { @@ -240,6 +248,9 @@ Search.SELECTION = 2; **/ this.$backwardMatchIterator = function(session) { var re = this.$assembleRegExp(); + if (!re) + return false; + var self = this; return { @@ -293,7 +304,13 @@ Search.SELECTION = 2; modifier += "i"; } - var re = new RegExp(needle, modifier); + try { + var re = new RegExp(needle, modifier); + } + catch(e) { + return false; + } + return re; };