aspell-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [aspell-devel] The String class for 0.60 does not null terminate str


From: Kevin Atkinson
Subject: Re: [aspell-devel] The String class for 0.60 does not null terminate strings.
Date: Mon, 27 Sep 2004 09:21:59 -0600 (MDT)

On Mon, 27 Sep 2004, Gary Setter wrote:

> > On Sun, 26 Sep 2004, Gary Setter wrote:
> >
> > > I'm doing a Win32 port. I just got it to compile and I'm seeing
> > > how things work. Right away I see that the String class does not
> > > null terminate.
> >
> > Can you be more specific.  The String class does not always null terminate
> > but it does when needed.
> 
> The version that I downloaded has a write date of 24-Jun-04
> 11:07pm
> 
> The c'tor from a const char * is
> 
>     String(const char * s) {assign_only(s);}
> 
> assign only is
>     void assign_only(const char * b)
>     {
>       if (b && *b) assign_only_nonnull(b, strlen(b));
>       else zero();
>     }
...
> You will call assign_only_nonnull with b= "a\0" and size = 1. The
> memmove will only copy one character ( the 'a' )  to begin_[0],
> begin_[1] is not initialized.
> That is just one example.
> Do you want to see my rendition?

That is correct.  The string is not guaranteed to be null terminated.  This 
is for performance reasons as is not always needed.  This is most apparent 
when appending one character at a time.  The string is only null 
terminated when c_Star() is called or ensure_null_end() is called. 
Otherwise it leaves room for the null end but doesn't null terminate the 
string.  This is a design design on my part which I will not change with 
out a very good reason.

Fell free to submit a patch which adds some documentation on the behavior 
of the String class.

-- 
http://kevin.atkinson.dhs.org





reply via email to

[Prev in Thread] Current Thread [Next in Thread]