Alvise Rigo <a.r...@virtualopensystems.com> wrote: > The method is not behaving in the way it's supposed to. It should return > the new value only if it's less than the actual one. > > Signed-off-by: Alvise Rigo <a.r...@virtualopensystems.com>
See David patch of this function. There were a bug, we were doing the wrong comparison. But we expect not to chang the local value. We just want the the one that cames is less or equal that the current value (think of an array size, it is a bad idea to try to read a bigger array into a smaller one). BTW, did you find this bug by testing or by code inspection? thanks, Juan. > --- > vmstate.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/vmstate.c b/vmstate.c > index 284b080..038b274 100644 > --- a/vmstate.c > +++ b/vmstate.c > @@ -326,11 +326,11 @@ const VMStateInfo vmstate_info_int32_equal = { > > static int get_int32_le(QEMUFile *f, void *pv, size_t size) > { > - int32_t *old = pv; > - int32_t new; > - qemu_get_sbe32s(f, &new); > + int32_t old = *(int32_t *)pv; > + int32_t *new = pv; > + qemu_get_sbe32s(f, new); > > - if (*old <= new) { > + if (*new <= old) { > return 0; > } > return -EINVAL;