Navigation Menu

Skip to content

Commit

Permalink
Correctly escape closing square brackets in two regular expression li…
Browse files Browse the repository at this point in the history
…terals.

The Duktape JavaScript engine is very strict when it comes to regex literals.
It was choking on two regexs in the XRegExp source. This commit correctly escapes
two closing square brackets that should be escaped because they don't have an opening
counterpart and they should be matched as a literal character.
  • Loading branch information
jfahrenkrug committed Jul 19, 2016
1 parent 63273f9 commit f5dbc86
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 6 deletions.
2 changes: 1 addition & 1 deletion src/addons/build.js
Expand Up @@ -9,7 +9,7 @@ module.exports = function(XRegExp) {
'use strict';

var REGEX_DATA = 'xregexp';
var subParts = /(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*]/g;
var subParts = /(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*\]/g;
var parts = XRegExp.union([/\({{([\w$]+)}}\)|{{([\w$]+)}}/, subParts], 'g');

/**
Expand Down
4 changes: 2 additions & 2 deletions src/xregexp.js
Expand Up @@ -1305,7 +1305,7 @@ XRegExp.union = function(patterns, flags) {
throw new TypeError('Must provide a nonempty array of patterns to merge');
}

var parts = /(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*]/g;
var parts = /(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*\]/g;
var output = [];
var pattern;
for (var i = 0; i < patterns.length; ++i) {
Expand Down Expand Up @@ -1682,7 +1682,7 @@ XRegExp.addToken(
* character class endings can't be determined.
*/
XRegExp.addToken(
/\[(\^?)]/,
/\[(\^?)\]/,
function(match) {
// For cross-browser compatibility with ES3, convert [] to \b\B and [^] to [\s\S].
// (?!) should work like \b\B, but is unreliable in some versions of Firefox
Expand Down
6 changes: 3 additions & 3 deletions xregexp-all.js
Expand Up @@ -10,7 +10,7 @@ module.exports = function(XRegExp) {
'use strict';

var REGEX_DATA = 'xregexp';
var subParts = /(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*]/g;
var subParts = /(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*\]/g;
var parts = XRegExp.union([/\({{([\w$]+)}}\)|{{([\w$]+)}}/, subParts], 'g');

/**
Expand Down Expand Up @@ -3912,7 +3912,7 @@ XRegExp.union = function(patterns, flags) {
throw new TypeError('Must provide a nonempty array of patterns to merge');
}

var parts = /(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*]/g;
var parts = /(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*\]/g;
var output = [];
var pattern;
for (var i = 0; i < patterns.length; ++i) {
Expand Down Expand Up @@ -4289,7 +4289,7 @@ XRegExp.addToken(
* character class endings can't be determined.
*/
XRegExp.addToken(
/\[(\^?)]/,
/\[(\^?)\]/,
function(match) {
// For cross-browser compatibility with ES3, convert [] to \b\B and [^] to [\s\S].
// (?!) should work like \b\B, but is unreliable in some versions of Firefox
Expand Down

0 comments on commit f5dbc86

Please sign in to comment.