[virt-tools-list] [PATCH virt-viewer v2 4/5] app: Check validity of hotkey value
Fabiano Fidêncio
fidencio at redhat.com
Tue May 31 07:58:47 UTC 2016
On Tue, May 31, 2016 at 8:30 AM, Pavel Grunt <pgrunt at redhat.com> wrote:
> On Tue, 2016-05-31 at 01:04 +0200, Fabiano Fidêncio wrote:
>> On Mon, May 30, 2016 at 5:08 PM, Pavel Grunt <pgrunt at redhat.com> wrote:
>> > Related: rhbz#1339572
>> > ---
>> > src/virt-viewer-app.c | 5 +++++
>> > tests/test-hotkeys.c | 4 ++++
>> > 2 files changed, 9 insertions(+)
>> >
>> > diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c
>> > index d449f72..f8fba4c 100644
>> > --- a/src/virt-viewer-app.c
>> > +++ b/src/virt-viewer-app.c
>> > @@ -2077,6 +2077,11 @@ virt_viewer_app_set_hotkeys(VirtViewerApp *self,
>> > const gchar *hotkeys_str)
>> > gtk_accelerator_parse(accel, &accel_key, &accel_mods);
>> > g_free(accel);
>> >
>> > + if (strlen(key + 1) != 0 && accel_key == 0 && accel_mods == 0) {
>>
>> Not your fault, but this key + 1 made me open the code and double
>> check what's going on.
>> gchar *key = strstr(*hotkey, "=");
>> *key = '\0';
>>
> you want to separate key from value, so you replace '=' by '\0' ("key\0value").
> If you print *hotkey, you get only the first part.
That's true, hotkey is still used and I was just paying attention to
the key. :-\
My bad. But I still would do: *key = '\0''; key++ instead of keeping
using key + 1.
>
>> Why? :-)
>>
>> key++; would be way cleaner as we ened up using it here in your patch
>> and somewhere below in the same loop.
> ok, I will use key++
>>
>> Okay, getting back to your patch ... strlen(key + 1) != 0 ... does it
>> really happen?
>
> it should always happen.
Let me change my question then, does it really fail at some point?
Because, if it does, then we are in a situation where the hotkey is:
"foo=", which shouldn't never happend.
>
> The condition says - if value_str is not empty and accel_key=0 and accel_key=0
> then it means the value could not be parsed as gtk accelerator.
>
>> what's the case?
>
> one can use: virt-viewer --hotkeys="toggle-fullscreen=not_an_accelerator"
> which is not consider as a bug in the current code.
>
Okay, so, please, add this in the comment.
>> I would like to see it in the commit
>> log. IMO, It shouldn't happen at all. We shouldn't receive a string
>> that is: "foo=" and if it does and it is provided by oVirt/RHEVM, the
>> bug is there not here :-\.
>
> It is not about rhevm, the bug is about informing the user about incorrect usage
> of hotkeys - one can have a typo in commandline and it can be hard to figure out
> the issue (I know it is a stupid example).
>
>> Even though, I understand we should treat
>> this case ... so I'd go for: if (key == NULL || ++key == NULL)
> That way you would not set *key = '\0', and if key is not NULL then key + 1 is
> also not NULL.
Yep, as I said before, I didn't check that the hotkey would still be
used, my bad.
Just ignore my comment from the previous email.
>
>> and let
>> it reach the g_warn_reached() part of the code that is just above this
>> part you touched.
>>
>> About accel_key and accel_mode being 0, again, it only will happen if
>> the parser fails. So, having the ++key == NULL in the if would save is
>> this part of the code.
>
> Ah you mean *(++key) == '\0'
Nops, it was just an way to avoid your strlen(key + 1) != 0 check, but
can just be ignored.
>
>>
>> > + g_warning("Invalid value '%s' for key '%s'", key + 1, *hotkey);
>> > + continue;
>> > + }
>> > +
>> > if (g_str_equal(*hotkey, "toggle-fullscreen")) {
>> > gtk_accel_map_change_entry("<virt-viewer>/view/toggle-
>> > fullscreen", accel_key, accel_mods, TRUE);
>> > } else if (g_str_equal(*hotkey, "release-cursor")) {
>> > diff --git a/tests/test-hotkeys.c b/tests/test-hotkeys.c
>> > index d3658f5..4a45216 100644
>> > --- a/tests/test-hotkeys.c
>> > +++ b/tests/test-hotkeys.c
>> > @@ -96,6 +96,10 @@ test_hotkeys_bad(void)
>> > "toggle-fullscreen=A,unknown_command=B",
>> > G_LOG_LEVEL_WARNING,
>> > "Unknown hotkey command unknown_command"
>> > + },{
>> > + "secure-attention=value",
>> > + G_LOG_LEVEL_WARNING,
>> > + "Invalid value 'value' for key 'secure-attention'"
>> > },
>> > };
>> >
>> > --
>> > 2.8.3
>> >
>> > _______________________________________________
>> > virt-tools-list mailing list
>> > virt-tools-list at redhat.com
>> > https://www.redhat.com/mailman/listinfo/virt-tools-list
>>
>> ACK the code if it follows the suggestion (but feel free to convince
>> me or here or on the iRC) :-)
>
> I would rather send v2 :)
Please!
>
> Pavel
>
>>
>> Best Regards,
>> --
>> Fabiano Fidêncio
Best Regards,
More information about the virt-tools-list
mailing list