From 0d4ae6a8cbf18f3bdede0c4e8c73f93196a06d4d Mon Sep 17 00:00:00 2001
From: Matt Corallo <git@bluematt.me>
Date: Tue, 22 Jul 2014 21:33:35 -0400
Subject: [PATCH] Fix undefined variable in for's (browser update to strict
 mode?)

---
 js/api.js         |  4 +++-
 js/crypto.js      | 10 +++++-----
 js/helpers.js     | 16 ++++++++--------
 js/sendmessage.js | 12 +++++++-----
 4 files changed, 23 insertions(+), 19 deletions(-)

diff --git a/js/api.js b/js/api.js
index b43dcb3d4a..fc2d4b4e9b 100644
--- a/js/api.js
+++ b/js/api.js
@@ -17,6 +17,8 @@
 window.textsecure = window.textsecure || {};
 
 window.textsecure.api = function() {
+	'use strict';
+
 	var self = {};
 
 	/************************************************
@@ -147,7 +149,7 @@ window.textsecure.api = function() {
 
 		keys.preKeys = [];
 		var j = 0;
-		for (i in genKeys.preKeys)
+		for (var i in genKeys.preKeys)
 			keys.preKeys[j++] = {keyId: i, publicKey: btoa(getString(genKeys.preKeys[i].publicKey))};
 
 		//TODO: This is just to make the server happy (v2 clients should choke on publicKey),
diff --git a/js/crypto.js b/js/crypto.js
index a22eaa95fa..692e2a260e 100644
--- a/js/crypto.js
+++ b/js/crypto.js
@@ -52,7 +52,7 @@ window.textsecure.crypto = function() {
 
 	function objectContainsKeys(object) {
 		var count = 0;
-		for (key in object) {
+		for (var key in object) {
 			count++;
 			break;
 		}
@@ -156,7 +156,7 @@ window.textsecure.crypto = function() {
 
 			if (!doDeleteSession) {
 				var keysLeft = false;
-				for (key in session) {
+				for (var key in session) {
 					if (key != "indexInfo" && key != "indexInfo" && key != "oldRatchetList") {
 						keysLeft = true;
 						break;
@@ -186,7 +186,7 @@ window.textsecure.crypto = function() {
 		if (sessions === undefined)
 			return undefined;
 
-		for (key in sessions)
+		for (var key in sessions)
 			if (sessions[key].indexInfo.closed == -1)
 				return sessions[key];
 		return undefined;
@@ -200,7 +200,7 @@ window.textsecure.crypto = function() {
 		var searchKey = getString(remoteEphemeralKey);
 
 		var openSession = undefined;
-		for (key in sessions) {
+		for (var key in sessions) {
 			if (sessions[key].indexInfo.closed == -1) {
 				if (openSession !== undefined)
 					throw new Error("Datastore inconsistensy: multiple open sessions for " + encodedNumber);
@@ -465,7 +465,7 @@ window.textsecure.crypto = function() {
 	var closeSession = function(session) {
 		// Clear any data which would allow session continuation:
 		// Lock down current receive ratchet
-		for (key in session)
+		for (var key in session)
 			if (key.chainKey !== undefined && key.chainKey.key !== undefined)
 				delete key.chainKey.key;
 		// Delete current sending ratchet
diff --git a/js/helpers.js b/js/helpers.js
index 80bdaddf84..912c1fe33d 100644
--- a/js/helpers.js
+++ b/js/helpers.js
@@ -264,7 +264,7 @@ window.textsecure.utils = function() {
 			return res;
 		} else if (thing === Object(thing)) {
 			var res = {};
-			for (key in thing)
+			for (var key in thing)
 				res[key] = ensureStringed(thing[key]);
 			return res;
 		}
@@ -351,7 +351,7 @@ window.textsecure.storage = function() {
 				throw new Error("Identity key changed");
 			else {
 				var updated = false;
-				for (i in map.devices) {
+				for (var i in map.devices) {
 					if (map.devices[i].encodedNumber == deviceObject.encodedNumber) {
 						map.devices[i] = deviceObject;
 						updated = true;
@@ -376,7 +376,7 @@ window.textsecure.storage = function() {
 			if (devices === undefined)
 				return undefined;
 
-			for (i in devices)
+			for (var i in devices)
 				if (devices[i].encodedNumber == encodedNumber)
 					return devices[i];
 
@@ -390,9 +390,9 @@ window.textsecure.storage = function() {
 
 			var newDevices = [];
 			var devicesRemoved = 0;
-			for (i in map.devices) {
+			for (var i in map.devices) {
 				var keep = true;
-				for (j in deviceIdsToRemove)
+				for (var j in deviceIdsToRemove)
 					if (map.devices[i].encodedNumber == number + "." + deviceIdsToRemove[j])
 						keep = false;
 
@@ -445,7 +445,7 @@ window.textsecure.storage = function() {
 			var me = textsecure.utils.unencodeNumber(textsecure.storage.getUnencrypted("number_id"))[0];
 			var haveMe = false;
 			var finalNumbers = [];
-			for (i in numbers) {
+			for (var i in numbers) {
 				var number = textsecure.utils.verifyNumber(numbers[i]);
 				if (number == me)
 					haveMe = true;
@@ -501,7 +501,7 @@ window.textsecure.storage = function() {
 			if (group === undefined)
 				return undefined;
 
-			for (i in numbers) {
+			for (var i in numbers) {
 				var number = textsecure.utils.verifyNumber(numbers[i]);
 				if (group.numbers.indexOf(number) < 0) {
 					group.numbers.push(number);
@@ -744,7 +744,7 @@ window.textsecure.subscribeToPush = function() {
 							}
 						}
 
-						for (i in decrypted.attachments)
+						for (var i in decrypted.attachments)
 							promises.push(handleAttachment(decrypted.attachments[i]));
 						return Promise.all(promises).then(function() {
 							message_callback({pushMessage: proto, message: decrypted});
diff --git a/js/sendmessage.js b/js/sendmessage.js
index bae55748de..d7edc5a3d1 100644
--- a/js/sendmessage.js
+++ b/js/sendmessage.js
@@ -1,10 +1,12 @@
 // sendMessage(numbers = [], message = PushMessageContentProto, callback(success/failure map))
 window.textsecure.messaging = function() {
+	'use strict';
+
 	var self = {};
 
 	function getKeysForNumber(number, updateDevices) {
 		return textsecure.api.getKeysForNumber(number).then(function(response) {
-			for (i in response.devices) {
+			for (var i in response.devices) {
 				if (updateDevices === undefined || updateDevices.indexOf(response.devices[i].deviceId) > -1)
 					textsecure.storage.devices.saveDeviceObject({
 						encodedNumber: number + "." + response.devices[i].deviceId,
@@ -65,7 +67,7 @@ window.textsecure.messaging = function() {
 	var refreshGroups = function(number) {
 		var groups = textsecure.storage.groups.getGroupListForNumber(number);
 		var promises = [];
-		for (i in groups) {
+		for (var i in groups) {
 			var group = textsecure.storage.groups.getGroup(groups[i]);
 
 			var proto = new textsecure.protos.PushMessageContentProtobuf();
@@ -218,7 +220,7 @@ window.textsecure.messaging = function() {
 		proto.body = messageText;
 
 		var promises = [];
-		for (i in attachments)
+		for (var i in attachments)
 			promises.push(makeAttachmentPointer(attachments[i]));
 		return Promise.all(promises).then(function(attachmentsArray) {
 			proto.attachments = attachmentsArray;
@@ -228,7 +230,7 @@ window.textsecure.messaging = function() {
 
 	self.closeSession = function(number) {
 		var devices = textsecure.storage.devices.getDeviceObjectsForNumber(number);
-		for (i in devices)
+		for (var i in devices)
 			textsecure.crypto.closeOpenSessionForDevice(devices[i].encodedNumber);
 
 		var proto = new textsecure.protos.PushMessageContentProtobuf();
@@ -248,7 +250,7 @@ window.textsecure.messaging = function() {
 			return new Promise(function(resolve, reject) { reject(new Error("Unknown Group")); });
 
 		var promises = [];
-		for (i in attachments)
+		for (var i in attachments)
 			promises.push(makeAttachmentPointer(attachments[i]));
 		return Promise.all(promises).then(function(attachmentsArray) {
 			proto.attachments = attachmentsArray;