utils: validate string before g_utf8_next_char()

This commit is contained in:
Zero King
2021-12-25 13:28:43 +00:00
committed by Dirk-Jan C. Binnema
parent c3503ba663
commit d0a3ca3453

View File

@ -36,6 +36,7 @@
#include "mu-utils.hh" #include "mu-utils.hh"
#include "mu-util.h" #include "mu-util.h"
#include "mu-str.h"
using namespace Mu; using namespace Mu;
@ -131,8 +132,9 @@ std::string
Mu::utf8_clean(const std::string& dirty) Mu::utf8_clean(const std::string& dirty)
{ {
GString* gstr = g_string_sized_new(dirty.length()); GString* gstr = g_string_sized_new(dirty.length());
auto cstr = mu_str_utf8ify(dirty.c_str());
for (auto cur = dirty.c_str(); cur && *cur; cur = g_utf8_next_char(cur)) { for (auto cur = cstr; cur && *cur; cur = g_utf8_next_char(cur)) {
const gunichar uc = g_utf8_get_char(cur); const gunichar uc = g_utf8_get_char(cur);
if (g_unichar_iscntrl(uc)) if (g_unichar_iscntrl(uc))
g_string_append_c(gstr, ' '); g_string_append_c(gstr, ' ');
@ -140,6 +142,7 @@ Mu::utf8_clean(const std::string& dirty)
g_string_append_unichar(gstr, uc); g_string_append_unichar(gstr, uc);
} }
g_free(cstr);
std::string clean(gstr->str, gstr->len); std::string clean(gstr->str, gstr->len);
g_string_free(gstr, TRUE); g_string_free(gstr, TRUE);