File tree Expand file tree Collapse file tree 2 files changed +13
-3
lines changed Expand file tree Collapse file tree 2 files changed +13
-3
lines changed Original file line number Diff line number Diff line change @@ -130,9 +130,9 @@ String::~String() {
130130
131131inline void String::init (void ) {
132132 setSSO (false );
133+ setBuffer (nullptr );
133134 setCapacity (0 );
134135 setLen (0 );
135- setBuffer (nullptr );
136136}
137137
138138void String::invalidate (void ) {
Original file line number Diff line number Diff line change @@ -301,9 +301,19 @@ class String {
301301 inline unsigned int len () const { return isSSO () ? sso.len : ptr.len ; }
302302 inline unsigned int capacity () const { return isSSO () ? (unsigned int )SSOSIZE - 1 : ptr.cap ; } // Size of max string not including terminal NUL
303303 inline void setSSO (bool set) { sso.isSSO = set; }
304- inline void setLen (int len) { if (isSSO ()) sso.len = len; else ptr.len = len; }
304+ inline void setLen (int len) {
305+ if (isSSO ()) {
306+ sso.len = len;
307+ sso.buff [len] = 0 ;
308+ } else {
309+ ptr.len = len;
310+ if (ptr.buff ) {
311+ ptr.buff [len] = 0 ;
312+ }
313+ }
314+ }
305315 inline void setCapacity (int cap) { if (!isSSO ()) ptr.cap = cap; }
306- inline void setBuffer (char *buff) { if (!isSSO ()) ptr.buff = buff; }
316+ inline void setBuffer (char *buff) { if (!isSSO ()) ptr.buff = buff; }
307317 // Buffer accessor functions
308318 inline const char *buffer () const { return (const char *)(isSSO () ? sso.buff : ptr.buff ); }
309319 inline char *wbuffer () const { return isSSO () ? const_cast <char *>(sso.buff ) : ptr.buff ; } // Writable version of buffer
You can’t perform that action at this time.
0 commit comments