The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/distrobuilder/pull/243

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 4dd7dd704a687496bac8a831f351583767a48085 Mon Sep 17 00:00:00 2001
From: Thomas Hipp <thomas.h...@canonical.com>
Date: Fri, 11 Oct 2019 21:02:08 +0200
Subject: [PATCH 1/2] shared: Update getChecksum function

Signed-off-by: Thomas Hipp <thomas.h...@canonical.com>
---
 shared/net.go  | 12 +++---------
 shared/util.go | 24 ++++++++++++++++++++++++
 2 files changed, 27 insertions(+), 9 deletions(-)

diff --git a/shared/net.go b/shared/net.go
index aa16210..993edf7 100644
--- a/shared/net.go
+++ b/shared/net.go
@@ -1,7 +1,6 @@
 package shared
 
 import (
-       "bufio"
        "fmt"
        "hash"
        "io"
@@ -9,7 +8,6 @@ import (
        "net/http"
        "os"
        "path/filepath"
-       "regexp"
        "strings"
 
        lxd "github.com/lxc/lxd/shared"
@@ -135,13 +133,9 @@ func downloadChecksum(targetDir string, URL string, fname 
string, hashFunc hash.
 
        tempFile.Seek(0, 0)
 
-       scanner := bufio.NewScanner(tempFile)
-       for scanner.Scan() {
-               s := strings.Split(scanner.Text(), " ")
-               matched, _ := regexp.MatchString(fmt.Sprintf(".*%s", 
filepath.Base(fname)), s[len(s)-1])
-               if matched && (hashLen == 0 || hashLen == 
len(strings.TrimSpace(s[0]))) {
-                       return s[0], nil
-               }
+       checksum := getChecksum(filepath.Base(fname), hashLen, tempFile)
+       if checksum != "" {
+               return checksum, nil
        }
 
        return "", fmt.Errorf("Could not find checksum")
diff --git a/shared/util.go b/shared/util.go
index f8873b5..04a3937 100644
--- a/shared/util.go
+++ b/shared/util.go
@@ -1,6 +1,7 @@
 package shared
 
 import (
+       "bufio"
        "bytes"
        "fmt"
        "io"
@@ -365,3 +366,26 @@ func GetTargetDir(def DefinitionImage) string {
 
        return targetDir
 }
+
+func getChecksum(fname string, hashLen int, r io.Reader) string {
+       scanner := bufio.NewScanner(r)
+
+       for scanner.Scan() {
+               if !strings.Contains(scanner.Text(), fname) {
+                       continue
+               }
+
+               for _, s := range strings.Split(scanner.Text(), " ") {
+                       m, _ := regexp.MatchString("[[:xdigit:]]+", s)
+                       if !m {
+                               continue
+                       }
+
+                       if hashLen == 0 || hashLen == len(strings.TrimSpace(s)) 
{
+                               return s
+                       }
+               }
+       }
+
+       return ""
+}

From d10fe3ba36de434d880508172422a641994346ed Mon Sep 17 00:00:00 2001
From: Thomas Hipp <thomas.h...@canonical.com>
Date: Fri, 11 Oct 2019 21:02:28 +0200
Subject: [PATCH 2/2] shared: Add test for getChecksum

Signed-off-by: Thomas Hipp <thomas.h...@canonical.com>
---
 shared/util_test.go | 88 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 88 insertions(+)

diff --git a/shared/util_test.go b/shared/util_test.go
index a964728..994eae3 100644
--- a/shared/util_test.go
+++ b/shared/util_test.go
@@ -1,6 +1,8 @@
 package shared
 
 import (
+       "bytes"
+       "io"
        "log"
        "os"
        "path"
@@ -213,3 +215,89 @@ func TestSetEnvVariables(t *testing.T) {
        require.False(t, set, "Expected 'BAR' to be unset")
        require.Empty(t, val)
 }
+
+func Test_getChecksum(t *testing.T) {
+       type args struct {
+               fname   string
+               hashLen int
+               r       io.Reader
+       }
+       tests := []struct {
+               name string
+               args args
+               want string
+       }{
+               {
+                       "CentOS-8-x86_64-1905-dvd1.iso",
+                       args{
+                               "CentOS-8-x86_64-1905-dvd1.iso",
+                               64,
+                               bytes.NewBufferString(`-----BEGIN PGP SIGNED 
MESSAGE-----
+Hash: SHA256
+
+# CentOS-8-x86_64-1905-boot.iso: 559939584 bytes
+SHA256 (CentOS-8-x86_64-1905-boot.iso) = 
a7993a0d4b7fef2433e0d4f53530b63c715d3aadbe91f152ee5c3621139a2cbc
+# CentOS-8-x86_64-1905-dvd1.iso: 7135559680 bytes
+SHA256 (CentOS-8-x86_64-1905-dvd1.iso) = 
ea17ef71e0df3f6bf1d4bf1fc25bec1a76d1f211c115d39618fe688be34503e8
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1
+
+iQIVAwUBXYirdQW1VbOEg8ZdAQigchAAj+LbZtV7BQTnfB3i+fzECuomjsTZE8Ki
+zUs9fLA67aayBL1KiavIzURMgjqj/+dXWr73Kv49pELngrznPlEPOclCaPkAKSe0
+V2Nj56AUhT/tHGcBoNvD0UrC0nCObMLx6PI2FDEozEELyQR32Syjtb0y5CDnxRvX
+6JeGWPWQsf+jXdZS/GUUh39XR5va5YAwues0qLfqNf7nfUk07tmU0pcCG+vRN13H
+45av+1/49zbxn4Y/Km2AaAbmqX8LlQpppVYE2K5V73YsG3o6eSU1DwjDijQHYPOK
+ZUixjbhh5xkOzvhv5HUETvPncbnOez+xLwDPFAMFz/jX/4BgLWpA1/PM/3xcFFij
+qXBlZh+QLWm1Z8UCBftDc+RqoktI460cqL/SsnOyHmQ+95QLt20yR46hi3oZ6/Cv
+cUdXaql3iCNWZUvi27Dr8bExqaVaJn0zeDCItPWUA7NwxXP2TlGs2VXC4E37HQhZ
+SyuCQZMrwGmDJl7gMOE7kZ/BifKvrycAlvTPvhq0jrUwLvokX8QhoTmAwRdzwGSk
+9nS+BkoK7xW5lSATuVYEcCkb2fL+qDKuSBJMuKhQNhPs6rN5OEZL3gU54so7Jyz9
+OmR+r+1+/hELjOIsPcR4IiyauJQXXgtJ28G7swMsrl07PYHOU+awvB/N9GyUzNAM
+RP3G/3Z1T3c=
+=HgZm
+-----END PGP SIGNATURE-----`),
+                       },
+                       
"ea17ef71e0df3f6bf1d4bf1fc25bec1a76d1f211c115d39618fe688be34503e8",
+               },
+
+               {
+                       "CentOS-7-x86_64-Minimal-1908.iso",
+                       args{
+                               "CentOS-7-x86_64-Minimal-1908.iso",
+                               64,
+                               bytes.NewBufferString(`-----BEGIN PGP SIGNED 
MESSAGE-----
+Hash: SHA256
+
+9bba3da2876cb9fcf6c28fb636bcbd01832fe6d84cd7445fa58e44e569b3b4fe  
CentOS-7-x86_64-DVD-1908.iso
+bd5e6ca18386e8a8e0b5a9e906297b5610095e375e4d02342f07f32022b13acf  
CentOS-7-x86_64-Everything-1908.iso
+ba827210d4eb9313fc19120b9b85e7baef234c7f81bc55847a336114ddac20cb  
CentOS-7-x86_64-LiveGNOME-1908.iso
+0ef3310d13f7fc140ec5180dc05369d2f473e802577466825205d17e46ef5a9b  
CentOS-7-x86_64-LiveKDE-1908.iso
+9a2c47d97b9975452f7d582264e9fc16d108ed8252ac6816239a3b58cef5c53d  
CentOS-7-x86_64-Minimal-1908.iso
+6ffa7ad44e8716e4cd6a5c3a85ba5675a935fc0448c260f43b12311356ba85ad  
CentOS-7-x86_64-NetInstall-1908.iso
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1
+
+iQIVAwUBXYDRPyTGqKf0qA61AQhHcg/+LvGu95Y825HoUpS9JPFIb7axkIj8fx5/
+Qw2fN+BQtd7W7jcUNmofaajjWyqP5b5Q0iCyNrbhAT6CO4lVVY1z+OxCefAk/Wve
+go1fSY5cRn7LRtvDuKrkDHJE+nYCVBg8ksWRBm2Xwx2sy4AxP2PAs7Oh3QvkK+9V
+199YPLAQ+m4cFdBTTR3Dl78OEKVgjp5O351n4q0pKp72jxhjCZ+tk+dWGg9JEBSb
+53nMkwnqTWZzFYpLqGc3fOfscc38oIvet0y3gVbZLNsE25AwwMxqjlC/Z2TqXwc5
+1JoZI7XkKggWH6fA4BuzcOtezGMPMPDaqnNhfAWzYq3CsQAA8aQuQaCnGoG2dNN/
+fdhGRrbXdpAFbKhfQ/dbKSvDGNvZTFfRfD9m5AJ/ddUAv7DFr4VeVur1KMTqtVO2
+NvcLRn7BnkN7ZRqvqdT4kDyndWgQCABahqI6OcC8mmc449JecloQK4U1zGhKMRor
+33OtMEW/KhnSOu9pK6+CRnPykyIk2yxUCJ11YFXCKNKfX2cmdFf0puUsmefB6O7E
+1nVE3n0aZVSVmebl3sjVJvstT2oyVNynnSQ/Fw3NBAiHe5FvgUnVqHQKyg1nnTet
+hsfTg6egTQUGOB2fVgt7n3p1HIvCjXAjKo6Wa3R8+aoapQ74Gcok3I3rNoL1jWbW
+Z4iksZrx82g=
+=L746
+-----END PGP SIGNATURE-----`),
+                       },
+                       
"9a2c47d97b9975452f7d582264e9fc16d108ed8252ac6816239a3b58cef5c53d",
+               },
+       }
+
+       for _, tt := range tests {
+               got := getChecksum(tt.args.fname, tt.args.hashLen, tt.args.r)
+               require.Equal(t, tt.want, got)
+       }
+}
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to