summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRĂ©mi Verschelde <rverschelde@gmail.com>2022-12-20 10:44:08 +0100
committerGitHub <noreply@github.com>2022-12-20 10:44:08 +0100
commit104997e83e304d99e29cccbd2ba26867b18dd190 (patch)
treee7b061425f81b9db4fb41eda18a65418bc7471d3 /src
parentc0eaadac86d318e99d05462eaf6337dd77a54f67 (diff)
parent1f6b0118dcb442f89bec19f4dd185e981ac20db5 (diff)
downloadredot-cpp-104997e83e304d99e29cccbd2ba26867b18dd190.tar.gz
Merge pull request #961 from mihe/char-string-length
Fix incorrect length passed to `CharString`
Diffstat (limited to 'src')
-rw-r--r--src/variant/char_string.cpp55
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) {