Re: The String class for 0.60 does not null terminate strings.

Kevin Atkinson <[email protected]>
Newsgroups gmane.comp.gnu.aspell.devel
Message-ID <Pine.LNX.4.44.0409270914520.2586-100000@kevin-p3.atkinson.dhs.org>
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.