@@ -195,7 +195,7 @@ String String::operator+(const char* rhs) const
195
195
size_t lhsLength = Size ();
196
196
size_t rhsLength = strlen (rhs);
197
197
198
- char cstr[lhsLength + rhsLength];
198
+ char cstr[lhsLength + rhsLength + 1 ];
199
199
strcpy (cstr, data);
200
200
strcpy (cstr + lhsLength, rhs);
201
201
@@ -207,7 +207,7 @@ String String::operator+(char rhs) const
207
207
const char * data = Data ();
208
208
size_t lhsLength = Size ();
209
209
210
- char cstr[lhsLength + 1 ];
210
+ char cstr[lhsLength + 1 + 1 ];
211
211
strcpy (cstr, data);
212
212
cstr[lhsLength] = rhs;
213
213
cstr[lhsLength + 1 ] = ' \0 ' ;
@@ -415,7 +415,7 @@ String String::SubString(int startPos, size_t length) const
415
415
if (startPos >= len || (startPos + length) > len) return {};
416
416
417
417
// Copy over the substring and return it
418
- char subString[length];
418
+ char subString[length + 1 ];
419
419
strncpy (subString, data + startPos, length);
420
420
subString[length] = ' \0 ' ; // Manually add the null-termination char
421
421
return subString;
@@ -498,7 +498,7 @@ void String::Append(const char* string)
498
498
size_t rhsLength = strlen (string);
499
499
size_t fullLength = lhsLength + rhsLength;
500
500
501
- char cstr[fullLength];
501
+ char cstr[fullLength + 1 ];
502
502
strcpy (cstr, data);
503
503
strcpy (cstr + lhsLength, string);
504
504
@@ -526,7 +526,7 @@ void String::Prepend(const String& string)
526
526
size_t rhsLength = Size ();
527
527
size_t fullLength = lhsLength + rhsLength;
528
528
529
- char cstr[fullLength];
529
+ char cstr[fullLength + 1 ];
530
530
strcpy (cstr, string.Data ());
531
531
strcpy (cstr + lhsLength, data);
532
532
@@ -540,7 +540,7 @@ void String::Prepend(const char* string)
540
540
size_t rhsLength = Size ();
541
541
size_t fullLength = lhsLength + rhsLength;
542
542
543
- char cstr[fullLength];
543
+ char cstr[fullLength + 1 ];
544
544
strcpy (cstr, string);
545
545
strcpy (cstr + lhsLength, data);
546
546
@@ -565,14 +565,16 @@ void String::Erase(int startPos, size_t length)
565
565
size_t len = Size ();
566
566
startPos = startPos < 0 ? (int ) len + startPos : startPos;
567
567
length = length == -1 ? len - startPos : length;
568
- if (startPos < 0 || (startPos + length) > len)
568
+
569
+ size_t newLen = len - length;
570
+ if (startPos < 0 || (startPos + length) > len || newLen == 0 )
569
571
{
570
572
Assign (nullptr );
571
573
return ;
572
574
}
573
575
574
576
// Copy over the non-erased portions and assign it
575
- char newStr[len - length ];
577
+ char newStr[newLen ];
576
578
strncpy (newStr, data, startPos);
577
579
strcpy (newStr + startPos, data + startPos + length);
578
580
Assign (newStr);
@@ -618,7 +620,7 @@ bool String::Replace(const char* toReplace, const char* replacement)
618
620
size_t replaceLen = strlen (replacement);
619
621
size_t finalLen = (currentLen - toReplaceLen) + replaceLen;
620
622
621
- char newStr[finalLen];
623
+ char newStr[finalLen + 1 ];
622
624
strncpy (newStr, data, pos);
623
625
strncpy (newStr + pos, replacement, replaceLen);
624
626
strcpy (newStr + pos + replaceLen, data + pos + toReplaceLen);
@@ -674,7 +676,7 @@ String operator+(const char* lhs, const String& rhs)
674
676
size_t lhsLength = strlen (lhs);
675
677
size_t rhsLength = rhs.Size ();
676
678
677
- char cstr[lhsLength + rhsLength];
679
+ char cstr[lhsLength + rhsLength + 1 ];
678
680
strcpy (cstr, lhs);
679
681
strcpy (cstr + lhsLength, rhs.Str ());
680
682
@@ -685,7 +687,7 @@ String operator+(char lhs, const String& rhs)
685
687
{
686
688
size_t rhsLength = rhs.Size ();
687
689
688
- char cstr[1 + rhsLength];
690
+ char cstr[1 + rhsLength + 1 ];
689
691
cstr[0 ] = lhs;
690
692
strcpy (cstr + 1 , rhs.Str ());
691
693
0 commit comments