572abbb81cfa12cddf742fa35cd8a4b9eebdc7d1 |
|
23-Feb-2018 |
Tianjie Xu <xunchang@google.com> |
Remove the assumption of target chunk size in imgdiff In the split mode of imgdiff, we used to assume that the size of a split target chunk is always greater than the blocksize i.e. 4096. This may lead to the following assertion failure: I0221 04:57:33.451323 818464 common.py:205 imgdiff F 02-21 04:57:33 821203 821203 imgdiff.cpp:999] Check failed: tgt_size >= BLOCK_SIZE (tgt_size=476, BLOCK_SIZE=4096) This CL removes the assumption and handles the edge cases. Test: generate and verify the incremental update for TFs in the bug; unit test passes Bug: 73757557 Bug: 73711365 Change-Id: Iadbb4ee658995f5856cd488f3793980881a59620
/bootable/recovery/applypatch/imgdiff.cpp
|
6e293c99c1c8818fd28edc8dcfc13b5e4f048188 |
|
16-Nov-2017 |
Tianjie Xu <xunchang@google.com> |
Switch imgdiff to libbase logging Also add a verbose option. And we won't print messages of 'info' severity unless '-v' is present. Test: run imgdiff and check the logs. Change-Id: I1b90874baea8e72e2a2323a0b63bc5d35e653e6b
/bootable/recovery/applypatch/imgdiff.cpp
|
3d24b7bca60dff1ca07d3ee60cc9749fc61e9b5d |
|
24-Oct-2017 |
Treehugger Robot <treehugger-gerrit@google.com> |
Merge "Use SuffixArrayIndexInterface opaque type instead of the underlying data pointer."
|
fa188268e43ab75732a480d6b2ec748d9d0dbfae |
|
10-Oct-2017 |
Alex Deymo <deymo@google.com> |
Use SuffixArrayIndexInterface opaque type instead of the underlying data pointer. bsdiff interface is changing such that it hides the suffix array pointer from the public interface. This allows to use a different suffix array data size depending on the input size, running much faster in the normal case. Bug: 34220646 Test: `make checkbuild`; Ran an incremental update generation on a non-A/B device. Change-Id: I78e766da56cf28bc7774b8c8e58527bc11d919fb
/bootable/recovery/applypatch/imgdiff.cpp
|
45685820029fb191fe8509418df91a049227ea3a |
|
13-Oct-2017 |
Tao Bao <tbao@google.com> |
otautil: Move RangeSet implementation into rangeset.cpp. Since it has grown much larger, users of the header shouldn't compile and carry their full copies. Also add missing header includes in imgdiff.cpp and imgdiff_test.cpp. Test: mmma bootable/recovery Test: recovery_unit_test; recovery_component_test; recovery_host_test Change-Id: I88ca54171765e5606ab0d61580fbc1ada578fd7d
/bootable/recovery/applypatch/imgdiff.cpp
|
09e468f84cc245fba61d69165b4af8f1ec4cdfd5 |
|
29-Sep-2017 |
Tao Bao <tbao@google.com> |
Move rangeset.h and print_sha1.h into otautil. Also drop the "bootable/recovery" path in LOCAL_C_INCLUDES from applypatch modules. Test: lunch aosp_{angler,bullhead,fugu,dragon,sailfish}-userdebug; mmma bootable/recovery Change-Id: Idd602a796894f971ee4f8fa3eafe36c42d9de986
/bootable/recovery/applypatch/imgdiff.cpp
|
82582b4562bd2ffa9ebe9d25ecdc6222b053d6ef |
|
01-Sep-2017 |
Tianjie Xu <xunchang@google.com> |
Output split information for imgdiff when handling large apks Add a mandatory option in imgdiff to write the split info (i.e. patch_size, tgt_size, src_ranges) to file when handling large apks. Therefore, the caller of imgdiff can create split transfers based on the info. Bug: 63542719 Test: unit tests pass Change-Id: I853d55d1f999fd576474faa81077f7307f4d856d
/bootable/recovery/applypatch/imgdiff.cpp
|
2903cddb58f6ee99116e0751a2305f75f9a86461 |
|
19-Aug-2017 |
Tianjie Xu <xunchang@google.com> |
Improve imgdiff for large zip files Due to the cache size limit for OTA generation, we used to split large zip files linearly into pieces and do bsdiff on them. As a result, i) we lose the advantage of imgdiff; ii) if there's an accidental order change of some huge files inside the zip, we'll create an insanely large patch. This patch splits the src&tgt more smartly based on the zip entry_name. If the entry_name is empty or no matching source is found for a target chunk, we'll skip adding its source and later do a bsdiff against the whole split source image (this rarely happens in our use cases except for the metadata inside a ziparchive). After the split, the target pieces are continuous and block aligned, while the sources pieces are mutually exclusive. (Some of the source blocks may not be used if there's no matching entry_name in the target.) Then we will generate patches accordingly between each split image pairs. Afterwards, if we apply imgpatch to each pair of split source/target images and add up the patched result, we can get back the original target image. For example: Input: [src_image, tgt_image] Split: [src-0,tgt-0; src-1,tgt-1, src-2,tgt-2] Diff: [ patch-0; patch-1; patch-2] Patch: [(src-0,patch-0)=tgt-0; (src-1,patch-1)=tgt-1; (src-2,patch-2)=tgt-2;] Append: [tgt-0 + tgt-1 + tgt-2 = tgt_image] Peformance: For the small package in b/34220646, we decrease the patch size of chrome.apk dramatically from 30M to 400K due to the order change of two big .so files. On two versions of angler, I also observe decent patch size decrease. For chrome.apk, we reduced the size from 5.9M to 3.2M; and for vevlet.apk from 8.0M to 6.5M. Bug: 34220646 Test: recovery component test && apply imgdiff & imgpatch on two chrome.apk Change-Id: I145d802984fa805efbbac9d01a2e64d82ef9728b
/bootable/recovery/applypatch/imgdiff.cpp
|
57dd96199570beb29ea8b0f3934c594cd42e3043 |
|
18-Aug-2017 |
Tianjie Xu <xunchang@google.com> |
Move Image/ImageChunk/PatchChunk declaration into header files 1. Move the declaration of the Image classes to the header file to make testing easier. 2. Also move rangeset.h to bootable/recovery to allow access in imgdiff. Test: recovery component test Change-Id: I68a863e60a3f2e7ae46ee48f48eb15391f5f4330
/bootable/recovery/applypatch/imgdiff.cpp
|
d82a2ed50bab5ea014bcf3b1e5541e21829b4ecb |
|
09-Aug-2017 |
Tianjie Xu <xunchang@google.com> |
Add a new PatchChunk class in imgdiff This way we can keep the input images const when calling genetatepatches(). Test: recovery component test; diff and patch on chrome.apk; generate recovery-from-boot.p for angler. Change-Id: I65b5689b88f6719c6ede46bb82def0c4caeb8a61
/bootable/recovery/applypatch/imgdiff.cpp
|
6b03ba7902cd97e305d9354fd6a733ab0d2f10fe |
|
19-Jul-2017 |
Tianjie Xu <xunchang@google.com> |
Refactor the imgdiff This helps us to add a new mode to handle large APKs in the follow up CL. Changes include: 1. Create a new interface class 'Image' 1. Create subclasses 'ZipModeImage' and 'ImageModeImage' and move the related functions there. Bug: 63542719 Test: recovery_component_test passes Change-Id: I7729b0ba39b19a9c84811636a60dd0a0b1acc2f0
/bootable/recovery/applypatch/imgdiff.cpp
|
14ebc1e5ae6968424eb242f3b0330f82e475a1e4 |
|
05-Jul-2017 |
Tianjie Xu <xunchang@google.com> |
Fix a rare failure for imgdiff when random data equals gzip header In a rare case, a random chunk will pass both the gzip header check and the inflation process; but fail the uncompressed length check in the footer. This leads to a imgdiff failure. So, we should treat this chunk as 'normal' instead of 'inflated' while generating the patch. Bug: 63334984 Test: imgdiff generates patch successfully on previous failing images. Change-Id: Ice84f22d3653bce9756bda91e70528c0d2f264a0
/bootable/recovery/applypatch/imgdiff.cpp
|
12b90553d784b9d4ddd1b48300af6345bdf1085f |
|
07-Mar-2017 |
Tianjie Xu <xunchang@google.com> |
More cleanup to imgdiff & imgpatch Also remove the utils in applypatch and replace them with the corresponding libbase functions. Test: recovery tests pass. Change-Id: I77254c141bd3e7d3d6894c23b60e866009516f81
/bootable/recovery/applypatch/imgdiff.cpp
|
1ea84d6da97f4c4269ac16c4d332bbff3466b1b8 |
|
23-Feb-2017 |
Tianjie Xu <xunchang@google.com> |
Refractor the code for imgdiff Put ImageChunk and some helper functions into a class. Also switch to using std::vector instead of malloc. Bug: 18606652 Test: imgdiff_test passed on host. Also generate a complete incremental OTA package. The file content is the same and time consumption is similar. Change-Id: Id603ada4e130ef521218400761a119001a86ca79
/bootable/recovery/applypatch/imgdiff.cpp
|
7ab9c3812daf486f46c83dec3e341bf668e9513f |
|
01-Feb-2017 |
Tao Bao <tbao@google.com> |
Merge "bootable/recovery: cleanup compiler warnings (potential leak of memory)"
|
930edb666122d04ffb6a1ff1648181d5b08dda84 |
|
19-Jan-2017 |
Sen Jiang <senj@google.com> |
imgdiff: cache bsdiff suffix array in zip mode. In zip mode, if a chunk is not deflate or its filename can't be found in source chunks, the entire source file is used as old data for bsdiff, To avoid repeatedly construct the suffix array used by bsdiff, we cache the suffix array of the entire source file. Bug: 34281147 Test: =time -v imgdiff -z Chrome-ORF74B.apk Chrome-ORF76B.apk Chrome.imgdiff Change-Id: Ifd957ccecf7226fcb44dbf28c58969a06ef74f4b
/bootable/recovery/applypatch/imgdiff.cpp
|
d37ce8f0821758edc33ad9c42b0bf78ff29b365f |
|
18-Dec-2016 |
Tao Bao <tbao@google.com> |
imgdiff: Fix an edge case that leads to infinite loop. When the input image ends with the magic value sequence of 0x1f, 0x8b, 0x0b (optionally with 0x00), the image parsing code will be stuck in an infinite loop. Test: recovery_component_test passes. Change-Id: Ie3629dfdc41360387b19cc3e0359c95ae4fb998e
/bootable/recovery/applypatch/imgdiff.cpp
|
97555da4a67d45ada0020c0ee58d1b280cb4b57d |
|
15-Dec-2016 |
Tao Bao <tbao@google.com> |
Add tests for imgdiff. Factor out libimgdiff static library for testing purpose. This CL adds the imgdiff tests on host and on target both (similar to libimgpatch). In practice, we only need imgdiff binary on host, and libimgpatch on target. But they should build and pass tests on both platforms. Test: recovery_host_test passes; recovery_component_test passes. Change-Id: I0eafb7faf727cdf70066310e845af6ee245d4f60
/bootable/recovery/applypatch/imgdiff.cpp
|
8b640ffabc3f7c81c94dcbba6fec3436f85383fb |
|
07-Dec-2016 |
Rahul Chaudhry <rahulchaudhry@google.com> |
bootable/recovery: cleanup compiler warnings (potential leak of memory) bootable/recovery/applypatch/imgdiff.cpp:195:5: warning: Potential leak of memory pointed to by 'img' [clang-analyzer-unix.Malloc] Bug: 26936282 Test: WITH_TIDY=1 WITH_STATIC_ANALYZER=1 mm Change-Id: Ie79c780233ddfebf85686a24df3bf2561f831580
/bootable/recovery/applypatch/imgdiff.cpp
|
ef3bea15b8cb666387df0edc7dfa016b20bb3f87 |
|
01-Dec-2016 |
Tao Bao <tbao@google.com> |
Merge "bootable/recovery: cleanup compiler warnings (unused value)"
|
d255b661a18d9f2e69bf6a301224591a9b7e87a8 |
|
30-Nov-2016 |
Tao Bao <tbao@google.com> |
Merge "bootable/recovery: cleanup compiler warnings (potential leak of memory)"
|
a793c58208bc54fe83c5aa0e456a66ee2609e408 |
|
30-Nov-2016 |
Rahul Chaudhry <rahulchaudhry@google.com> |
bootable/recovery: cleanup compiler warnings (unused value) bootable/recovery/applypatch/imgdiff.cpp:322:11: warning: Value stored to 'ret' during its initialization is never read [clang-analyzer-deadcode.DeadStores] bootable/recovery/applypatch/imgdiff.cpp:447:11: warning: Value stored to 'ret' during its initialization is never read [clang-analyzer-deadcode.DeadStores] bootable/recovery/applypatch/imgdiff.cpp:553:3: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores] Bug: 26936282 Test: WITH_TIDY=1 WITH_STATIC_ANALYZER=1 mm Change-Id: I3f865e3e9b9d19e5ea5e8dfd2fe2c644254ffbb5
/bootable/recovery/applypatch/imgdiff.cpp
|
b29f23f7e7c791e7d8786de93d630a12e4250c71 |
|
09-Nov-2016 |
Rahul Chaudhry <rahulchaudhry@google.com> |
Use static_cast to cast pointers returned by malloc/calloc/realloc/mmap. static_cast is preferable to reinterpret_cast when casting from void* pointers returned by malloc/calloc/realloc/mmap calls. Discovered while looking at compiler warnings (b/26936282). Test: WITH_TIDY=1 WITH_STATIC_ANALYZER=1 mma Change-Id: Iaffd537784aa857108f6981fdfd82d0496eb5592 Merged-In: I151642d5a60c94f312d0611576ad0143c249ba3d
/bootable/recovery/applypatch/imgdiff.cpp
|
3a5177b16d574c902183d1322367fe7db08fffc1 |
|
16-Nov-2016 |
Rahul Chaudhry <rahulchaudhry@google.com> |
bootable/recovery: cleanup compiler warnings (potential leak of memory) bootable/recovery/applypatch/imgdiff.cpp:1065:3: warning: Potential leak of memory pointed to by 'patch_data' bootable/recovery/applypatch/imgdiff.cpp:1065:3: warning: Potential leak of memory pointed to by 'patch_size' bootable/recovery/applypatch/imgdiff.cpp:226:7: warning: Potential leak of memory pointed to by 'temp_entries' Bug: 26936282 Test: WITH_TIDY=1 WITH_STATIC_ANALYZER=1 mm Change-Id: I3cac945d7677d367934d5619ef7419daf6f48d6f
/bootable/recovery/applypatch/imgdiff.cpp
|
a0c40110281584fcfa22dc16e73622fa0e5b7a57 |
|
01-Jun-2016 |
Tao Bao <tbao@google.com> |
Revert "Fix memory/resource handling in imgdiff.cpp, using unique_ptr and vector." This reverts commit 50a6f8c8335be920833d06e5dabd37de279c98a9. A mix of new and free leads to memory corruptions.
/bootable/recovery/applypatch/imgdiff.cpp
|
50a6f8c8335be920833d06e5dabd37de279c98a9 |
|
21-May-2016 |
Adam Buchbinder <abuchbinder@google.com> |
Fix memory/resource handling in imgdiff.cpp, using unique_ptr and vector. This fixes the following cppcheck reports: [imgdiff.cpp:197]: (error) Memory leak: img [imgdiff.cpp:386]: (error) Memory leak: img [imgdiff.cpp:656]: (error) Memory leak: data [imgdiff.cpp:664]: (error) Memory leak: data [imgdiff.cpp:668]: (error) Memory leak: data [imgdiff.cpp:668]: (error) Resource leak: f [imgdiff.cpp:820]: (error) Memory leak: bonus_data [imgdiff.cpp:824]: (error) Memory leak: bonus_data [imgdiff.cpp:824]: (error) Resource leak: f [imgdiff.cpp:847]: (error) Memory leak: bonus_data [imgdiff.cpp:851]: (error) Memory leak: bonus_data [imgdiff.cpp:856]: (error) Memory leak: bonus_data [imgdiff.cpp:860]: (error) Memory leak: bonus_data [imgdiff.cpp:227]: (error) Memory leak: temp_entries Change-Id: I06f878d0b677a25328e0deb84f65f3b7212e24b1 (cherry picked from commit 51dc9444bcf8d8900a521795e873d07f6cd445ef)
/bootable/recovery/applypatch/imgdiff.cpp
|
2fffcb174b403959d87b400634bca343ce85d480 |
|
04-May-2016 |
Sen Jiang <senj@google.com> |
applypatch: Use bsdiff from external/bsdiff. external/bsdiff uses divsufsort which is much faster, and also include some bug fixes. Bug: 26982501 Test: ./imgdiff_test.sh Change-Id: I089a301c291ee55d79938c7a3ca6d509895440d1
/bootable/recovery/applypatch/imgdiff.cpp
|
fa4f1b75b6686f73a253536d6ce6deb3ed065148 |
|
12-Feb-2016 |
Sen Jiang <senj@google.com> |
imgdiff: don't fail if gzip is corrupted. Treat it as a normal chunk if inflate() fails. Test: run imgdiff on corrupted gzip and apply the patch Bug: 27153028 Change-Id: Idcbb3c1360ec0774e6c7861b21d99af8ee10604a
/bootable/recovery/applypatch/imgdiff.cpp
|
696692a3c9fe4bd8879f98f3e85341303f85afd5 |
|
02-Feb-2016 |
Sen Jiang <senj@google.com> |
applypatch: Add a Makefile to build imgdiff in Chrome OS. Also fixed some warnings and added check for target_len. Test: mma; emerge-peppy imgdiff; emerge-nyan imgdiff; sudo emerge imgdiff Bug: 26866274 Change-Id: Ifbcd3afd6701c769ccf626e33ed94461706f7ee6
/bootable/recovery/applypatch/imgdiff.cpp
|
0779fc98147a298eda6475c7744c5957ac382740 |
|
10-Dec-2015 |
David Riley <davidriley@google.com> |
imgdiff: skip spurious gzip headers in image files dragon kernel is compressed via lz4 for boot speed and bootloader support reasons and recent prebuilts happen to include the gzip header sequence which is causing imgdiff to fail. Detect a spurious gzip header and treat the section as a normal section. Bug: 26133184 Change-Id: I369d7d576fd7d2c579c0780fc5c669a5b6ea0d3d (cherry picked from commit 0f2f6a746af517afca9e5e089a4a17be0a9766d6) Signed-off-by: David Riley <davidriley@google.com>
/bootable/recovery/applypatch/imgdiff.cpp
|
a91c66d7c13e0143f63f0ea9c1c74ce39aecd79e |
|
08-Sep-2015 |
Jeremy Compostella <jeremy.compostella@intel.com> |
imgdiff: fix file descriptor leak mkstemp() allocates a file description that is never released. If MakePatch() is called too many time, imgdiff reaches the Operating System EMFILE (too many open files) limit. Change-Id: Icbe1399f6f6d32cfa1830f879cacf7d75bbd9fc3 Signed-off-by: Jeremy Compostella <jeremy.compostella@intel.com> Signed-off-by: Gaelle Nassiet <gaellex.nassiet@intel.com>
/bootable/recovery/applypatch/imgdiff.cpp
|
ba9a42aa7e10686de186636fe9fecbf8c4cc7c19 |
|
24-Jun-2015 |
Tao Bao <tbao@google.com> |
recovery: Switch applypatch/ and updater/ to cpp. Mostly trivial changes to make cpp compiler happy. Change-Id: I69bd1d96fcccf506007f6144faf37e11cfba1270
/bootable/recovery/applypatch/imgdiff.cpp
|