[grilo-plugins] local-metadata: Fixes to video_sanitise_string non-alnum handling
- From: Bastien Nocera <hadess src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [grilo-plugins] local-metadata: Fixes to video_sanitise_string non-alnum handling
- Date: Thu, 11 Jun 2015 11:12:39 +0000 (UTC)
commit a8f3ef6354a31981d98821dbd3b8f20bff19863e
Author: Jan Alexander Steffens (heftig) <jan steffens gmail com>
Date: Tue May 19 20:53:28 2015 +0200
local-metadata: Fixes to video_sanitise_string non-alnum handling
- Extract loop condition into a helper function
- Use g_utf8_get_char to properly convert to unichar
- Be more defensive about g_utf8_find_prev_char returning NULL
https://bugzilla.gnome.org/show_bug.cgi?id=748604
src/local-metadata/grl-local-metadata.c | 39 ++++++++++++++++++++++--------
1 files changed, 28 insertions(+), 11 deletions(-)
---
diff --git a/src/local-metadata/grl-local-metadata.c b/src/local-metadata/grl-local-metadata.c
index 45856be..c7f731e 100644
--- a/src/local-metadata/grl-local-metadata.c
+++ b/src/local-metadata/grl-local-metadata.c
@@ -242,6 +242,28 @@ grl_local_metadata_source_set_property (GObject *object,
/* ======================= Utilities ==================== */
+static gboolean
+is_nonalnum (const gchar *str)
+{
+ gunichar uchar;
+
+ if (str == NULL) {
+ return FALSE;
+ }
+
+ uchar = g_utf8_get_char (str);
+
+ if (g_unichar_isalnum (uchar)) {
+ return FALSE;
+ }
+
+ if (uchar == '!' || uchar == '?' || uchar == '.') {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
static gchar *
video_sanitise_string (const gchar *str)
{
@@ -270,22 +292,17 @@ video_sanitise_string (const gchar *str)
}
if (*line_end != '\0') {
- line_end = g_utf8_find_prev_char (line, line_end);
-
+ /* After removing substring with blacklisted word, ignore non alpha-numeric
+ * char in the end of the sanitised string */
+ do {
+ line_end = g_utf8_find_prev_char (line, line_end);
+ } while (is_nonalnum (line_end));
/* If everything in the string is blacklisted, just ignore
* the blackisting logic.
*/
- if (line_end == NULL)
+ if (line_end == NULL) {
return g_strdup (str);
-
- /* After removing substring with blacklisted word, ignore non alpha-numeric
- * char in the end of the sanitised string */
- while (g_unichar_isalnum (*line_end) == FALSE &&
- *line_end != '!' &&
- *line_end != '?' &&
- *line_end != '.') {
- line_end = g_utf8_find_prev_char (line, line_end);
}
return g_strndup (line, line_end - line);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]