Bladeren bron

Improve validation for volume specs

The current validation only checked for the
number of elements in the volume-spec, however,
did not validate if the elements were empty.

Because of this, an empty volume-spec (""),
or volume spec only containing separators ("::")
would not be invalidated.

This adds a simple check for empty elements in
the volume-spec, and returns an error if
the spec is invalid.

A unit-test is also added to verify the behavior.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Sebastiaan van Stijn 8 jaren geleden
bovenliggende
commit
120241937e
2 gewijzigde bestanden met toevoegingen van 15 en 2 verwijderingen
  1. 6 2
      cli/compose/convert/volume.go
  2. 9 0
      cli/compose/convert/volume_test.go

+ 6 - 2
cli/compose/convert/volume.go

@@ -31,6 +31,12 @@ func convertVolumeToMount(volumeSpec string, stackVolumes volumes, namespace Nam
 	// TODO: split Windows path mappings properly
 	parts := strings.SplitN(volumeSpec, ":", 3)
 
+	for _, part := range parts {
+		if strings.TrimSpace(part) == "" {
+			return mount.Mount{}, fmt.Errorf("invalid volume: %s", volumeSpec)
+		}
+	}
+
 	switch len(parts) {
 	case 3:
 		source = parts[0]
@@ -41,8 +47,6 @@ func convertVolumeToMount(volumeSpec string, stackVolumes volumes, namespace Nam
 		target = parts[1]
 	case 1:
 		target = parts[0]
-	default:
-		return mount.Mount{}, fmt.Errorf("invalid volume: %s", volumeSpec)
 	}
 
 	if source == "" {

+ 9 - 0
cli/compose/convert/volume_test.go

@@ -46,6 +46,15 @@ func TestConvertVolumeToMountAnonymousVolume(t *testing.T) {
 	assert.DeepEqual(t, mount, expected)
 }
 
+func TestConvertVolumeToMountInvalidFormat(t *testing.T) {
+	namespace := NewNamespace("foo")
+	invalids := []string{"::", "::cc", ":bb:", "aa::", "aa::cc", "aa:bb:", " : : ", " : :cc", " :bb: ", "aa: : ", "aa: :cc", "aa:bb: "}
+	for _, vol := range invalids {
+		_, err := convertVolumeToMount(vol, volumes{}, namespace)
+		assert.Error(t, err, "invalid volume: "+vol)
+	}
+}
+
 func TestConvertVolumeToMountNamedVolume(t *testing.T) {
 	stackVolumes := volumes{
 		"normal": composetypes.VolumeConfig{