summaryrefslogtreecommitdiffstats
path: root/src/plugins/chartable.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@rambler-co.ru>2009-04-24 15:23:41 +0400
committerVsevolod Stakhov <vsevolod@rambler-co.ru>2009-04-24 15:23:41 +0400
commit521c2b24b92d2085629d0e34d18110b3a643a77a (patch)
tree44a264c37e7b0fd6e021cb4a99189f95fd274dd8 /src/plugins/chartable.c
parent0cc688fe0be5662e761639d853745153a13522f2 (diff)
downloadrspamd-521c2b24b92d2085629d0e34d18110b3a643a77a.tar.gz
rspamd-521c2b24b92d2085629d0e34d18110b3a643a77a.zip
* Validate utf8 chars to avoid crashes
Diffstat (limited to 'src/plugins/chartable.c')
-rw-r--r--src/plugins/chartable.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/plugins/chartable.c b/src/plugins/chartable.c
index fe2ed858e..d05912f57 100644
--- a/src/plugins/chartable.c
+++ b/src/plugins/chartable.c
@@ -142,14 +142,23 @@ check_part (struct mime_text_part *part, gboolean raw_mode)
}
else {
while (remain > 0) {
- c = g_utf8_get_char (p);
+ c = g_utf8_get_char_validated (p, remain);
+ if (c == (gunichar)-2 || c == (gunichar)-1) {
+ /* Invalid characters detected, stop processing*/
+ return FALSE;
+ }
+
scc = g_unichar_get_script (c);
p1 = g_utf8_next_char (p);
remain -= p1 - p;
p = p1;
if (remain > 0) {
- t = g_utf8_get_char (p);
+ t = g_utf8_get_char_validated (p, remain);
+ if (c == (gunichar)-2 || c == (gunichar)-1) {
+ /* Invalid characters detected, stop processing*/
+ return FALSE;
+ }
sct = g_unichar_get_script (t);
if (g_unichar_isalnum (c) && g_unichar_isalnum (t)) {
/* We have two unicode alphanumeric characters, so we can check its script */