summaryrefslogtreecommitdiff
path: root/core/ustring.cpp
diff options
context:
space:
mode:
authorIbrahn Sahir <ibrahn.sahir@gmail.com>2019-03-12 12:57:22 +0000
committerIbrahn Sahir <ibrahn.sahir@gmail.com>2019-04-22 13:34:17 +0100
commit9d0b3b300cd219ebec9287b3f97c3c0e220cd18d (patch)
tree2e09874c2630a921651466e54c1ad31599b63667 /core/ustring.cpp
parent05dda9f87c9b71e92572120561ec09065b6dedec (diff)
fixed an access after free in OS_X11::set_context.
Added constructor and assignment operator for CharString from const char* to simplify memory management when working with utf8/ascii strings for APIs taking char*. Reworked OS_X11::set_context to use CharString and avoid some manual memory management.
Diffstat (limited to 'core/ustring.cpp')
-rw-r--r--core/ustring.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/core/ustring.cpp b/core/ustring.cpp
index d60bd16921..78feddb229 100644
--- a/core/ustring.cpp
+++ b/core/ustring.cpp
@@ -123,6 +123,31 @@ const char *CharString::get_data() const {
return "";
}
+CharString &CharString::operator=(const char *p_cstr) {
+
+ copy_from(p_cstr);
+ return *this;
+}
+
+void CharString::copy_from(const char *p_cstr) {
+
+ if (!p_cstr) {
+ resize(0);
+ return;
+ }
+
+ size_t len = strlen(p_cstr);
+
+ if (len == 0) {
+ resize(0);
+ return;
+ }
+
+ resize(len + 1); // include terminating null char
+
+ strcpy(ptrw(), p_cstr);
+}
+
void String::copy_from(const char *p_cstr) {
if (!p_cstr) {