The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/distrobuilder/pull/324
This e-mail was sent by the LXC bot, direct replies will not reach the author unless they happen to be subscribed to this list. === Description (from pull-request) ===
From 5fbf4a9e635190375e69b0bc0f1a6cb87d6da4b9 Mon Sep 17 00:00:00 2001 From: Thomas Hipp <thomas.h...@canonical.com> Date: Thu, 16 Apr 2020 14:04:04 +0200 Subject: [PATCH 1/2] shared/util: Fix checksum matching Signed-off-by: Thomas Hipp <thomas.h...@canonical.com> --- shared/util.go | 42 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/shared/util.go b/shared/util.go index 3bf6eed..2b66c9f 100644 --- a/shared/util.go +++ b/shared/util.go @@ -371,16 +371,46 @@ func GetTargetDir(def DefinitionImage) string { func getChecksum(fname string, hashLen int, r io.Reader) string { scanner := bufio.NewScanner(r) - for scanner.Scan() { - fields := strings.Split(scanner.Text(), " ") + var matches []string - // We need to special case CentOS, as they don't use the common - // "<hash> <filename>" syntax. - if strings.TrimSpace(fields[len(fields)-1]) != fname && !strings.Contains(scanner.Text(), fmt.Sprintf("(%s)", fname)) { + for scanner.Scan() { + if !strings.Contains(scanner.Text(), fname) { continue } - for _, s := range fields { + for _, s := range strings.Split(scanner.Text(), " ") { + m, _ := regexp.MatchString("[[:xdigit:]]+", s) + if !m { + continue + } + + if hashLen == 0 || hashLen == len(strings.TrimSpace(s)) { + matches = append(matches, scanner.Text()) + } + } + } + + // Check common checksum file (pattern: "<hash> <filename>") with the exact filename + for _, m := range matches { + fields := strings.Split(m, " ") + + if strings.TrimSpace(fields[len(fields)-1]) == fname { + return strings.TrimSpace(fields[0]) + } + } + + // Check common checksum file (pattern: "<hash> <filename>") which contains the filename + for _, m := range matches { + fields := strings.Split(m, " ") + + if strings.Contains(strings.TrimSpace(fields[len(fields)-1]), fname) { + return strings.TrimSpace(fields[0]) + } + } + + // Special case: CentOS + for _, m := range matches { + for _, s := range strings.Split(m, " ") { m, _ := regexp.MatchString("[[:xdigit:]]+", s) if !m { continue From 8bc486037336c9ee30c13b59d085d147c3538b0f Mon Sep 17 00:00:00 2001 From: Thomas Hipp <thomas.h...@canonical.com> Date: Thu, 16 Apr 2020 16:02:51 +0200 Subject: [PATCH 2/2] test: Update checksum matching Signed-off-by: Thomas Hipp <thomas.h...@canonical.com> --- shared/util_test.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/shared/util_test.go b/shared/util_test.go index 955a3ab..635605d 100644 --- a/shared/util_test.go +++ b/shared/util_test.go @@ -227,6 +227,24 @@ func Test_getChecksum(t *testing.T) { args args want string }{ + { + "openwrt-x86-64-rootfs.tar.gz", + args{ + "openwrt-x86-64-rootfs.tar.gz", + 64, + bytes.NewBufferString(`8b194c619b65d675da15d190fe7c7d2ce6125debc98452e30890c16212aa7b1c *openwrt-imagebuilder-x86-64.Linux-x86_64.tar.xz +d99669ef301129e6ba59417ff41814dd02b4bdbe7254e2c8535de5eae35801ad *openwrt-sdk-x86-64_gcc-8.4.0_musl.Linux-x86_64.tar.xz +84be5c09beb3791c574a35b9e73dcb7b7637482f83ed61fbe07cd0af68987cf8 *openwrt-x86-64-generic-ext4-combined-efi.img.gz +23d9ac551d0cd9c85458d4032ae030f33f5f6b44158866130c3065f2a121b641 *openwrt-x86-64-generic-ext4-combined.img.gz +4462e51e9b325e107b57a3b44aef176837fcee0ae8ccc01c1e239e343c9666e0 *openwrt-x86-64-generic-ext4-rootfs.img.gz +643ff73b119f3ecb36497a0c71213f9dd0129b64e803fa87d7e75b39c730e7fa *openwrt-x86-64-generic-kernel.bin +770fa5a3e47ed12f46114aca6dca16a1a4ba2b6e89e53d5966839ffc5581dc53 *openwrt-x86-64-generic-squashfs-combined-efi.img.gz +1a19c82c0614ad043fa0b854249bf6cc804550359ec453816ffbd426c31ab4a2 *openwrt-x86-64-generic-squashfs-combined.img.gz +3b961a97e3105e02e07c1aba7671186efe559ce0ac078c370d5082a7a6999dbe *openwrt-x86-64-generic-squashfs-rootfs.img.gz +76cc26429a61a516d348735a8d62bf3885d9d37489f20789a77c879dcf8a1025 *openwrt-x86-64-rootfs.tar.gz`), + }, + "76cc26429a61a516d348735a8d62bf3885d9d37489f20789a77c879dcf8a1025", + }, { "stage3-ppc64le-20200414T103003Z.tar.xz", args{
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel