Support readonly rootfs contains colon

Fix: https://github.com/containers/podman/issues/11913

Signed-off-by: chenkang <kongchen28@gmail.com>
This commit is contained in:
chenkang 2021-10-11 09:17:57 +08:00
parent ea868933e8
commit dd5975f3d5
No known key found for this signature in database
GPG Key ID: A592F3AE7ECB096B
2 changed files with 28 additions and 3 deletions

View File

@ -552,10 +552,10 @@ func NewSpecGenerator(arg string, rootfs bool) *SpecGenerator {
if rootfs { if rootfs {
csc.Rootfs = arg csc.Rootfs = arg
// check if rootfs is actually overlayed // check if rootfs is actually overlayed
parts := strings.SplitN(csc.Rootfs, ":", 2) lastColonIndex := strings.LastIndex(csc.Rootfs, ":")
if len(parts) > 1 && parts[1] == "O" { if lastColonIndex != -1 && lastColonIndex+1 < len(csc.Rootfs) && csc.Rootfs[lastColonIndex+1:] == "O" {
csc.RootfsOverlay = true csc.RootfsOverlay = true
csc.Rootfs = parts[0] csc.Rootfs = csc.Rootfs[:lastColonIndex]
} }
} else { } else {
csc.Image = arg csc.Image = arg

View File

@ -0,0 +1,25 @@
package specgen
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestNewSpecGeneratorWithRootfs(t *testing.T) {
tests := []struct {
rootfs string
expectedRootfsOverlay bool
expectedRootfs string
}{
{"/root/a:b:O", true, "/root/a:b"},
{"/root/a:b/c:O", true, "/root/a:b/c"},
{"/root/a:b/c:", false, "/root/a:b/c:"},
{"/root/a/b", false, "/root/a/b"},
}
for _, args := range tests {
val := NewSpecGenerator(args.rootfs, true)
assert.Equal(t, val.RootfsOverlay, args.rootfs)
assert.Equal(t, val.Rootfs, args.rootfs)
}
}