|
Some loop variables are not declared as local, and so will use global scope vars if they exist. This leads to strangeness where the following is actually an infinite loop:
for (var i = 0; i < 100; i++) {
|
var rt = new ReplSetTest({ name: 'testSet', nodes: 1 });
|
rt.startSet();
|
rt.initiate();
|
// ...
|
rt.stopSet();
|
}
|
whereas it works if i is changed to j, or the whole thing is wrapped into a function.
The occurrences are:
$ ag '\bfor\((?! *var)' src/mongo/shell src/mongo/scripting
|
src/mongo/shell/servers.js
|
189: for( key in pathOpts ){
|
|
src/mongo/shell/shardingtest.js
|
610: for( i=0; i<this._alldbpaths.length; i++ ){
|
|
src/mongo/shell/collection.js
|
1478: for( shard in allSplitPoints ){
|
|
src/mongo/shell/replsettest.js
|
153: for(i=0; i<this.ports.length; i++) {
|
172: for(i=0; i<this.ports.length; i++) {
|
257: for( n = 0 ; n < this.ports.length; n++ ) {
|
804: for( i=0; i<this._alldbpaths.length; i++ ){
|
Luckily only jstests and esoteric functions are affected.
A full audit/lint of all js local variables can be left for SERVER-19167 (or some other more appropriate ticket).
|