Merge pull request #2105 from Airblader/bug-2099
Reject empty swallow definitions
This commit is contained in:
commit
8e081d7fff
|
@ -30,6 +30,7 @@ static bool parsing_geometry;
|
||||||
static bool parsing_focus;
|
static bool parsing_focus;
|
||||||
static bool parsing_marks;
|
static bool parsing_marks;
|
||||||
struct Match *current_swallow;
|
struct Match *current_swallow;
|
||||||
|
static bool swallow_is_empty;
|
||||||
|
|
||||||
/* This list is used for reordering the focus stack after parsing the 'focus'
|
/* This list is used for reordering the focus stack after parsing the 'focus'
|
||||||
* array. */
|
* array. */
|
||||||
|
@ -48,6 +49,7 @@ static int json_start_map(void *ctx) {
|
||||||
current_swallow = smalloc(sizeof(Match));
|
current_swallow = smalloc(sizeof(Match));
|
||||||
match_init(current_swallow);
|
match_init(current_swallow);
|
||||||
TAILQ_INSERT_TAIL(&(json_node->swallow_head), current_swallow, matches);
|
TAILQ_INSERT_TAIL(&(json_node->swallow_head), current_swallow, matches);
|
||||||
|
swallow_is_empty = true;
|
||||||
} else {
|
} else {
|
||||||
if (!parsing_rect && !parsing_deco_rect && !parsing_window_rect && !parsing_geometry) {
|
if (!parsing_rect && !parsing_deco_rect && !parsing_window_rect && !parsing_geometry) {
|
||||||
if (last_key && strcasecmp(last_key, "floating_nodes") == 0) {
|
if (last_key && strcasecmp(last_key, "floating_nodes") == 0) {
|
||||||
|
@ -151,6 +153,13 @@ static int json_end_map(void *ctx) {
|
||||||
json_node = json_node->parent;
|
json_node = json_node->parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (parsing_swallows && swallow_is_empty) {
|
||||||
|
/* We parsed an empty swallow definition. This is an invalid layout
|
||||||
|
* definition, hence we reject it. */
|
||||||
|
ELOG("Layout file is invalid: found an empty swallow definition.\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
parsing_rect = false;
|
parsing_rect = false;
|
||||||
parsing_deco_rect = false;
|
parsing_deco_rect = false;
|
||||||
parsing_window_rect = false;
|
parsing_window_rect = false;
|
||||||
|
@ -232,12 +241,16 @@ static int json_string(void *ctx, const unsigned char *val, size_t len) {
|
||||||
sasprintf(&sval, "%.*s", len, val);
|
sasprintf(&sval, "%.*s", len, val);
|
||||||
if (strcasecmp(last_key, "class") == 0) {
|
if (strcasecmp(last_key, "class") == 0) {
|
||||||
current_swallow->class = regex_new(sval);
|
current_swallow->class = regex_new(sval);
|
||||||
|
swallow_is_empty = false;
|
||||||
} else if (strcasecmp(last_key, "instance") == 0) {
|
} else if (strcasecmp(last_key, "instance") == 0) {
|
||||||
current_swallow->instance = regex_new(sval);
|
current_swallow->instance = regex_new(sval);
|
||||||
|
swallow_is_empty = false;
|
||||||
} else if (strcasecmp(last_key, "window_role") == 0) {
|
} else if (strcasecmp(last_key, "window_role") == 0) {
|
||||||
current_swallow->window_role = regex_new(sval);
|
current_swallow->window_role = regex_new(sval);
|
||||||
|
swallow_is_empty = false;
|
||||||
} else if (strcasecmp(last_key, "title") == 0) {
|
} else if (strcasecmp(last_key, "title") == 0) {
|
||||||
current_swallow->title = regex_new(sval);
|
current_swallow->title = regex_new(sval);
|
||||||
|
swallow_is_empty = false;
|
||||||
} else {
|
} else {
|
||||||
ELOG("swallow key %s unknown\n", last_key);
|
ELOG("swallow key %s unknown\n", last_key);
|
||||||
}
|
}
|
||||||
|
@ -433,12 +446,15 @@ static int json_int(void *ctx, long long val) {
|
||||||
if (parsing_swallows) {
|
if (parsing_swallows) {
|
||||||
if (strcasecmp(last_key, "id") == 0) {
|
if (strcasecmp(last_key, "id") == 0) {
|
||||||
current_swallow->id = val;
|
current_swallow->id = val;
|
||||||
|
swallow_is_empty = false;
|
||||||
}
|
}
|
||||||
if (strcasecmp(last_key, "dock") == 0) {
|
if (strcasecmp(last_key, "dock") == 0) {
|
||||||
current_swallow->dock = val;
|
current_swallow->dock = val;
|
||||||
|
swallow_is_empty = false;
|
||||||
}
|
}
|
||||||
if (strcasecmp(last_key, "insert_where") == 0) {
|
if (strcasecmp(last_key, "insert_where") == 0) {
|
||||||
current_swallow->insert_where = val;
|
current_swallow->insert_where = val;
|
||||||
|
swallow_is_empty = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -455,8 +471,10 @@ static int json_bool(void *ctx, int val) {
|
||||||
json_node->sticky = val;
|
json_node->sticky = val;
|
||||||
|
|
||||||
if (parsing_swallows) {
|
if (parsing_swallows) {
|
||||||
if (strcasecmp(last_key, "restart_mode") == 0)
|
if (strcasecmp(last_key, "restart_mode") == 0) {
|
||||||
current_swallow->restart_mode = val;
|
current_swallow->restart_mode = val;
|
||||||
|
swallow_is_empty = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -54,9 +54,6 @@ print $fh <<'EOT';
|
||||||
"floating": "auto_off",
|
"floating": "auto_off",
|
||||||
"layout": "splitv",
|
"layout": "splitv",
|
||||||
"percent": 0.883854166666667,
|
"percent": 0.883854166666667,
|
||||||
"swallows": [
|
|
||||||
{}
|
|
||||||
],
|
|
||||||
"type": "con",
|
"type": "con",
|
||||||
"nodes": [
|
"nodes": [
|
||||||
{
|
{
|
||||||
|
@ -65,9 +62,6 @@ print $fh <<'EOT';
|
||||||
"floating": "auto_off",
|
"floating": "auto_off",
|
||||||
"layout": "splitv",
|
"layout": "splitv",
|
||||||
"percent": 1,
|
"percent": 1,
|
||||||
"swallows": [
|
|
||||||
{}
|
|
||||||
],
|
|
||||||
"type": "con",
|
"type": "con",
|
||||||
"nodes": [
|
"nodes": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -54,7 +54,7 @@ print $fh <<'EOT';
|
||||||
"percent": 1,
|
"percent": 1,
|
||||||
"swallows": [
|
"swallows": [
|
||||||
{
|
{
|
||||||
// "class": "^URxvt$",
|
"class": "^URxvt$"
|
||||||
// "instance": "^urxvt$",
|
// "instance": "^urxvt$",
|
||||||
// "title": "^vals\\@w00t\\:\\ \\~$"
|
// "title": "^vals\\@w00t\\:\\ \\~$"
|
||||||
}
|
}
|
||||||
|
@ -119,7 +119,7 @@ print $fh <<'EOT';
|
||||||
"percent": 1,
|
"percent": 1,
|
||||||
"swallows": [
|
"swallows": [
|
||||||
{
|
{
|
||||||
// "class": "^URxvt$",
|
"class": "^URxvt$"
|
||||||
// "instance": "^urxvt$",
|
// "instance": "^urxvt$",
|
||||||
// "title": "^vals\\@w00t\\:\\ \\~$"
|
// "title": "^vals\\@w00t\\:\\ \\~$"
|
||||||
}
|
}
|
||||||
|
@ -165,7 +165,7 @@ print $fh <<'EOT';
|
||||||
"percent": 1,
|
"percent": 1,
|
||||||
"swallows": [
|
"swallows": [
|
||||||
{
|
{
|
||||||
// "class": "^URxvt$",
|
"class": "^URxvt$"
|
||||||
// "instance": "^urxvt$",
|
// "instance": "^urxvt$",
|
||||||
// "title": "^vals\\@w00t\\:\\ \\~$"
|
// "title": "^vals\\@w00t\\:\\ \\~$"
|
||||||
}
|
}
|
||||||
|
@ -213,7 +213,7 @@ print $fh <<'EOT';
|
||||||
"percent": 1,
|
"percent": 1,
|
||||||
"swallows": [
|
"swallows": [
|
||||||
{
|
{
|
||||||
// "class": "^URxvt$",
|
"class": "^URxvt$"
|
||||||
// "instance": "^urxvt$",
|
// "instance": "^urxvt$",
|
||||||
// "title": "^vals\\@w00t\\:\\ \\~$"
|
// "title": "^vals\\@w00t\\:\\ \\~$"
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue