diff options
author | Marcin Zawiejski <dragmz@gmail.com> | 2018-08-06 23:51:07 +0200 |
---|---|---|
committer | Marcin Zawiejski <dragmz@gmail.com> | 2018-08-06 23:51:07 +0200 |
commit | f3b2689aa6fdc8dd4ab01fdded7fd94a5e998a4c (patch) | |
tree | 2fb98e0dfdf7543746c2f1d95fb9cf5d5bf5137e /core/ustring.cpp | |
parent | 00c573c255d0fcae926dd2fe2a10991c7ad76cd9 (diff) | |
download | redot-engine-f3b2689aa6fdc8dd4ab01fdded7fd94a5e998a4c.tar.gz |
fix out of buffer read when copying non-null terminated strings
Diffstat (limited to 'core/ustring.cpp')
-rw-r--r-- | core/ustring.cpp | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/core/ustring.cpp b/core/ustring.cpp index 84613610a9..4af30a5d5c 100644 --- a/core/ustring.cpp +++ b/core/ustring.cpp @@ -148,7 +148,7 @@ void String::copy_from(const char *p_cstr) { } } -void String::copy_from(const CharType *p_cstr, int p_clip_to) { +void String::copy_from(const CharType *p_cstr, const int p_clip_to) { if (!p_cstr) { @@ -158,12 +158,9 @@ void String::copy_from(const CharType *p_cstr, int p_clip_to) { int len = 0; const CharType *ptr = p_cstr; - while (*(ptr++) != 0) + while ((p_clip_to < 0 || len < p_clip_to) && *(ptr++) != 0) len++; - if (p_clip_to >= 0 && len > p_clip_to) - len = p_clip_to; - if (len == 0) { resize(0); @@ -177,7 +174,7 @@ void String::copy_from(const CharType *p_cstr, int p_clip_to) { // p_char != NULL // p_length > 0 // p_length <= p_char strlen -void String::copy_from_unchecked(const CharType *p_char, int p_length) { +void String::copy_from_unchecked(const CharType *p_char, const int p_length) { resize(p_length + 1); set(p_length, 0); |