Skip to content

Commit 343b922

Browse files
author
Esben Sparre Andreasen
committed
JS: fix an off-by-one error in the AngularJS expression AST
1 parent 87f9ecb commit 343b922

File tree

5 files changed

+26
-1
lines changed

5 files changed

+26
-1
lines changed

javascript/ql/src/semmle/javascript/frameworks/AngularJS/AngularJSExpressions.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -592,7 +592,7 @@ class NgSingleFilter extends TNgSingleFilter, NgAstNode {
592592
* Gets the `i`th argument expression of this filter call.
593593
*/
594594
NgExpr getArgument(int i) {
595-
result = getChild(1).(NgFilterArgument).getElement(i)
595+
result = getChild(0).(NgFilterArgument).getElement(i)
596596
}
597597

598598
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
| (NgCallExpr: (NgVarExpr: VAR18a) (NgConsCallArgument: (NgVarExpr: VAR18b))) | 0 | (NgVarExpr: VAR18b) |
2+
| (NgCallExpr: (NgVarExpr: VAR19a) (NgConsCallArgument: (NgVarExpr: VAR19b) (NgConsCallArgument: (NgVarExpr: VAR19c)))) | 0 | (NgVarExpr: VAR19b) |
3+
| (NgCallExpr: (NgVarExpr: VAR19a) (NgConsCallArgument: (NgVarExpr: VAR19b) (NgConsCallArgument: (NgVarExpr: VAR19c)))) | 1 | (NgVarExpr: VAR19c) |
4+
| (NgCallExpr: (NgVarExpr: VAR20) (NgConsCallArgument: 20)) | 0 | 20 |
5+
| (NgCallExpr: (NgVarExpr: VAR21) (NgConsCallArgument: 'string21')) | 0 | 'string21' |
6+
| (NgCallExpr: (NgVarExpr: VAR22a) (NgConsCallArgument: (NgVarExpr: VAR22b) (NgConsCallArgument: 'string22'))) | 0 | (NgVarExpr: VAR22b) |
7+
| (NgCallExpr: (NgVarExpr: VAR22a) (NgConsCallArgument: (NgVarExpr: VAR22b) (NgConsCallArgument: 'string22'))) | 1 | 'string22' |
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import javascript
2+
private import AngularJS
3+
4+
from NgCallExpr call, int i
5+
select call, i, call.getArgument(i)
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
| (NgSingleFilter: FILTER10 (NgFilterArgument: (NgVarExpr: FILTER_ARG10))) | 0 | (NgVarExpr: FILTER_ARG10) |
2+
| (NgSingleFilter: FILTER11 (NgFilterArgument: (NgVarExpr: FILTER_ARG11a) (NgFilterArgument: (NgVarExpr: FILTER_ARG11b)))) | 0 | (NgVarExpr: FILTER_ARG11a) |
3+
| (NgSingleFilter: FILTER11 (NgFilterArgument: (NgVarExpr: FILTER_ARG11a) (NgFilterArgument: (NgVarExpr: FILTER_ARG11b)))) | 1 | (NgVarExpr: FILTER_ARG11b) |
4+
| (NgSingleFilter: FILTER14a (NgFilterArgument: (NgVarExpr: FILTER_ARG14a))) | 0 | (NgVarExpr: FILTER_ARG14a) |
5+
| (NgSingleFilter: FILTER15 (NgFilterArgument: (NgDotExpr: (NgVarExpr: VAR15).FIELD15))) | 0 | (NgDotExpr: (NgVarExpr: VAR15).FIELD15) |
6+
| (NgSingleFilter: FILTER15 (NgFilterArgument: (NgVarExpr: VAR15))) | 0 | (NgVarExpr: VAR15) |
7+
| (NgSingleFilter: FILTER16 (NgFilterArgument: 16)) | 0 | 16 |
8+
| (NgSingleFilter: FILTER_ARG11a (NgFilterArgument: (NgVarExpr: FILTER_ARG11b))) | 0 | (NgVarExpr: FILTER_ARG11b) |
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import javascript
2+
private import AngularJS
3+
4+
from NgSingleFilter filter, int i
5+
select filter, i, filter.getArgument(i)

0 commit comments

Comments
 (0)