[syslinux] [PATCH] chrreplace: Don't skip the first character
Josh Triplett
josh at joshtriplett.org
Mon Sep 28 07:10:24 PDT 2015
On Mon, Sep 28, 2015 at 10:29:16AM +0200, Erwan Velu wrote:
> Just looking at the code and the description of it, for me the current code
> looks wrong and the proposed patch correct for the following reason:
>
> The while loop is made for insuring that *source is valid but just after
> shift the pointer by one.
> This new position isn't tested and so we are addressing an unknown area.
> That could corrupt some memory.
Fortunately, as long as the string terminates with a '\0' (and someone
doesn't pass '\0' as "old"), this can't actually overrun.
> But also as reported, that prevent from changing the first char.
>
> I've been contributing that code and sounds like only the code I produced
> is using it (hdt & the pci scan).
> So I'd vote for including that patch. If any regression occur, I'd look at
> it.
>
> Thanks for reporting, +1 for the merge.
Thanks.
- Josh Triplett
> 2015-09-22 12:45 GMT+02:00 Gene Cumm <gene.cumm at gmail.com>:
>
> > Erwan, could you shed some light on this? Was the behavior
> > intentional? If not, I think it might prove more useful down the road
> > to commit this patch. Original code in commit ID 85d9a1a
> >
> > --
> > -Gene
> >
> > On Sat, May 16, 2015 at 3:30 AM, Josh Triplett via Syslinux
> > <syslinux at zytor.com> wrote:
> > > Check if the first character matches the character to replace, rather
> > > than skipping it and starting with the second.
> > >
> > > Signed-off-by: Josh Triplett <josh at joshtriplett.org>
> > > ---
> > >
> > > I'm assuming, based on a look at the callers, that this is not
> > > intentional, and that it just happened that none of the callers happened
> > > to ever need to replace the first character.
> > >
> > > com32/lib/chrreplace.c | 2 +-
> > > 1 file changed, 1 insertion(+), 1 deletion(-)
> > >
> > > diff --git a/com32/lib/chrreplace.c b/com32/lib/chrreplace.c
> > > index 65786f9..cfbf5d4 100644
> > > --- a/com32/lib/chrreplace.c
> > > +++ b/com32/lib/chrreplace.c
> > > @@ -4,8 +4,8 @@
> > > void chrreplace(char *source, char old, char new)
> > > {
> > > while (*source) {
> > > - source++;
> > > if (source[0] == old) source[0]=new;
> > > + source++;
> > > }
> > > }
> > >
> >
More information about the Syslinux
mailing list