Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:jberkman
evolution-data-server-2.6
bnc-163664-eds-crashes-on-invalid-utf8-contacts...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File bnc-163664-eds-crashes-on-invalid-utf8-contacts.patch of Package evolution-data-server-2.6
--- addressbook/libebook/e-vcard.c.orig 2006-04-04 20:53:02.000000000 -0500 +++ addressbook/libebook/e-vcard.c 2006-04-04 20:56:55.000000000 -0500 @@ -541,6 +541,45 @@ read_attribute (char **p) return NULL; } +/* Stolen from glib/glib/gconvert.c */ +static gchar * +make_valid_utf8 (const gchar *name) +{ + GString *string; + const gchar *remainder, *invalid; + gint remaining_bytes, valid_bytes; + + string = NULL; + remainder = name; + remaining_bytes = strlen (name); + + while (remaining_bytes != 0) + { + if (g_utf8_validate (remainder, remaining_bytes, &invalid)) + break; + valid_bytes = invalid - remainder; + + if (string == NULL) + string = g_string_sized_new (remaining_bytes); + + g_string_append_len (string, remainder, valid_bytes); + /* append U+FFFD REPLACEMENT CHARACTER */ + g_string_append (string, "\357\277\275"); + + remaining_bytes -= valid_bytes + 1; + remainder = invalid + 1; + } + + if (string == NULL) + return g_strdup (name); + + g_string_append (string, remainder); + + g_assert (g_utf8_validate (string->str, -1, NULL)); + + return g_string_free (string, FALSE); +} + /* we try to be as forgiving as we possibly can here - this isn't a * validator. Almost nothing is considered a fatal error. We always * try to return *something*. @@ -548,17 +587,12 @@ read_attribute (char **p) static void parse (EVCard *evc, const char *str) { - char *buf = g_strdup (str); - char *p, *end; + char *buf; + char *p; EVCardAttribute *attr; - /* first validate the string is valid utf8 */ - if (!g_utf8_validate (buf, -1, (const char **)&end)) { - /* if the string isn't valid, we parse as much as we can from it */ - g_warning ("invalid utf8 passed to EVCard. Limping along."); - *end = '\0'; - } - + buf = make_valid_utf8 (str); + buf = fold_lines (buf); d(printf ("BEFORE FOLDING:\n"));
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor