Merge pull request #5753 from simon-paris/master

Fix for #5750 - Refuse to use regexes with g or y flags in contexts
This commit is contained in:
Tobias Koppers 2017-10-11 17:07:00 +02:00 committed by GitHub
commit be72b2a8c2
8 changed files with 27 additions and 39 deletions

View File

@ -5,7 +5,6 @@
"use strict";
const ContextDependency = require("./ContextDependency");
const CriticalDependencyWarning = require("./CriticalDependencyWarning");
class AMDRequireContextDependency extends ContextDependency {
constructor(request, recursive, regExp, range, valueRange) {
super(request, recursive, regExp);
@ -16,14 +15,6 @@ class AMDRequireContextDependency extends ContextDependency {
get type() {
return "amd require context";
}
getWarnings() {
if(this.critical) {
return [
new CriticalDependencyWarning(this.critical)
];
}
}
}
AMDRequireContextDependency.Template = require("./ContextDependencyTemplateAsRequireCall");
module.exports = AMDRequireContextDependency;

View File

@ -4,7 +4,6 @@
*/
"use strict";
const ContextDependency = require("./ContextDependency");
const CriticalDependencyWarning = require("./CriticalDependencyWarning");
const ContextDependencyTemplateAsRequireCall = require("./ContextDependencyTemplateAsRequireCall");
class CommonJsRequireContextDependency extends ContextDependency {
@ -18,15 +17,6 @@ class CommonJsRequireContextDependency extends ContextDependency {
return "cjs require context";
}
getWarnings() {
if(!this.critical) {
return;
}
return [
new CriticalDependencyWarning(this.critical)
];
}
}
CommonJsRequireContextDependency.Template = ContextDependencyTemplateAsRequireCall;

View File

@ -4,6 +4,7 @@
*/
"use strict";
const Dependency = require("../Dependency");
const CriticalDependencyWarning = require("./CriticalDependencyWarning");
class ContextDependency extends Dependency {
constructor(request, recursive, regExp) {
@ -13,6 +14,13 @@ class ContextDependency extends Dependency {
this.recursive = recursive;
this.regExp = regExp;
this.async = false;
this.hadGlobalOrStickyRegExp = false;
if(this.regExp.global || this.regExp.sticky) {
this.regExp = null;
this.hadGlobalOrStickyRegExp = true;
}
}
isEqualResource(other) {
@ -24,6 +32,18 @@ class ContextDependency extends Dependency {
this.regExp === other.regExp &&
this.async === other.async;
}
getWarnings() {
let warnings = super.getWarnings() || [];
if(this.critical) {
warnings.push(new CriticalDependencyWarning(this.critical));
}
if(this.hadGlobalOrStickyRegExp) {
warnings.push(new CriticalDependencyWarning("Contexts can't use RegExps with the 'g' or 'y' flags."));
}
return warnings;
}
}
module.exports = ContextDependency;

View File

@ -4,7 +4,6 @@
*/
"use strict";
const ContextDependency = require("./ContextDependency");
const CriticalDependencyWarning = require("./CriticalDependencyWarning");
const ContextDependencyTemplateAsRequireCall = require("./ContextDependencyTemplateAsRequireCall");
class ImportContextDependency extends ContextDependency {
@ -19,15 +18,6 @@ class ImportContextDependency extends ContextDependency {
return "import() context";
}
getWarnings() {
if(!this.critical) {
return;
}
return [
new CriticalDependencyWarning(this.critical)
];
}
}
ImportContextDependency.Template = ContextDependencyTemplateAsRequireCall;

View File

@ -4,7 +4,6 @@
*/
"use strict";
const ContextDependency = require("./ContextDependency");
const CriticalDependencyWarning = require("./CriticalDependencyWarning");
const ContextDependencyTemplateAsId = require("./ContextDependencyTemplateAsId");
class RequireResolveContextDependency extends ContextDependency {
@ -18,15 +17,6 @@ class RequireResolveContextDependency extends ContextDependency {
return "amd require context";
}
getWarnings() {
if(!this.critical) {
return;
}
return [
new CriticalDependencyWarning(this.critical)
];
}
}
RequireResolveContextDependency.Template = ContextDependencyTemplateAsId;

View File

View File

@ -0,0 +1,4 @@
it("should not use regexps with the g flag", function() {
require.context("./folder", true, /a/).keys().length.should.be.eql(1);
require.context("./folder", true, /a/g).keys().length.should.be.eql(0);
});

View File

@ -0,0 +1,3 @@
module.exports = [
[/Critical dependency: Contexts can't use RegExps with the 'g' or 'y' flags/],
];