@@ -174,7 +174,8 @@ String & String::copy(const char *cstr, unsigned int length)
174
174
return *this ;
175
175
}
176
176
len = length;
177
- strcpy (buffer, cstr);
177
+ memcpy (buffer, cstr, length);
178
+ buffer[len] = 0 ;
178
179
return *this ;
179
180
}
180
181
@@ -185,7 +186,8 @@ String & String::copy(const __FlashStringHelper *pstr, unsigned int length)
185
186
return *this ;
186
187
}
187
188
len = length;
188
- strcpy_P (buffer, (PGM_P)pstr);
189
+ memcpy_P (buffer, (PGM_P)pstr, length);
190
+ buffer[len] = 0 ;
189
191
return *this ;
190
192
}
191
193
@@ -194,7 +196,7 @@ void String::move(String &rhs)
194
196
{
195
197
if (buffer) {
196
198
if (rhs && capacity >= rhs.len ) {
197
- strcpy (buffer, rhs.buffer );
199
+ memcpy (buffer, rhs.buffer , rhs. len + 1 );
198
200
len = rhs.len ;
199
201
rhs.len = 0 ;
200
202
return ;
@@ -266,8 +268,9 @@ unsigned char String::concat(const char *cstr, unsigned int length)
266
268
if (!cstr) return 0 ;
267
269
if (length == 0 ) return 1 ;
268
270
if (!reserve (newlen)) return 0 ;
269
- strcpy (buffer + len, cstr);
271
+ memcpy (buffer + len, cstr, length );
270
272
len = newlen;
273
+ buffer[len] = 0 ;
271
274
return 1 ;
272
275
}
273
276
@@ -341,8 +344,9 @@ unsigned char String::concat(const __FlashStringHelper * str)
341
344
if (length == 0 ) return 1 ;
342
345
unsigned int newlen = len + length;
343
346
if (!reserve (newlen)) return 0 ;
344
- strcpy_P (buffer + len, (const char *) str);
347
+ memcpy_P (buffer + len, (const char *) str, length );
345
348
len = newlen;
349
+ buffer[len] = 0 ;
346
350
return 1 ;
347
351
}
348
352
@@ -653,6 +657,7 @@ void String::replace(const String& find, const String& replace)
653
657
}
654
658
} else if (diff < 0 ) {
655
659
char *writeTo = buffer;
660
+ char *end = buffer + len;
656
661
while ((foundAt = strstr (readFrom, find.buffer )) != NULL ) {
657
662
unsigned int n = foundAt - readFrom;
658
663
memcpy (writeTo, readFrom, n);
@@ -662,7 +667,8 @@ void String::replace(const String& find, const String& replace)
662
667
readFrom = foundAt + find.len ;
663
668
len += diff;
664
669
}
665
- strcpy (writeTo, readFrom);
670
+ memcpy (writeTo, readFrom, end - readFrom);
671
+ buffer[len] = 0 ;
666
672
} else {
667
673
unsigned int size = len; // compute size needed for result
668
674
while ((foundAt = strstr (readFrom, find.buffer )) != NULL ) {
0 commit comments