@@ -11,6 +11,7 @@ import (
11
11
"io"
12
12
"os"
13
13
"path/filepath"
14
+ "sort"
14
15
"strings"
15
16
"time"
16
17
@@ -186,13 +187,12 @@ func getConfig(fn string) (*config.Configuration, *goapk.PackageInfo, *spdx.Pack
186
187
}
187
188
188
189
func diffAPKs (old , new string ) error {
189
- oldh , newh := sha256 .New (), sha256 .New ()
190
190
oldf , err := os .Open (old )
191
191
if err != nil {
192
192
return fmt .Errorf ("failed to open old APK %s: %v" , old , err )
193
193
}
194
194
defer oldf .Close ()
195
- oldgr , err := gzip .NewReader (io . TeeReader ( oldf , oldh ) )
195
+ oldgr , err := gzip .NewReader (oldf )
196
196
if err != nil {
197
197
return fmt .Errorf ("failed to create gzip reader for old APK %s: %v" , old , err )
198
198
}
@@ -207,11 +207,11 @@ func diffAPKs(old, new string) error {
207
207
return fmt .Errorf ("failed to open new APK %s: %v" , new , err )
208
208
}
209
209
defer newf .Close ()
210
- newgr , err := gzip .NewReader (io . TeeReader ( newf , newh ) )
210
+ newgr , err := gzip .NewReader (newf )
211
211
if err != nil {
212
- return fmt .Errorf ("failed to create gzip reader for old APK %s: %v" , old , err )
212
+ return fmt .Errorf ("failed to create gzip reader for new APK %s: %v" , new , err )
213
213
}
214
- defer oldgr .Close ()
214
+ defer newgr .Close ()
215
215
newm , err := filemap (tar .NewReader (newgr ))
216
216
if err != nil {
217
217
return fmt .Errorf ("failed to create file map for new APK %s: %v" , new , err )
@@ -224,7 +224,7 @@ func diffAPKs(old, new string) error {
224
224
} else if o != n {
225
225
errs = append (errs , fmt .Errorf ("changed: %s: digests %s -> %s" , k , o .digest , n .digest ))
226
226
if o .contents != n .contents {
227
- errs = append (errs , fmt .Errorf ("contents diff: %s (-old,new):\n %s" , k , cmp .Diff (o .contents , n .contents )))
227
+ errs = append (errs , fmt .Errorf ("contents diff: %s (-old,+ new):\n %s" , k , cmp .Diff (o .contents , n .contents )))
228
228
}
229
229
}
230
230
}
@@ -234,6 +234,26 @@ func diffAPKs(old, new string) error {
234
234
}
235
235
}
236
236
237
+ oldh , newh := sha256 .New (), sha256 .New ()
238
+
239
+ var keys []string
240
+ for k := range oldm {
241
+ keys = append (keys , k )
242
+ }
243
+ sort .Strings (keys )
244
+ for _ , k := range keys {
245
+ fmt .Fprintf (oldh , "%s:%s:" , k , oldm [k ].digest )
246
+ }
247
+
248
+ keys = keys [:0 ] // reuse slice
249
+ for k := range newm {
250
+ keys = append (keys , k )
251
+ }
252
+ sort .Strings (keys )
253
+ for _ , k := range keys {
254
+ fmt .Fprintf (newh , "%s:%s:" , k , newm [k ].digest )
255
+ }
256
+
237
257
oldd , newd := fmt .Sprintf ("%x" , oldh .Sum (nil )), fmt .Sprintf ("%x" , newh .Sum (nil ))
238
258
if oldd != newd {
239
259
errs = append (errs , fmt .Errorf ("APK digest diff: %s -> %s" , oldd , newd ))
0 commit comments