Kevin Wolf <kw...@redhat.com> writes:

> Am 21.02.2014 um 21:22 hat Eric Blake geschrieben:
>> On 02/21/2014 08:24 AM, Kevin Wolf wrote:
>> > has_help_option() checks if any help option ('help' or '?') occurs
>> > anywhere in an option string, so that things like 'cluster_size=4k,help'
>> > are recognised.
>> > 
>> > is_valid_option_list() ensures that the option list doesn't have options
>> > with leading commas or trailing unescaped commas.

Care to explain why these are bad?  I dimly remember Eric and you
discussing it last week, but I sure won't next time I look at this
code...

>> > Signed-off-by: Kevin Wolf <kw...@redhat.com>
>> > ---
>> 
>> > +
>> > +    while (*p) {
>> > +        p = get_opt_value(buf, buflen, p);
>> > +        if (*p) {
>> > +            p++;
>> > +        }
>> > +
>> > +        if (is_help_option(buf)) {
>> > +            result = true;
>> > +            goto out;
>> 
>> If this were 'break;',
>> 
>> > +        }
>> > +    }
>> > +
>> > +out:
>> 
>> then you wouldn't need this label.  But that's cosmetic.
>> 
>> > +    free(buf);
>> > +    return result;
>> > +}
>> > +
>> > +bool is_valid_option_list(const char *param)
>> > +{
>> > +    size_t buflen = strlen(param) + 1;
>> > +    char *buf = g_malloc0(buflen);
>> > +    const char *p = param;
>> > +    bool result = true;
>> > +
>> > +    while (*p) {
>> > +        p = get_opt_value(buf, buflen, p);
>> > +        if (*p && !*++p) {
>> > +            result = false;
>> > +            goto out;
>> > +        }
>> 
>> Rejects trailing commas.
>> 
>> > +
>> > +        if (!*buf || *buf == ',') {
>> 
>> Rejects empty options, but also rejects values beginning with a comma.
>> But we have legacy users that accept implicitly named first options (see
>> opts_do_parse()).  For example, this is a valid command line (albeit one
>> that prints a list of valid machines):
>> 
>> qemu-kvm -machine ,,blah
>> 
>> as shorthand for
>> 
>> qemu-kvm -machine type=,,blah
>> 
>> and where *buf would indeed be validly ','.
>
> Right, but I can't allow this without allowing '-o ,,' which breaks the
> real use case. So the lesson is that you can concatenate option strings
> and use implicit option names at the same time.

Another wart on the freakishly complex QemuOpts.

Reply via email to