aboutsummaryrefslogtreecommitdiffstats
path: root/epan/prefs.c
diff options
context:
space:
mode:
authormorriss <morriss@f5534014-38df-0310-8fa8-9805f1628bb7>2010-10-29 22:09:31 +0000
committermorriss <morriss@f5534014-38df-0310-8fa8-9805f1628bb7>2010-10-29 22:09:31 +0000
commite6c4bcd25cef6f8d3a1bdff9d083a451636b58cf (patch)
tree03ef3c16c38dc1cbbbfe2b3a95f8544a1836b967 /epan/prefs.c
parent5c9f5e29d7ea2d7afb55fbcd677e3fed0a1a4109 (diff)
Fix https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=4768 :
Return an error if the user specifies a value in a range in excess of the range-specified maximum. Except when reading in preferences files which might have ranges that exceed the maximum (because we didn't use to check): in that case silently lower the out-of-range values. git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@34698 f5534014-38df-0310-8fa8-9805f1628bb7
Diffstat (limited to 'epan/prefs.c')
-rw-r--r--epan/prefs.c25
1 files changed, 16 insertions, 9 deletions
diff --git a/epan/prefs.c b/epan/prefs.c
index 10b7bbb722..f98ed4194b 100644
--- a/epan/prefs.c
+++ b/epan/prefs.c
@@ -59,7 +59,7 @@ static module_t *find_subtree(module_t *parent, const char *tilte);
static module_t *prefs_register_module_or_subtree(module_t *parent,
const char *name, const char *title, const char *description, gboolean is_subtree,
void (*apply_cb)(void));
-static prefs_set_pref_e set_pref(gchar*, gchar*, void *);
+static prefs_set_pref_e set_pref(gchar*, gchar*, void *, gboolean);
static gchar *put_string_list(GList *);
static void free_col_info(e_prefs *);
@@ -1477,7 +1477,11 @@ read_prefs_file(const char *pf_path, FILE *pf,
if (isalnum(got_c)) {
if (cur_var->len > 0) {
if (got_val) {
- switch (pref_set_pair_fct(cur_var->str, cur_val->str, private_data)) {
+ /* Convert the string to a range. Since we're reading the
+ * preferences file, silently lower values in excess of the
+ * range's maximum.
+ */
+ switch (pref_set_pair_fct(cur_var->str, cur_val->str, private_data, FALSE)) {
case PREFS_SET_OK:
break;
@@ -1537,7 +1541,11 @@ read_prefs_file(const char *pf_path, FILE *pf,
}
if (cur_var->len > 0) {
if (got_val) {
- switch (pref_set_pair_fct(cur_var->str, cur_val->str, private_data)) {
+ /* Convert the string to a range. Since we're reading the
+ * preferences file, silently lower values in excess of the
+ * range's maximum.
+ */
+ switch (pref_set_pair_fct(cur_var->str, cur_val->str, private_data, FALSE)) {
case PREFS_SET_OK:
break;
@@ -1663,7 +1671,7 @@ prefs_set_pref(char *prefarg)
return PREFS_SET_SYNTAX_ERR;
}
if (strcmp(prefarg, "uat")) {
- ret = set_pref(prefarg, p, NULL);
+ ret = set_pref(prefarg, p, NULL, TRUE);
} else {
ret = prefs_set_uat_pref(p) ? PREFS_SET_OK : PREFS_SET_SYNTAX_ERR;
}
@@ -1944,7 +1952,8 @@ try_convert_to_custom_column(gpointer *el_data)
}
static prefs_set_pref_e
-set_pref(gchar *pref_name, gchar *value, void *private_data _U_)
+set_pref(gchar *pref_name, gchar *value, void *private_data _U_,
+ gboolean return_range_errors)
{
GList *col_l, *col_l_elt;
gint llen;
@@ -2695,10 +2704,8 @@ set_pref(gchar *pref_name, gchar *value, void *private_data _U_)
{
range_t *newrange;
- if (range_convert_str(&newrange, value, pref->info.max_value) !=
- CVT_NO_ERROR) {
- /* XXX - distinguish between CVT_SYNTAX_ERROR and
- CVT_NUMBER_TOO_BIG */
+ if (range_convert_str_work(&newrange, value, pref->info.max_value,
+ return_range_errors) != CVT_NO_ERROR) {
return PREFS_SET_SYNTAX_ERR; /* number was bad */
}