On 2018-05-03 00:00, Eric Blake wrote: > On 05/02/2018 03:20 PM, Max Reitz wrote: >> img_open_opts() takes a QemuOpts and converts them to a QDict, so all >> values therein are strings. Then it may try to call qdict_get_bool(), >> however, which will fail with a segmentation fault every time: > > I have no idea if it's worth fixing qdict_get_bool() to at least not > segfault when called on a non-bool Dict member (but what should it > return, true or false? or should it abort() for at least a cleaner > failure than a segfault?)
There's qdict_get_try_bool() which returns a default. For testing whether the member is a bool I suppose you can use qdict_to(QBool, qdict_get(qdict, member)). Max > But in the meantime, your fix is correct. > >> >> $ ./qemu-img info -U --image-opts \ >> driver=file,filename=/dev/null,force-share=off >> [1] 27869 segmentation fault (core dumped) ./qemu-img info -U >> --image-opts driver=file,filename=/dev/null,force-share=off >> >> Fix this by using qdict_get_str() and comparing the value as a string. >> Also, when adding a force-share value to the QDict, add it as a string >> so it fits the rest of the dict. >> >> Cc: [email protected] >> Signed-off-by: Max Reitz <[email protected]> >> --- >> qemu-img.c | 4 ++-- >> 1 file changed, 2 insertions(+), 2 deletions(-) >> > > Reviewed-by: Eric Blake <[email protected]> >
signature.asc
Description: OpenPGP digital signature
