On Mon, Mar 02, 2026 at 12:52:10PM +0100, Markus Armbruster wrote:
> Akihiko Odaki <[email protected]> writes:
> 
> > A string that represents a double can be long if it is an exponentially
> > large number.
> >
> > Signed-off-by: Akihiko Odaki <[email protected]>
> > ---
> >  tests/unit/test-qobject-input-visitor.c  | 2 +-
> >  tests/unit/test-qobject-output-visitor.c | 2 +-
> >  2 files changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/tests/unit/test-qobject-input-visitor.c 
> > b/tests/unit/test-qobject-input-visitor.c
> > index 84bdcdf702e0..baff9243313c 100644
> > --- a/tests/unit/test-qobject-input-visitor.c
> > +++ b/tests/unit/test-qobject-input-visitor.c
> > @@ -583,7 +583,7 @@ static void 
> > test_visitor_in_list_struct(TestInputVisitorData *data,
> >  
> >      i = 0;
> >      for (num_list = arrs->number; num_list; num_list = num_list->next) {
> > -        char expected[32], actual[32];
> > +        char expected[318], actual[318];
> 
> Where does 318 come from?

If we're concerned about buffer sizes being too short, then that
is a strong sign we should be using g_strdup_printf instead of
sprintf with a bigger magic size.

As you say below though, it is better if we eliminate the string
formatting entirely here since it is irrelevant for the goals of
this test.

> 
> >  
> >          sprintf(expected, "%.6f", (double)i / 3);
> >          sprintf(actual, "%.6f", num_list->value);
>            g_assert_cmpstr(expected, ==, actual);
>            i++;
>        }
> 
> Existing code is safe, because the numbers run from 0, 1.0/3, ...,
> 31.0/3.
> 
> Its purpose is to check the input visitor parses number arrays
> correctly.  Doing it this way is questionable.  Elsewhere in this file,
> we get away with the equivalent of
> 
>            g_assert_cmpfloat(num_list->value, ==, (double)i / 3);
> 
> Yes, double can't represent the fractions exactly, but if we're
> concerned about that, we should test the difference is less than
> epsilon, or simply use representable values.
> 
> > diff --git a/tests/unit/test-qobject-output-visitor.c 
> > b/tests/unit/test-qobject-output-visitor.c
> > index 407ab9ed505a..ae05a726f775 100644
> > --- a/tests/unit/test-qobject-output-visitor.c
> > +++ b/tests/unit/test-qobject-output-visitor.c
> > @@ -571,7 +571,7 @@ static void 
> > test_visitor_out_list_struct(TestOutputVisitorData *data,
> >      i = 0;
> >      QLIST_FOREACH_ENTRY(qlist, e) {
> >          QNum *qvalue = qobject_to(QNum, qlist_entry_obj(e));
> > -        char expected[32], actual[32];
> > +        char expected[318], actual[318];
> >  
> >          g_assert(qvalue);
> >          sprintf(expected, "%.6f", (double)i / 3);
> 
> Likewise.
> 

With regards,
Daniel
-- 
|: https://berrange.com       ~~        https://hachyderm.io/@berrange :|
|: https://libvirt.org          ~~          https://entangle-photo.org :|
|: https://pixelfed.art/berrange   ~~    https://fstop138.berrange.com :|


Reply via email to