On 05/10/2013 06:52 PM, John Ferlan wrote:
On 05/10/2013 10:57 AM, Eric Blake wrote:
> On 05/10/2013 05:07 AM, Martin Kletzander wrote:
>>
>> I must admit I have no idea why we allow spaces and hyphens everywhere
>> in the UUID string. Changing it to proper UUID parser is not just
>> fixing this issue, but also removing more lines than adding, since the
>> parser could get halved. That's why I was thinking more about taking
>> that route. I'd love to hear some input from someone else in case this
>> looks like it would break something. IMNSHO that's a bad usage unless
>> we explicitly allowed spaces and hyphens somewhere in the docs.
>
> We're lax in what we parse and strict in what we output. We can't
> change the lax parser, because there really is code out there that
> doesn't format valid uuids itself and relies on libvirt to clean up the
> mess, but I don't think the current lax parser is all that bad (as long
> as we see exactly enough hex digits after skipping all dashes and
> spaces, we have something we can then turn into valid output).
>
>> If I read the code correctly, we are properly saving the UUID in the
>> definition in our format and using virUUIDFormat() properly to build the
>> command line. Aren't we doing the same with system_uuid? If not, that
>> could be helpful even for the future (actually until someone files a bug
>> about dumpxml generating invalid UUIDs ;-) )
>>
>> I can't help myself, but parsing, formatting and throwing away the
>> result just to check the validity seems weird.
>
> If we parse and then format, we should use what we formatted from then
> on, instead of the original user's (potentially unusual) formatting.
>
It would seem that you are thus advocating we change what was read
to be formatted properly and don't tell the user we did that, e.g.:
With hearing from Eric about why we do that, I would do what you
described, with one difference; you can get the uuid into temporary
buffer and parse it into system_uuid. You don't have to check anything
and just format the string when the system_uuid is used. That should be
the same way as def->uuid is used and it seems like the cleanest one.
[...]
Would it be better to see a v2 with everything?
Or push patches 1-3 and make a v2 of just this one?
v2 of [3/4] and [4/4] would be great, thanks.
Martin