Skip to content

Commit 9df5d4b

Browse files
authored
Merge pull request #660 from esben-semmle/js/angularjs-alert-locations
Approved by xiemaisi
2 parents 14488cb + fac638f commit 9df5d4b

File tree

9 files changed

+22
-6
lines changed

9 files changed

+22
-6
lines changed

javascript/ql/src/AngularJS/DuplicateDependency.ql

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
*/
1111

1212
import javascript
13+
import semmle.javascript.RestrictedLocations
1314

1415
predicate isRepeatedDependency(AngularJS::InjectableFunction f, string name, ASTNode location) {
1516
exists(int i, int j | i < j and
@@ -20,4 +21,4 @@ predicate isRepeatedDependency(AngularJS::InjectableFunction f, string name, AST
2021
from AngularJS::InjectableFunction f, ASTNode node, string name
2122
where isRepeatedDependency(f, name, node) and
2223
not count(f.asFunction().getParameterByName(name)) > 1 // avoid duplicating reports from js/duplicate-parameter-name
23-
select f, "This function has a duplicate dependency '$@'.", node, name
24+
select (FirstLineOf)f.asFunction(), "This function has a duplicate dependency '$@'.", node, name

javascript/ql/src/AngularJS/RepeatedInjection.ql

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@
1010
*/
1111

1212
import javascript
13+
import semmle.javascript.RestrictedLocations
1314

1415
from AngularJS::InjectableFunction f, ASTNode explicitInjection
1516
where count(f.getAnExplicitDependencyInjection()) > 1 and
1617
explicitInjection = f.getAnExplicitDependencyInjection()
17-
select f.asFunction(), "This function has $@ defined in multiple places.", explicitInjection, "dependency injections"
18+
select (FirstLineOf)f.asFunction(), "This function has $@ defined in multiple places.", explicitInjection, "dependency injections"

javascript/ql/src/AngularJS/UnusedAngularDependency.ql

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
import javascript
1313
import Declarations.UnusedParameter
14+
import semmle.javascript.RestrictedLocations
1415

1516
predicate isUnusedParameter(Function f, string msg, Parameter parameter) {
1617
exists(Variable pv |
@@ -36,4 +37,4 @@ predicate isMissingParameter(AngularJS::InjectableFunction f, string msg, ASTNod
3637

3738
from AngularJS::InjectableFunction f, string message, ASTNode location
3839
where isUnusedParameter(f.asFunction(), message, location) or isMissingParameter(f, message, location)
39-
select location, message
40+
select (FirstLineOf)location, message
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
| duplicates.js:2:5:2:18 | function f(){} | This function has a duplicate dependency '$@'. | duplicates.js:3:26:3:31 | 'dup5' | dup5 |
2-
| duplicates.js:6:14:6:57 | ['dup2a ... p2b){}] | This function has a duplicate dependency '$@'. | duplicates.js:6:24:6:30 | 'dup2a' | dup2a |
3-
| duplicates.js:7:14:7:57 | ['dup3b ... p3b){}] | This function has a duplicate dependency '$@'. | duplicates.js:7:24:7:30 | 'dup3b' | dup3b |
4-
| duplicates.js:8:14:8:79 | ['dup4' ... p4C){}] | This function has a duplicate dependency '$@'. | duplicates.js:8:35:8:40 | 'dup4' | dup4 |
2+
| duplicates.js:6:33:6:56 | functio ... up2b){} | This function has a duplicate dependency '$@'. | duplicates.js:6:24:6:30 | 'dup2a' | dup2a |
3+
| duplicates.js:7:33:7:56 | functio ... up3b){} | This function has a duplicate dependency '$@'. | duplicates.js:7:24:7:30 | 'dup3b' | dup3b |
4+
| duplicates.js:8:43:8:78 | functio ... up4C){} | This function has a duplicate dependency '$@'. | duplicates.js:8:35:8:40 | 'dup4' | dup4 |
5+
| duplicates.js:15:35:15:112 | functio ... } | This function has a duplicate dependency '$@'. | duplicates.js:15:25:15:32 | 'dup11a' | dup11a |

javascript/ql/test/query-tests/AngularJS/DuplicateDependency/duplicates.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,7 @@
1212
.run(['notDup8a', 'notDup8b', function(notDup8a, notDup8b){}]) // OK
1313
.run(['notDup9a', 'notDup9b', function(notDup9c, notDup9d){}]) // OK
1414
.run(['dup10a', 'dup10a', 'dup10a', function(dup10a, dup10a, dup10a){}]) // OK (flagged by js/duplicate-parameter-name)
15+
.run(['dup11a', 'dup11a', function(dup11a, dup11b){ // NOT OK (alert formatting for multi-line function)
16+
}])
1517
;
1618
})();

javascript/ql/test/query-tests/AngularJS/RepeatedInjection/RepeatedInjection.expected

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,5 @@
22
| repeated-injection.js:6:5:6:31 | functio ... name){} | This function has $@ defined in multiple places. | repeated-injection.js:8:54:8:73 | ['name', $Injected2] | dependency injections |
33
| repeated-injection.js:10:5:10:31 | functio ... name){} | This function has $@ defined in multiple places. | repeated-injection.js:11:5:11:22 | $Injected3.$inject | dependency injections |
44
| repeated-injection.js:10:5:10:31 | functio ... name){} | This function has $@ defined in multiple places. | repeated-injection.js:12:5:12:22 | $Injected3.$inject | dependency injections |
5+
| repeated-injection.js:33:5:33:84 | functio ... )\\n } | This function has $@ defined in multiple places. | repeated-injection.js:35:5:35:23 | $Injected10.$inject | dependency injections |
6+
| repeated-injection.js:33:5:33:84 | functio ... )\\n } | This function has $@ defined in multiple places. | repeated-injection.js:36:56:36:76 | ['name' ... cted10] | dependency injections |

javascript/ql/test/query-tests/AngularJS/RepeatedInjection/repeated-injection.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,9 @@
3030

3131
angular.module('app9').controller('controller9', ['name', function inline9(name){}]); // OK
3232

33+
function $Injected10(name){ // NOT OK (alert formatting for multi-line function)
34+
}
35+
$Injected10.$inject = ['name'];
36+
angular.module('app10').controller('controller10', ['name', $Injected10]);
37+
3338
})();

javascript/ql/test/query-tests/AngularJS/UnusedAngularDependency/UnusedAngularDependency.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22
| unused-angular-dependency.js:14:14:14:39 | ["unuse ... n() {}] | This function has 0 parameters, but 1 dependency is injected into it. |
33
| unused-angular-dependency.js:16:14:16:53 | ["used2 ... d2) {}] | This function has 1 parameter, but 2 dependencies are injected into it. |
44
| unused-angular-dependency.js:17:14:17:52 | ["unuse ... n() {}] | This function has 0 parameters, but 2 dependencies are injected into it. |
5+
| unused-angular-dependency.js:18:14:18:105 | ["used2 ... }] | This function has 1 parameter, but 2 dependencies are injected into it. |

javascript/ql/test/query-tests/AngularJS/UnusedAngularDependency/unused-angular-dependency.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
.run(f2)
1616
.run(["used2", "unused9", function(used2) {}]) // NOT OK
1717
.run(["unused10", "unused11", function() {}]) // NOT OK
18+
.run(["used2", "unused12", function(used2) { // NOT OK (alert formatting for multi-line function)
19+
}])
1820
;
1921
})();
2022
angular.module('app2')

0 commit comments

Comments
 (0)