Re: [RFA] off by one array reference in i386-low.c/i386_show_dr

Mark Kettenis
2011-02-27T21:42:56Z

> Date: Sun, 27 Feb 2011 13:27:31 -0800
> From: Michael Snyder <msnyder@vmware.com>
>
> >> --- i386-low.c 1 Jan 2011 15:33:24 -0000 1.5
> >> +++ i386-low.c 26 Feb 2011 22:48:38 -0000
> > /* A macro to loop over all debug registers. */
> > #define ALL_DEBUG_REGISTERS(i) for (i = 0; i < DR_NADDR; i++)
> >> @@ -195,7 +195,7 @@ i386_show_dr (struct i386_debug_reg_stat
> > ALL_DEBUG_REGISTERS(i)
> > {
> > printf_unfiltered ("\
> >> \tDR%d: addr=0x%s, ref.count=%d DR%d: addr=0x%s, ref.count=%d\n",
> >> i, paddress (state->dr_mirror[i]),
> >> state->dr_ref_count[i],
> >> - i + 1, paddress (state->dr_mirror[i + 1]),
> >> + i + 1, paddress (state->dr_mirror[i]),
> >> state->dr_ref_count[i + 1]);
> >> i++;
> >> }
> >
> > ->
> > CONTROL (DR7): 0000000000090101 STATUS (DR6): 0000000000004000
> > DR0: addr=0x0000000001c31f30, ref.count=1 DR1: addr=0x0000000000000000, ref.count=0
> > DR2: addr=0x0000000000000000, ref.count=0 DR3: addr=0x0000000000000000, ref.count=0
> >
> > I do not see a bug there; still it could be better commented.
>
> The bug is that when "i" is 3, "i + 1" is 4, and the array only runs
> from 0 to 3.

But i can't be 3.