Fix SEGFAULT when i3bar receives invalid input

Fixes #3844
This commit is contained in:
Orestis Floros 2020-04-10 11:38:19 +02:00
parent c46fdc8363
commit 91ec14f2bc
No known key found for this signature in database
GPG Key ID: A09DBD7D3222C1C3
1 changed files with 15 additions and 0 deletions

View File

@ -194,6 +194,11 @@ static int stdin_map_key(void *context, const unsigned char *key, size_t len) {
static int stdin_boolean(void *context, int val) { static int stdin_boolean(void *context, int val) {
parser_ctx *ctx = context; parser_ctx *ctx = context;
if (!ctx->last_map_key) {
return 0;
}
if (strcasecmp(ctx->last_map_key, "urgent") == 0) { if (strcasecmp(ctx->last_map_key, "urgent") == 0) {
ctx->block.urgent = val; ctx->block.urgent = val;
return 1; return 1;
@ -208,6 +213,11 @@ static int stdin_boolean(void *context, int val) {
static int stdin_string(void *context, const unsigned char *val, size_t len) { static int stdin_string(void *context, const unsigned char *val, size_t len) {
parser_ctx *ctx = context; parser_ctx *ctx = context;
if (!ctx->last_map_key) {
return 0;
}
if (strcasecmp(ctx->last_map_key, "full_text") == 0) { if (strcasecmp(ctx->last_map_key, "full_text") == 0) {
ctx->block.full_text = i3string_from_markup_with_length((const char *)val, len); ctx->block.full_text = i3string_from_markup_with_length((const char *)val, len);
return 1; return 1;
@ -260,6 +270,11 @@ static int stdin_string(void *context, const unsigned char *val, size_t len) {
static int stdin_integer(void *context, long long val) { static int stdin_integer(void *context, long long val) {
parser_ctx *ctx = context; parser_ctx *ctx = context;
if (!ctx->last_map_key) {
return 0;
}
if (strcasecmp(ctx->last_map_key, "min_width") == 0) { if (strcasecmp(ctx->last_map_key, "min_width") == 0) {
ctx->block.min_width = (uint32_t)val; ctx->block.min_width = (uint32_t)val;
return 1; return 1;