vendor/gopkg.in/ini.v1/key.go
changeset 260 445e01aede7e
parent 256 6d9efbef00a9
--- a/vendor/gopkg.in/ini.v1/key.go	Tue Aug 23 22:33:28 2022 +0200
+++ b/vendor/gopkg.in/ini.v1/key.go	Tue Aug 23 22:39:43 2022 +0200
@@ -54,14 +54,16 @@
 		return errors.New("cannot add shadow to auto-increment or boolean key")
 	}
 
-	// Deduplicate shadows based on their values.
-	if k.value == val {
-		return nil
-	}
-	for i := range k.shadows {
-		if k.shadows[i].value == val {
+	if !k.s.f.options.AllowDuplicateShadowValues {
+		// Deduplicate shadows based on their values.
+		if k.value == val {
 			return nil
 		}
+		for i := range k.shadows {
+			if k.shadows[i].value == val {
+				return nil
+			}
+		}
 	}
 
 	shadow := newKey(k.s, k.name, val)
@@ -108,15 +110,24 @@
 	return k.value
 }
 
-// ValueWithShadows returns raw values of key and its shadows if any.
+// ValueWithShadows returns raw values of key and its shadows if any. Shadow
+// keys with empty values are ignored from the returned list.
 func (k *Key) ValueWithShadows() []string {
 	if len(k.shadows) == 0 {
+		if k.value == "" {
+			return []string{}
+		}
 		return []string{k.value}
 	}
-	vals := make([]string, len(k.shadows)+1)
-	vals[0] = k.value
-	for i := range k.shadows {
-		vals[i+1] = k.shadows[i].value
+
+	vals := make([]string, 0, len(k.shadows)+1)
+	if k.value != "" {
+		vals = append(vals, k.value)
+	}
+	for _, s := range k.shadows {
+		if s.value != "" {
+			vals = append(vals, s.value)
+		}
 	}
 	return vals
 }
@@ -781,10 +792,8 @@
 	return vals, err
 }
 
-
 type Parser func(str string) (interface{}, error)
 
-
 // parseTimesFormat transforms strings to times in given format.
 func (k *Key) parseTimesFormat(format string, strs []string, addInvalid, returnOnInvalid bool) ([]time.Time, error) {
 	vals := make([]time.Time, 0, len(strs))
@@ -801,7 +810,6 @@
 	return vals, err
 }
 
-
 // doParse transforms strings to different types
 func (k *Key) doParse(strs []string, addInvalid, returnOnInvalid bool, parser Parser) ([]interface{}, error) {
 	vals := make([]interface{}, 0, len(strs))