From a33c73f083b76faa1a9f3dce150e94c63d8ff379 Mon Sep 17 00:00:00 2001 From: Julien Viard de Galbert Date: Wed, 13 Feb 2019 09:46:13 +0100 Subject: [PATCH] Fix remove_dxes_except corner cases The parseBlackList function create a regex with several string option, FindFilePredicate encapsulate it to match whole word only but we have to take care of the blacklist case where the regex string include '|'. Signed-off-by: Julien Viard de Galbert --- pkg/visitors/find.go | 4 ++-- pkg/visitors/remove_test.go | 46 +++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/pkg/visitors/find.go b/pkg/visitors/find.go index 27ee4a39..f52d821b 100644 --- a/pkg/visitors/find.go +++ b/pkg/visitors/find.go @@ -109,11 +109,11 @@ func FindFileTypePredicate(t uefi.FVFileType) FindPredicate { // FindFilePredicate is a generic predicate for searching files and UI sections only. func FindFilePredicate(r string) (func(f uefi.Firmware) bool, error) { - searchRE, err := regexp.Compile("^" + r + "$") + searchRE, err := regexp.Compile("^(" + r + ")$") if err != nil { return nil, err } - ciRE, err := regexp.Compile("^(?i)" + r + "$") + ciRE, err := regexp.Compile("^(?i)(" + r + ")$") if err != nil { return nil, err } diff --git a/pkg/visitors/remove_test.go b/pkg/visitors/remove_test.go index 9af06618..bfe84be6 100644 --- a/pkg/visitors/remove_test.go +++ b/pkg/visitors/remove_test.go @@ -112,3 +112,49 @@ func TestRemoveExcept(t *testing.T) { } } + +func TestRemoveExceptBlackList(t *testing.T) { + // The following blacklist contains corner case: + // - start, mid or end of existing names but no full name + // - start, mid or end of existing GUID but no full GUID + // so it should behave as an empty blacklist, ie remove all + var blacklists = []string{ + "INEXISTING_FILENAME\nINEXISTING_FILENAME2", + "Isa\nDisk\nDxe", + "D6A2CB7F\n11E3\n9920A733700A", + } + for _, blacklist := range blacklists { + f := parseImage(t) + + blackListRegex, err := parseBlackList("(embedded)", blacklist) + if err != nil { + t.Fatal(err) + } + + pred, err := FindFilePredicate(blackListRegex) + if err != nil { + t.Fatal(err) + } + remove := &Remove{ + Predicate: pred, + RemoveDxes: true, + } + if err := remove.Run(f); err != nil { + t.Fatal(err) + } + + // We expect no more dxe drivers since we only kept the core. + count := &Count{} + if err := count.Run(f); err != nil { + t.Fatal(err) + } + dxeCount := count.FileTypeCount["EFI_FV_FILETYPE_DRIVER"] + coreCount := count.FileTypeCount["EFI_FV_FILETYPE_DXE_CORE"] + if dxeCount != 0 { + t.Errorf("expected no more drivers, got %v", dxeCount) + } + if coreCount != 0 { + t.Errorf("expected no more dxecore, got %v", coreCount) + } + } +}