mirror of
https://github.com/BaaRai/ARTEX.git
synced 2026-11-15 04:30:55 +08:00
Compare commits
4
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c84f124cb4 | ||
|
|
cf0b0c1002 | ||
|
|
b17a0ea796 | ||
|
|
59c3702a5e |
+8
-2
@@ -633,14 +633,20 @@ LIMIT $1`, malformedIPAssetsSampled)
|
||||
if total == 0 {
|
||||
return "", nil
|
||||
}
|
||||
return malformedIPAssetWarningText(total, samples), nil
|
||||
}
|
||||
|
||||
// malformedIPAssetWarningText words the warning for total offending assets, of
|
||||
// which only samples are named; the ones left out are counted in the suffix.
|
||||
func malformedIPAssetWarningText(total int, samples []string) string {
|
||||
warning := fmt.Sprintf(
|
||||
"%d assets have an ip field that is not a valid IP; skipped for IP/CIDR scope matching (these assets will not be attributed to a company by subnet rules): %s",
|
||||
total, strings.Join(samples, ", "),
|
||||
)
|
||||
if total > len(samples) {
|
||||
warning += fmt.Sprintf(" and %d more", total)
|
||||
warning += fmt.Sprintf(" and %d more", total-len(samples))
|
||||
}
|
||||
return warning, nil
|
||||
return warning
|
||||
}
|
||||
|
||||
// UpdateScope replaces all scope rules for a company and reattributes.
|
||||
|
||||
@@ -458,3 +458,21 @@ func TestListCompanies(t *testing.T) {
|
||||
t.Error("ListCompanies: created company not found")
|
||||
}
|
||||
}
|
||||
|
||||
func TestMalformedIPAssetWarningTextCountsOmitted(t *testing.T) {
|
||||
samples := []string{"#1 a", "#2 b", "#3 c", "#4 d", "#5 e"}
|
||||
// The suffix must count the assets left out, not repeat the total, otherwise
|
||||
// the operator is told about more bad rows than exist.
|
||||
got := malformedIPAssetWarningText(8, samples)
|
||||
if !strings.HasPrefix(got, "8 assets have an ip field") {
|
||||
t.Fatalf("the warning should lead with the total of 8, got %q", got)
|
||||
}
|
||||
if !strings.HasSuffix(got, ": #1 a, #2 b, #3 c, #4 d, #5 e and 3 more") {
|
||||
t.Fatalf("8 assets with 5 named should note the 3 omitted, got %q", got)
|
||||
}
|
||||
// When every offending asset is named there is nothing to add.
|
||||
got = malformedIPAssetWarningText(5, samples)
|
||||
if !strings.HasSuffix(got, ": #1 a, #2 b, #3 c, #4 d, #5 e") {
|
||||
t.Fatalf("5 assets with 5 named should have no suffix, got %q", got)
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -149,7 +149,7 @@ func byteSize(s string) int { return len(s) }
|
||||
func runeSize(s string) int { return utf8.RuneCountInString(s) }
|
||||
|
||||
// assetLine renders an asset list into one line of display text; when there are
|
||||
// more than limit assets, the rest are omitted and the total is noted. A
|
||||
// more than limit assets, the rest are omitted and their count is noted. A
|
||||
// vulnerability can be anchored to dozens of assets, and listing them all would
|
||||
// blow up the message.
|
||||
func assetLine(assets []string, limit int) string {
|
||||
@@ -159,7 +159,7 @@ func assetLine(assets []string, limit int) string {
|
||||
if limit <= 0 || len(assets) <= limit {
|
||||
return strings.Join(assets, ", ")
|
||||
}
|
||||
return strings.Join(assets[:limit], ", ") + " and " + itoa(len(assets)) + " more"
|
||||
return strings.Join(assets[:limit], ", ") + " and " + itoa(len(assets)-limit) + " more"
|
||||
}
|
||||
|
||||
// itoa is a short alias for strconv.Itoa, used only for assembling display text,
|
||||
|
||||
@@ -113,11 +113,13 @@ func TestAssetLineOmitsExcess(t *testing.T) {
|
||||
if got := assetLine([]string{"a", "b"}, 3); got != "a, b" {
|
||||
t.Fatalf("within the limit everything should be listed, got %q", got)
|
||||
}
|
||||
// Over the limit the total must be noted, otherwise readers cannot tell how
|
||||
// many assets were left out.
|
||||
got := assetLine([]string{"a", "b", "c", "d", "e"}, 2)
|
||||
if !strings.Contains(got, "and 5 more") {
|
||||
t.Fatalf("the total of 5 should be noted, got %q", got)
|
||||
// Over the limit the number of omitted assets must be noted, otherwise
|
||||
// readers cannot tell how many assets were left out.
|
||||
if got := assetLine([]string{"a", "b", "c", "d", "e"}, 2); got != "a, b and 3 more" {
|
||||
t.Fatalf("5 assets with limit 2 should note the 3 omitted, got %q", got)
|
||||
}
|
||||
if got := assetLine([]string{"a", "b", "c", "d", "e", "f", "g", "h"}, 3); got != "a, b, c and 5 more" {
|
||||
t.Fatalf("8 assets with limit 3 should note the 5 omitted, got %q", got)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user