Skip to content

Commit

Permalink
[[FIX]] Do not crash on invalid input
Browse files Browse the repository at this point in the history
fip renaming of comma var

- function is now called parseComma
- local var has be switched back to just comma

Fixes the bug where we would overwrite the parseComma function (when
they were both named comma)
  • Loading branch information
Gord Tanner authored and jugglinmike committed Jan 16, 2016
1 parent 5dd9c90 commit 2e0026f
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 15 deletions.
30 changes: 15 additions & 15 deletions src/jshint.js
Original file line number Diff line number Diff line change
Expand Up @@ -975,16 +975,16 @@ var JSHINT = (function() {
function nobreakcomma(left, right) {
if (left.line !== startLine(right)) {
if (!state.option.laxcomma) {
if (comma.first) {
if (parseComma.first) {
warning("I001");
comma.first = false;
parseComma.first = false;
}
warning("W014", left, right.value);
}
}
}

function comma(opts) {
function parseComma(opts) {
opts = opts || {};

if (!opts.peek) {
Expand Down Expand Up @@ -2047,15 +2047,15 @@ var JSHINT = (function() {
warning("W127");
}

if (!comma({ peek: true })) {
if (!parseComma({ peek: true })) {
return that;
}
while (true) {
if (!(expr = expression(10))) {
break;
}
that.exprs.push(expr);
if (state.tokens.next.value !== "," || !comma()) {
if (state.tokens.next.value !== "," || !parseComma()) {
break;
}
}
Expand Down Expand Up @@ -2440,7 +2440,7 @@ var JSHINT = (function() {
if (state.tokens.next.id !== ",") {
break;
}
comma();
parseComma();
}
}

Expand Down Expand Up @@ -2530,7 +2530,7 @@ var JSHINT = (function() {
warning("W127");
}

comma();
parseComma();
}
}

Expand Down Expand Up @@ -2729,7 +2729,7 @@ var JSHINT = (function() {

this.first.push(expression(10));
if (state.tokens.next.id === ",") {
comma({ allowTrailing: true });
parseComma({ allowTrailing: true });
if (state.tokens.next.id === "]" && !state.inES5()) {
warning("W070", state.tokens.curr);
break;
Expand Down Expand Up @@ -2881,7 +2881,7 @@ var JSHINT = (function() {
if (pastRest) {
warning("W131", state.tokens.next);
}
comma();
parseComma();
} else {
advance(")", next);
return { arity: arity, params: paramsIds };
Expand Down Expand Up @@ -3304,7 +3304,7 @@ var JSHINT = (function() {
countMember(i);

if (state.tokens.next.id === ",") {
comma({ allowTrailing: true, property: true });
parseComma({ allowTrailing: true, property: true });
if (state.tokens.next.id === ",") {
warning("W070", state.tokens.curr);
} else if (state.tokens.next.id === "}" && !state.inES5()) {
Expand Down Expand Up @@ -3581,7 +3581,7 @@ var JSHINT = (function() {
if (state.tokens.next.id !== ",") {
break;
}
comma();
parseComma();
}
if (letblock) {
advance(")");
Expand Down Expand Up @@ -3690,7 +3690,7 @@ var JSHINT = (function() {
if (state.tokens.next.id !== ",") {
break;
}
comma();
parseComma();
}

return this;
Expand Down Expand Up @@ -4313,7 +4313,7 @@ var JSHINT = (function() {
if (state.tokens.next.id !== ",") {
break;
}
comma();
parseComma();
}
}
}
Expand All @@ -4337,7 +4337,7 @@ var JSHINT = (function() {
if (state.tokens.next.id !== ",") {
break;
}
comma();
parseComma();
}
}
advance(")", t);
Expand Down Expand Up @@ -5284,7 +5284,7 @@ var JSHINT = (function() {
combine(predefined, g || {});

//reset values
comma.first = true;
parseComma.first = true;

advance();
switch (state.tokens.next.id) {
Expand Down
7 changes: 7 additions & 0 deletions tests/unit/fixtures/parsingCommas.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
for ( 0,
,; ; ) {}


for ( ; ; 0,
,) {}

30 changes: 30 additions & 0 deletions tests/unit/parser.js
Original file line number Diff line number Diff line change
Expand Up @@ -7407,3 +7407,33 @@ exports.lazyIdentifierChecks = function (test) {

test.done();
};

exports.parsingCommas = function (test) {
var src = fs.readFileSync(__dirname + '/fixtures/parsingCommas.js', 'utf8');

TestRun(test)
.addError(2, "Unexpected ','.")
.addError(2, "Comma warnings can be turned off with 'laxcomma'.")
.addError(1, "Bad line breaking before ','.")
.addError(2, "Expected an identifier and instead saw ';'.")
.addError(2, "Expected an identifier and instead saw ')'.")
.addError(2, "Expected ';' and instead saw '{'.")
.addError(2, "Expected an identifier and instead saw '}'.")
.addError(5, "Expected ')' to match '(' from line 1 and instead saw 'for'.")
.addError(5, "Expected an identifier and instead saw ';'.")
.addError(5, "Expected ')' to match '(' from line 5 and instead saw ';'.")
.addError(5, "Expected an assignment or function call and instead saw an expression.")
.addError(5, "Missing semicolon.")
.addError(6, "Unexpected ','.")
.addError(5, "Expected an assignment or function call and instead saw an expression.")
.addError(5, "Missing semicolon.")
.addError(6, "Expected an identifier and instead saw ','.")
.addError(6, "Expected an assignment or function call and instead saw an expression.")
.addError(6, "Missing semicolon.")
.addError(6, "Expected an identifier and instead saw ')'.")
.addError(6, "Expected an assignment or function call and instead saw an expression.")
.addError(6, "Missing semicolon.")
.test(src);

test.done();
};

0 comments on commit 2e0026f

Please sign in to comment.