[Spice-devel] spice-server, logging and style
Frediano Ziglio
fziglio at redhat.com
Mon Nov 16 03:20:34 PST 2015
>
> On 11/03/2015 05:11 PM, Christophe Fergeau wrote:
> > Hey,
> >
> > On Tue, Nov 03, 2015 at 08:15:14AM -0500, Frediano Ziglio wrote:
> >> Style:
> >>
> >> Personal considerations:
> >> - it seems some changes in patchset change "if (cond) return" code with
> >> spice_return_if_fail(cond). As stated before the macro are very
> >> misleading
> >> and the result is usually a program abortion instead of a return.
> >> I think new macro with better naming (I don't have a specific
> >> suggestion)
> >> would be better. The code is actually less readable with these macros;
> >
> > Regarding this first point, I'm personally fine with the naming (or
> > using g_return_if_fail() instead) as long as it's clear that they have
> > the same meaning as in glib:
> >
> > "If expr evaluates to FALSE, the current function should be considered
> > to have undefined behaviour (a programmer error). The only correct
> > solution to such an error is to change the module that is calling the
> > current function, so that it avoids this incorrect call.
> >
> > To make this undefined behaviour visible, if expr evaluates to FALSE,
> > the result is usually that a critical message is logged and the current
> > function returns."
>
> I think we should distinguish between internal-errors (spice-server
> and maybe also qemu-kvm) and external-errors (spice-client and guest).
>
> For internal-errors, an unexpected behavior is indeed very likely
> due to a bug. We should assert.
>
> For external-errors, an unexpected behavior can be due to a buggy
> (or malicious) client/guest. Such cases are not to be considered
> a bug (of spice-server) and spice-server should not abort.
>
> For example, assume spice-server receives a message it does not know
> from the client. It would be better to ignore such a message
> (or send an error back to the client or disconnect the client...)
> than to abort.
>
> When testing it's better to abort on any error (expect for
> tests that tests handling of a specific error).
>
> Regards,
> Uri.
>
>
I like this distinction between internal and external.
I agree internal should assert as a code bug was found.
Also agree for external we should not abort but handle the condition.
I would put also an exception depending on the external source.
If Qemu is calling an API in an unexpected way (say for instance passing
a NULL pointer for a structure to initialize for instance) I would define
this a bug even if the source is external. Perhaps considering this would
be better to define a secure source and insecure one and abort on secure
while handle the insecure.
On specific implementation I would like to remember that actually
spice_return_if* macros by default abort too.
Frediano
More information about the Spice-devel
mailing list