@@ -167,6 +167,15 @@ func downloadSimulators() ([]string, error) {
167
167
return nil , err
168
168
}
169
169
170
+ hashesMatch := func (file * os.File , expectedHash string ) (bool , error ) {
171
+ hasher := sha256 .New ()
172
+ if _ , err := io .Copy (hasher , file ); err != nil {
173
+ return false , err
174
+ }
175
+ actualHash := hex .EncodeToString (hasher .Sum (nil ))
176
+ return actualHash == expectedHash , nil
177
+ }
178
+
170
179
fileNotExistOrHashMismatch := func (filename , expectedHash string ) (bool , error ) {
171
180
file , err := os .Open (filename )
172
181
if os .IsNotExist (err ) {
@@ -177,13 +186,11 @@ func downloadSimulators() ([]string, error) {
177
186
}
178
187
defer file .Close ()
179
188
180
- hasher := sha256 . New ( )
181
- if _ , err := io . Copy ( hasher , file ); err != nil {
189
+ match , err := hashesMatch ( file , expectedHash )
190
+ if err != nil {
182
191
return false , err
183
192
}
184
- actualHash := hex .EncodeToString (hasher .Sum (nil ))
185
-
186
- return actualHash != expectedHash , nil
193
+ return ! match , nil
187
194
}
188
195
189
196
downloadFile := func (url , filename string ) error {
@@ -222,13 +229,30 @@ func downloadSimulators() ([]string, error) {
222
229
return nil , err
223
230
}
224
231
if doDownload {
232
+ fmt .Printf ("Downloading %s to %s\n " , simulator .URL , filename )
225
233
if err := downloadFile (simulator .URL , filename ); err != nil {
226
234
return nil , err
227
235
}
236
+ // If we downloaded the file, check again the hash.
237
+ file , err := os .Open (filename )
238
+ if err != nil {
239
+ // This should never happen, as we just downloaded it
240
+ return nil , err
241
+ }
242
+ match , err := hashesMatch (file , simulator .Sha256 )
243
+ if err != nil {
244
+ return nil , err
245
+ }
246
+ if ! match {
247
+ return nil , errp .Newf ("downloaded file %s does not match expected hash %s" , filename , simulator .Sha256 )
248
+ }
228
249
if err := os .Chmod (filename , 0755 ); err != nil {
229
250
return nil , err
230
251
}
252
+ } else {
253
+ fmt .Printf ("Skipping download of %s, file %s already exists and has the correct hash\n " , simulator .URL , filename )
231
254
}
255
+
232
256
filenames = append (filenames , filename )
233
257
}
234
258
return filenames , nil
0 commit comments