... |
... |
@@ -2110,8 +2110,6 @@ class UpdatePatch { |
2110
|
2110
|
// over writing nsIUpdatePatch attributes.
|
2111
|
2111
|
_attrNames = [
|
2112
|
2112
|
"errorCode",
|
2113
|
|
- "hashFunction",
|
2114
|
|
- "hashValue",
|
2115
|
2113
|
"finalURL",
|
2116
|
2114
|
"selected",
|
2117
|
2115
|
"size",
|
... |
... |
@@ -2164,8 +2162,6 @@ class UpdatePatch { |
2164
|
2162
|
}
|
2165
|
2163
|
break;
|
2166
|
2164
|
case "finalURL":
|
2167
|
|
- case "hashFunction":
|
2168
|
|
- case "hashValue":
|
2169
|
2165
|
case "state":
|
2170
|
2166
|
case "type":
|
2171
|
2167
|
case "URL":
|
... |
... |
@@ -2186,8 +2182,6 @@ class UpdatePatch { |
2186
|
2182
|
*/
|
2187
|
2183
|
serialize(updates) {
|
2188
|
2184
|
var patch = updates.createElementNS(URI_UPDATE_NS, "patch");
|
2189
|
|
- patch.setAttribute("hashFunction", this.hashFunction);
|
2190
|
|
- patch.setAttribute("hashValue", this.hashValue);
|
2191
|
2185
|
patch.setAttribute("size", this.size);
|
2192
|
2186
|
patch.setAttribute("type", this.type);
|
2193
|
2187
|
patch.setAttribute("URL", this.URL);
|
... |
... |
@@ -3757,18 +3751,20 @@ export class UpdateService { |
3757
|
3751
|
|
3758
|
3752
|
switch (update.type) {
|
3759
|
3753
|
case "major":
|
3760
|
|
- if (!majorUpdate) {
|
|
3754
|
+ if (!majorUpdate || majorUpdate.unsupported) {
|
3761
|
3755
|
majorUpdate = update;
|
3762
|
3756
|
} else if (
|
|
3757
|
+ !update.unsupported &&
|
3763
|
3758
|
vc.compare(majorUpdate.appVersion, update.appVersion) <= 0
|
3764
|
3759
|
) {
|
3765
|
3760
|
majorUpdate = update;
|
3766
|
3761
|
}
|
3767
|
3762
|
break;
|
3768
|
3763
|
case "minor":
|
3769
|
|
- if (!minorUpdate) {
|
|
3764
|
+ if (!minorUpdate || minorUpdate.unsupported) {
|
3770
|
3765
|
minorUpdate = update;
|
3771
|
3766
|
} else if (
|
|
3767
|
+ !update.unsupported &&
|
3772
|
3768
|
vc.compare(minorUpdate.appVersion, update.appVersion) <= 0
|
3773
|
3769
|
) {
|
3774
|
3770
|
minorUpdate = update;
|
... |
... |
@@ -5876,56 +5872,7 @@ class Downloader { |
5876
|
5872
|
}
|
5877
|
5873
|
|
5878
|
5874
|
LOG("Downloader:_verifyDownload downloaded size == expected size.");
|
5879
|
|
- let fileStream = Cc[
|
5880
|
|
- "@mozilla.org/network/file-input-stream;1"
|
5881
|
|
- ].createInstance(Ci.nsIFileInputStream);
|
5882
|
|
- fileStream.init(
|
5883
|
|
- destination,
|
5884
|
|
- FileUtils.MODE_RDONLY,
|
5885
|
|
- FileUtils.PERMS_FILE,
|
5886
|
|
- 0
|
5887
|
|
- );
|
5888
|
|
-
|
5889
|
|
- let digest;
|
5890
|
|
- try {
|
5891
|
|
- let hash = Cc["@mozilla.org/security/hash;1"].createInstance(
|
5892
|
|
- Ci.nsICryptoHash
|
5893
|
|
- );
|
5894
|
|
- var hashFunction =
|
5895
|
|
- Ci.nsICryptoHash[this._patch.hashFunction.toUpperCase()];
|
5896
|
|
- if (hashFunction == undefined) {
|
5897
|
|
- throw Components.Exception("", Cr.NS_ERROR_UNEXPECTED);
|
5898
|
|
- }
|
5899
|
|
- hash.init(hashFunction);
|
5900
|
|
- hash.updateFromStream(fileStream, -1);
|
5901
|
|
- // NOTE: For now, we assume that the format of _patch.hashValue is hex
|
5902
|
|
- // encoded binary (such as what is typically output by programs like
|
5903
|
|
- // sha1sum). In the future, this may change to base64 depending on how
|
5904
|
|
- // we choose to compute these hashes.
|
5905
|
|
- hash = hash.finish(false);
|
5906
|
|
- digest = Array.from(hash, (c, i) =>
|
5907
|
|
- hash.charCodeAt(i).toString(16).padStart(2, "0")
|
5908
|
|
- ).join("");
|
5909
|
|
- } catch (e) {
|
5910
|
|
- LOG(
|
5911
|
|
- "Downloader:_verifyDownload - failed to compute hash of the downloaded update archive"
|
5912
|
|
- );
|
5913
|
|
- digest = "";
|
5914
|
|
- }
|
5915
|
|
-
|
5916
|
|
- fileStream.close();
|
5917
|
|
-
|
5918
|
|
- if (digest == this._patch.hashValue.toLowerCase()) {
|
5919
|
|
- LOG("Downloader:_verifyDownload hashes match.");
|
5920
|
|
- return true;
|
5921
|
|
- }
|
5922
|
|
-
|
5923
|
|
- LOG("Downloader:_verifyDownload hashes do not match. ");
|
5924
|
|
- AUSTLMY.pingDownloadCode(
|
5925
|
|
- this.isCompleteUpdate,
|
5926
|
|
- AUSTLMY.DWNLD_ERR_VERIFY_NO_HASH_MATCH
|
5927
|
|
- );
|
5928
|
|
- return false;
|
|
5875
|
+ return true;
|
5929
|
5876
|
}
|
5930
|
5877
|
|
5931
|
5878
|
/**
|
... |
... |
@@ -6565,9 +6512,6 @@ class Downloader { |
6565
|
6512
|
" is higher than patch size: " +
|
6566
|
6513
|
this._patch.size
|
6567
|
6514
|
);
|
6568
|
|
- // It's important that we use a different code than
|
6569
|
|
- // NS_ERROR_CORRUPTED_CONTENT so that tests can verify the difference
|
6570
|
|
- // between a hash error and a wrong download error.
|
6571
|
6515
|
AUSTLMY.pingDownloadCode(
|
6572
|
6516
|
this.isCompleteUpdate,
|
6573
|
6517
|
AUSTLMY.DWNLD_ERR_PATCH_SIZE_LARGER
|
... |
... |
@@ -6586,9 +6530,6 @@ class Downloader { |
6586
|
6530
|
" is not equal to expected patch size: " +
|
6587
|
6531
|
this._patch.size
|
6588
|
6532
|
);
|
6589
|
|
- // It's important that we use a different code than
|
6590
|
|
- // NS_ERROR_CORRUPTED_CONTENT so that tests can verify the difference
|
6591
|
|
- // between a hash error and a wrong download error.
|
6592
|
6533
|
AUSTLMY.pingDownloadCode(
|
6593
|
6534
|
this.isCompleteUpdate,
|
6594
|
6535
|
AUSTLMY.DWNLD_ERR_PATCH_SIZE_NOT_EQUAL
|