[virt-tools-list] [PATCH virt-viewer v2 4/5] app: Check validity of hotkey value

Pavel Grunt pgrunt at redhat.com
Tue May 31 06:30:45 UTC 2016


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.

> 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.

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. 

> 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.

>  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'

> 
> > +            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 :)

Pavel

> 
> Best Regards,
> --
> Fabiano Fidêncio




More information about the virt-tools-list mailing list