author | Anatol Pomozov
<anatolik@archlinux.org> 2019-09-18 17:36:39 UTC |
committer | Anatol Pomozov
<anatolik@archlinux.org> 2019-09-18 17:36:39 UTC |
parent | a8ce286fa562e5e69f8acfb49774436eb76d4db1 |
PKGBUILD | +4 | -1 |
fix_sparse_img.patch | +38 | -0 |
diff --git a/PKGBUILD b/PKGBUILD index 05eab1c..c1ede0a 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -4,7 +4,7 @@ pkgname=android-tools pkgver=29.0.3 -pkgrel=1 +pkgrel=2 tag=platform-tools-$pkgver pkgdesc='Android platform tools' arch=(x86_64) @@ -26,6 +26,7 @@ source=(git+https://android.googlesource.com/platform/system/core#tag=$tag git+https://boringssl.googlesource.com/boringssl#commit=$_boringssl_commit generate_build.rb fix_build_core.patch + fix_sparse_img.patch bash_completion.fastboot) # Bash completion file was taken from https://github.com/mbrubeck/android-completion sha1sums=('SKIP' @@ -38,6 +39,7 @@ sha1sums=('SKIP' 'SKIP' 'afca7974ad8658e52fd028ead12ad0a959d63273' 'e7f02cd6529dad54b4bdfd35e34b2cb9cb70cdd4' + '2b57a4cf8012473c1a4fc6adae16573756272b02' '7004dbd0c193668827174880de6f8434de8ceaee') prepare() { @@ -45,6 +47,7 @@ prepare() { cd "$srcdir"/core patch -p1 < ../fix_build_core.patch + patch -p1 < ../fix_sparse_img.patch # FS#63370 cd "$srcdir"/avb sed -i 's|/usr/bin/env python$|/usr/bin/env python2|g' avbtool diff --git a/fix_sparse_img.patch b/fix_sparse_img.patch new file mode 100644 index 0000000..4eb9909 --- /dev/null +++ b/fix_sparse_img.patch @@ -0,0 +1,38 @@ +commit fbb9535aaea5ae4011f3c3edf4c00b27452f57ec +Author: Tom Cherry <tomcherry@google.com> +Date: Tue Sep 17 13:34:04 2019 -0700 + + fastboot: don't use sparse_file_import_auto() in load_buf_fd() + + load_buf_fd() attempts to find the size of the file that it is about + to load by first calling sparse_file_import_auto() then using + sparse_file_len() upon success or falling back to the file size on the + filesystem on failure. + + This is problematic however as sparse_file_import_auto() creates a + sparse_file out of the normal file, but does not resparse it, so an + assertion fails during the sparse_file_len() call. + + This is fixed by using sparse_file_import() instead. This will fail + in the case that the file is not sparse and the call to + sparse_file_len() will be properly skipped. + + Bug: 140538105 + Test: flash blueline factory image with assertions enabled in + libsparse/sparse.cpp + + Change-Id: I0283be33563a3301ce5b09bde41105a20f91086c + +diff --git a/fastboot/fastboot.cpp b/fastboot/fastboot.cpp +index 4737ae4d66..a7fc628c43 100644 +--- a/fastboot/fastboot.cpp ++++ b/fastboot/fastboot.cpp +@@ -874,7 +874,7 @@ static bool load_buf_fd(int fd, struct fastboot_buffer* buf) { + return false; + } + +- if (sparse_file* s = sparse_file_import_auto(fd, false, false)) { ++ if (sparse_file* s = sparse_file_import(fd, false, false)) { + buf->image_size = sparse_file_len(s, false, false); + sparse_file_destroy(s); + } else {