diff options
author | Mikael Hermansson <mikael@hermansson.io> | 2022-12-14 14:51:19 +0100 |
---|---|---|
committer | Mikael Hermansson <mikael@hermansson.io> | 2022-12-14 15:08:45 +0100 |
commit | 1f6b0118dcb442f89bec19f4dd185e981ac20db5 (patch) | |
tree | cd1e662215f76dbb02dad92774deeefc00ce9cf5 /src | |
parent | 1e8eb1c1f2c3cb2029b9f0202d8ce5dbe18ec33d (diff) | |
download | redot-cpp-1f6b0118dcb442f89bec19f4dd185e981ac20db5.tar.gz |
Fix incorrect length passed to `CharString`
Diffstat (limited to 'src')
-rw-r--r-- | src/variant/char_string.cpp | 55 |
1 files changed, 30 insertions, 25 deletions
diff --git a/src/variant/char_string.cpp b/src/variant/char_string.cpp index 7229823..2e9e2a8 100644 --- a/src/variant/char_string.cpp +++ b/src/variant/char_string.cpp @@ -226,53 +226,58 @@ String rtoss(double p_val) { } CharString String::utf8() const { - int size = internal::gde_interface->string_to_utf8_chars(_native_ptr(), nullptr, 0); - char *cstr = memnew_arr(char, size + 1); - internal::gde_interface->string_to_utf8_chars(_native_ptr(), cstr, size + 1); + int length = internal::gde_interface->string_to_utf8_chars(_native_ptr(), nullptr, 0); + int size = length + 1; + char *cstr = memnew_arr(char, size); + internal::gde_interface->string_to_utf8_chars(_native_ptr(), cstr, length); - cstr[size] = '\0'; + cstr[length] = '\0'; - return CharString(cstr, size + 1); + return CharString(cstr, length); } CharString String::ascii() const { - int size = internal::gde_interface->string_to_latin1_chars(_native_ptr(), nullptr, 0); - char *cstr = memnew_arr(char, size + 1); - internal::gde_interface->string_to_latin1_chars(_native_ptr(), cstr, size + 1); + int length = internal::gde_interface->string_to_latin1_chars(_native_ptr(), nullptr, 0); + int size = length + 1; + char *cstr = memnew_arr(char, size); + internal::gde_interface->string_to_latin1_chars(_native_ptr(), cstr, length); - cstr[size] = '\0'; + cstr[length] = '\0'; - return CharString(cstr, size + 1); + return CharString(cstr, length); } Char16String String::utf16() const { - int size = internal::gde_interface->string_to_utf16_chars(_native_ptr(), nullptr, 0); - char16_t *cstr = memnew_arr(char16_t, size + 1); - internal::gde_interface->string_to_utf16_chars(_native_ptr(), cstr, size + 1); + int length = internal::gde_interface->string_to_utf16_chars(_native_ptr(), nullptr, 0); + int size = length + 1; + char16_t *cstr = memnew_arr(char16_t, size); + internal::gde_interface->string_to_utf16_chars(_native_ptr(), cstr, length); - cstr[size] = '\0'; + cstr[length] = '\0'; - return Char16String(cstr, size + 1); + return Char16String(cstr, length); } Char32String String::utf32() const { - int size = internal::gde_interface->string_to_utf32_chars(_native_ptr(), nullptr, 0); - char32_t *cstr = memnew_arr(char32_t, size + 1); - internal::gde_interface->string_to_utf32_chars(_native_ptr(), cstr, size + 1); + int length = internal::gde_interface->string_to_utf32_chars(_native_ptr(), nullptr, 0); + int size = length + 1; + char32_t *cstr = memnew_arr(char32_t, size); + internal::gde_interface->string_to_utf32_chars(_native_ptr(), cstr, length); - cstr[size] = '\0'; + cstr[length] = '\0'; - return Char32String(cstr, size + 1); + return Char32String(cstr, length); } CharWideString String::wide_string() const { - int size = internal::gde_interface->string_to_wide_chars(_native_ptr(), nullptr, 0); - wchar_t *cstr = memnew_arr(wchar_t, size + 1); - internal::gde_interface->string_to_wide_chars(_native_ptr(), cstr, size + 1); + int length = internal::gde_interface->string_to_wide_chars(_native_ptr(), nullptr, 0); + int size = length + 1; + wchar_t *cstr = memnew_arr(wchar_t, size); + internal::gde_interface->string_to_wide_chars(_native_ptr(), cstr, length); - cstr[size] = '\0'; + cstr[length] = '\0'; - return CharWideString(cstr, size + 1); + return CharWideString(cstr, length); } String &String::operator=(const char *p_str) { |