diff options
author | Milan Crha <mcrha@redhat.com> | 2014-01-29 00:26:14 +0800 |
---|---|---|
committer | Milan Crha <mcrha@redhat.com> | 2014-01-29 00:26:14 +0800 |
commit | 6c0dfdc7c04ebc695ced5ac1007cf4e7416ebcc7 (patch) | |
tree | d2f452b3ceaf303f2dcfc6e532b9fa7e474d9878 /e-util | |
parent | 64b2c69bd64d51f8afd112ad8cf4809ceac261a5 (diff) | |
download | gsoc2013-evolution-6c0dfdc7c04ebc695ced5ac1007cf4e7416ebcc7.tar gsoc2013-evolution-6c0dfdc7c04ebc695ced5ac1007cf4e7416ebcc7.tar.gz gsoc2013-evolution-6c0dfdc7c04ebc695ced5ac1007cf4e7416ebcc7.tar.bz2 gsoc2013-evolution-6c0dfdc7c04ebc695ced5ac1007cf4e7416ebcc7.tar.lz gsoc2013-evolution-6c0dfdc7c04ebc695ced5ac1007cf4e7416ebcc7.tar.xz gsoc2013-evolution-6c0dfdc7c04ebc695ced5ac1007cf4e7416ebcc7.tar.zst gsoc2013-evolution-6c0dfdc7c04ebc695ced5ac1007cf4e7416ebcc7.zip |
Bug #722951 - Check for empty rule values
Diffstat (limited to 'e-util')
-rw-r--r-- | e-util/e-filter-input.c | 49 | ||||
-rw-r--r-- | e-util/e-filter-input.h | 1 | ||||
-rw-r--r-- | e-util/e-filter-rule.c | 2 | ||||
-rw-r--r-- | e-util/filter.error.xml | 5 |
4 files changed, 54 insertions, 3 deletions
diff --git a/e-util/e-filter-input.c b/e-util/e-filter-input.c index 3e38410a59..512cf2dce1 100644 --- a/e-util/e-filter-input.c +++ b/e-util/e-filter-input.c @@ -106,6 +106,28 @@ filter_input_validate (EFilterElement *element, } regfree (®expat); + } else if (!input->allow_empty && (!input->values || !input->values->next)) { + const gchar *value = input->values->data; + gboolean is_empty = value == NULL; + + if (value) { + gint ii; + + is_empty = TRUE; + + for (ii = 0; value[ii]; ii++) { + if (!g_ascii_isspace (value[ii])) { + is_empty = FALSE; + break; + } + } + } + + if (is_empty) { + valid = FALSE; + if (alert) + *alert = e_alert_new ("filter:not-allow-empty", NULL); + } } return valid; @@ -142,7 +164,23 @@ filter_input_eq (EFilterElement *element_a, if (link_a != NULL || link_b != NULL) return FALSE; - return TRUE; + return input_a->allow_empty == input_b->allow_empty; +} + +static void +filter_input_xml_create (EFilterElement *element, + xmlNodePtr node) +{ + EFilterInput *input = E_FILTER_INPUT (element); + gchar *allow_empty; + + /* Chain up to parent's method. */ + E_FILTER_ELEMENT_CLASS (e_filter_input_parent_class)->xml_create (element, node); + + allow_empty = (gchar *) xmlGetProp (node, (xmlChar *) "allow-empty"); + + input->allow_empty = !allow_empty || g_strcmp0 (allow_empty, "true") == 0; + xmlFree (allow_empty); } static xmlNodePtr @@ -158,6 +196,7 @@ filter_input_xml_encode (EFilterElement *element) value = xmlNewNode (NULL, (xmlChar *) "value"); xmlSetProp (value, (xmlChar *) "name", (xmlChar *) element->name); xmlSetProp (value, (xmlChar *) "type", (xmlChar *) type); + xmlSetProp (value, (xmlChar *) "allow-empty", (xmlChar *) (input->allow_empty ? "true" : "false")); for (link = input->values; link != NULL; link = g_list_next (link)) { xmlChar *str = link->data; @@ -178,7 +217,7 @@ filter_input_xml_decode (EFilterElement *element, xmlNodePtr node) { EFilterInput *input = (EFilterInput *) element; - gchar *name, *str, *type; + gchar *name, *str, *type, *allow_empty; xmlNodePtr child; g_list_foreach (input->values, (GFunc) g_free, NULL); @@ -187,6 +226,7 @@ filter_input_xml_decode (EFilterElement *element, name = (gchar *) xmlGetProp (node, (xmlChar *) "name"); type = (gchar *) xmlGetProp (node, (xmlChar *) "type"); + allow_empty = (gchar *) xmlGetProp (node, (xmlChar *) "allow-empty"); xmlFree (element->name); element->name = name; @@ -194,6 +234,9 @@ filter_input_xml_decode (EFilterElement *element, xmlFree (input->type); input->type = type; + input->allow_empty = !allow_empty || g_strcmp0 (allow_empty, "true") == 0; + xmlFree (allow_empty); + child = node->children; while (child != NULL) { if (!strcmp ((gchar *) child->name, type)) { @@ -254,6 +297,7 @@ e_filter_input_class_init (EFilterInputClass *class) filter_element_class = E_FILTER_ELEMENT_CLASS (class); filter_element_class->validate = filter_input_validate; filter_element_class->eq = filter_input_eq; + filter_element_class->xml_create = filter_input_xml_create; filter_element_class->xml_encode = filter_input_xml_encode; filter_element_class->xml_decode = filter_input_xml_decode; filter_element_class->get_widget = filter_input_get_widget; @@ -264,6 +308,7 @@ static void e_filter_input_init (EFilterInput *input) { input->values = g_list_prepend (NULL, g_strdup ("")); + input->allow_empty = TRUE; } /** diff --git a/e-util/e-filter-input.h b/e-util/e-filter-input.h index 28f7096507..456da413d6 100644 --- a/e-util/e-filter-input.h +++ b/e-util/e-filter-input.h @@ -60,6 +60,7 @@ struct _EFilterInput { gchar *type; /* name of type */ GList *values; /* strings */ + gboolean allow_empty; /* whether can have empty value */ }; struct _EFilterInputClass { diff --git a/e-util/e-filter-rule.c b/e-util/e-filter-rule.c index 5d0b1943a0..d339efde03 100644 --- a/e-util/e-filter-rule.c +++ b/e-util/e-filter-rule.c @@ -400,7 +400,7 @@ filter_rule_validate (EFilterRule *rule, parts = parts->next; } - if (!valid && !parts && alert) + if (!valid && !rule->parts && alert) *alert = e_alert_new ("filter:no-condition", NULL); return valid; diff --git a/e-util/filter.error.xml b/e-util/filter.error.xml index 0b35f059be..dbce98dabe 100644 --- a/e-util/filter.error.xml +++ b/e-util/filter.error.xml @@ -36,4 +36,9 @@ <_secondary>Filter should have at least one condition.</_secondary> </error> + <error id="not-allow-empty" type="error"> + <_primary>Missing value.</_primary> + <_secondary>One or more values cannot be empty.</_secondary> + </error> + </error-list> |