diff options
author | baude <bbaude@redhat.com> | 2019-02-08 17:09:00 -0600 |
---|---|---|
committer | baude <bbaude@redhat.com> | 2019-02-08 17:09:00 -0600 |
commit | e071ac20f8531a50612c6fd240c90f008a4b2a19 (patch) | |
tree | 6ba0251ba7cbb9ec7c3339f793c2491897ff05be | |
parent | afd4d5f4a4b05f421e6f336b4d74a0d808be57ed (diff) | |
download | podman-e071ac20f8531a50612c6fd240c90f008a4b2a19.tar.gz podman-e071ac20f8531a50612c6fd240c90f008a4b2a19.tar.bz2 podman-e071ac20f8531a50612c6fd240c90f008a4b2a19.zip |
do not crash when displaying dangling images
the previous method required a populated image template to create
the headers and always selected the first image in the slice. when
dealing with dangling images, they are not populated and therefore
would panic.
Resolves: #2246
Signed-off-by: baude <bbaude@redhat.com>
-rw-r--r-- | cmd/podman/images.go | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/cmd/podman/images.go b/cmd/podman/images.go index 6afc2d042..6f5a3e9f1 100644 --- a/cmd/podman/images.go +++ b/cmd/podman/images.go @@ -305,6 +305,7 @@ func getImagesJSONOutput(ctx context.Context, images []*adapter.ContainerImage) // generateImagesOutput generates the images based on the format provided func generateImagesOutput(ctx context.Context, images []*adapter.ContainerImage, opts imagesOptions) error { + templateMap := GenImageOutputMap() if len(images) == 0 { return nil } @@ -316,15 +317,17 @@ func generateImagesOutput(ctx context.Context, images []*adapter.ContainerImage, out = formats.JSONStructArray{Output: imagesToGeneric([]imagesTemplateParams{}, imagesOutput)} default: imagesOutput := getImagesTemplateOutput(ctx, images, opts) - out = formats.StdoutTemplateArray{Output: imagesToGeneric(imagesOutput, []imagesJSONParams{}), Template: opts.outputformat, Fields: imagesOutput[0].HeaderMap()} + out = formats.StdoutTemplateArray{Output: imagesToGeneric(imagesOutput, []imagesJSONParams{}), Template: opts.outputformat, Fields: templateMap} } return formats.Writer(out).Out() } -// HeaderMap produces a generic map of "headers" based on a line -// of output -func (i *imagesTemplateParams) HeaderMap() map[string]string { - v := reflect.Indirect(reflect.ValueOf(i)) +// GenImageOutputMap generates the map used for outputting the images header +// without requiring a populated image. This replaces the previous HeaderMap +// call. +func GenImageOutputMap() map[string]string { + io := imagesTemplateParams{} + v := reflect.Indirect(reflect.ValueOf(io)) values := make(map[string]string) for i := 0; i < v.NumField(); i++ { |