mirror of
https://github.com/irssi/irssi.git
synced 2026-08-18 16:12:30 +02:00
Reject invalid level specifications in /set.
Most of these have names that end in "_level". git-svn-id: file:///var/www/svn.irssi.org/SVN/irssi/trunk@5021 dbcabf3a-b0e7-0310-adc4-f8d773084564
This commit is contained in:
parent
946e7784b0
commit
cb1f07352a
12 changed files with 26 additions and 12 deletions
|
|
@ -395,7 +395,7 @@ static void read_ignores(void)
|
|||
|
||||
rec->mask = g_strdup(config_node_get_str(node, "mask", NULL));
|
||||
rec->pattern = g_strdup(config_node_get_str(node, "pattern", NULL));
|
||||
rec->level = level2bits(config_node_get_str(node, "level", ""));
|
||||
rec->level = level2bits(config_node_get_str(node, "level", ""), NULL);
|
||||
rec->exception = config_node_get_bool(node, "exception", FALSE);
|
||||
rec->regexp = config_node_get_bool(node, "regexp", FALSE);
|
||||
rec->fullword = config_node_get_bool(node, "fullword", FALSE);
|
||||
|
|
|
|||
|
|
@ -81,11 +81,14 @@ int level_get(const char *level)
|
|||
return match;
|
||||
}
|
||||
|
||||
int level2bits(const char *level)
|
||||
int level2bits(const char *level, int *errorp)
|
||||
{
|
||||
char *orig, *str, *ptr;
|
||||
int ret, singlelevel, negative;
|
||||
|
||||
if (errorp != NULL)
|
||||
*errorp = FALSE;
|
||||
|
||||
g_return_val_if_fail(level != NULL, 0);
|
||||
|
||||
if (*level == '\0')
|
||||
|
|
@ -107,7 +110,8 @@ int level2bits(const char *level)
|
|||
if (singlelevel != 0) {
|
||||
ret = !negative ? (ret | singlelevel) :
|
||||
(ret & ~singlelevel);
|
||||
}
|
||||
} else if (errorp != NULL)
|
||||
*errorp = TRUE;
|
||||
|
||||
while (*str == ' ') str++;
|
||||
if (*str == '\0') break;
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ enum {
|
|||
};
|
||||
|
||||
int level_get(const char *level);
|
||||
int level2bits(const char *level);
|
||||
int level2bits(const char *level, int *errorp);
|
||||
char *bits2level(int bits);
|
||||
int combine_level(int dest, const char *src);
|
||||
|
||||
|
|
|
|||
|
|
@ -540,7 +540,7 @@ static void log_read_config(void)
|
|||
log->handle = -1;
|
||||
log->fname = g_strdup(node->key);
|
||||
log->autoopen = config_node_get_bool(node, "auto_open", FALSE);
|
||||
log->level = level2bits(config_node_get_str(node, "level", 0));
|
||||
log->level = level2bits(config_node_get_str(node, "level", 0), NULL);
|
||||
|
||||
signal_emit("log config read", 2, log, node);
|
||||
|
||||
|
|
|
|||
|
|
@ -134,7 +134,7 @@ int settings_get_level(const char *key)
|
|||
const char *str;
|
||||
|
||||
str = settings_get_str_type(key, SETTING_TYPE_LEVEL);
|
||||
return str == NULL ? 0 : level2bits(str);
|
||||
return str == NULL ? 0 : level2bits(str, NULL);
|
||||
}
|
||||
|
||||
int settings_get_size(const char *key)
|
||||
|
|
@ -355,6 +355,12 @@ int settings_set_time(const char *key, const char *value)
|
|||
|
||||
int settings_set_level(const char *key, const char *value)
|
||||
{
|
||||
int iserror;
|
||||
|
||||
(void)level2bits(value, &iserror);
|
||||
if (iserror)
|
||||
return FALSE;
|
||||
|
||||
iconfig_node_set_str(settings_get_node(key), key, value);
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue