mirror of
https://codeberg.org/dwl/dwl-patches.git
synced 2025-12-17 10:23:21 +00:00
riverctl patch: cleanup error handling to much less prone to memory leaks and use after free's
This commit is contained in:
parent
fb576dd523
commit
642e4d0870
@ -1,4 +1,4 @@
|
|||||||
From 2c699064c0d592e35a7316e546648b6f56cb6e9c Mon Sep 17 00:00:00 2001
|
From 45600be73ddc309ef5e3c5f962883231a973f4e0 Mon Sep 17 00:00:00 2001
|
||||||
From: Zuki Air <zukirust@gmail.com>
|
From: Zuki Air <zukirust@gmail.com>
|
||||||
Date: Sun, 27 Jul 2025 11:30:32 +0100
|
Date: Sun, 27 Jul 2025 11:30:32 +0100
|
||||||
Subject: [PATCH] river-ctl patch
|
Subject: [PATCH] river-ctl patch
|
||||||
@ -13,8 +13,8 @@ improve uint error handling
|
|||||||
dwl.c | 20 +-
|
dwl.c | 20 +-
|
||||||
dwlctl.c | 132 +++++
|
dwlctl.c | 132 +++++
|
||||||
protocols/river-control-unstable-v1.xml | 85 +++
|
protocols/river-control-unstable-v1.xml | 85 +++
|
||||||
river-control.h | 744 ++++++++++++++++++++++++
|
river-control.h | 743 ++++++++++++++++++++++++
|
||||||
7 files changed, 1024 insertions(+), 16 deletions(-)
|
7 files changed, 1023 insertions(+), 16 deletions(-)
|
||||||
create mode 100644 dwlctl.c
|
create mode 100644 dwlctl.c
|
||||||
create mode 100644 protocols/river-control-unstable-v1.xml
|
create mode 100644 protocols/river-control-unstable-v1.xml
|
||||||
create mode 100644 river-control.h
|
create mode 100644 river-control.h
|
||||||
@ -448,10 +448,10 @@ index 0000000..aa5fc4d
|
|||||||
+</protocol>
|
+</protocol>
|
||||||
diff --git a/river-control.h b/river-control.h
|
diff --git a/river-control.h b/river-control.h
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000..07cd8fb
|
index 0000000..329e15b
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/river-control.h
|
+++ b/river-control.h
|
||||||
@@ -0,0 +1,744 @@
|
@@ -0,0 +1,743 @@
|
||||||
+#include "river-control-unstable-v1-private-protocol.c"
|
+#include "river-control-unstable-v1-private-protocol.c"
|
||||||
+#include "river-control-unstable-v1-protocol.h"
|
+#include "river-control-unstable-v1-protocol.h"
|
||||||
+#ifdef KEYS_USED
|
+#ifdef KEYS_USED
|
||||||
@ -854,7 +854,7 @@ index 0000000..07cd8fb
|
|||||||
+ args->str_link = add_rule_str_store();
|
+ args->str_link = add_rule_str_store();
|
||||||
+ args->p.rl->rule->monitor = -1;
|
+ args->p.rl->rule->monitor = -1;
|
||||||
+ } else {
|
+ } else {
|
||||||
+ free(args->p.rl);
|
+ // free(args->p.rl);
|
||||||
+ args->error = true;
|
+ args->error = true;
|
||||||
+ args->error_msg = zriver_error_alloc;
|
+ args->error_msg = zriver_error_alloc;
|
||||||
+ }
|
+ }
|
||||||
@ -869,7 +869,6 @@ index 0000000..07cd8fb
|
|||||||
+ if (args->p.kl != NULL) {
|
+ if (args->p.kl != NULL) {
|
||||||
+ args->p.kl->key = calloc(1,sizeof(Key));
|
+ args->p.kl->key = calloc(1,sizeof(Key));
|
||||||
+ if (args->p.kl->key == NULL) {
|
+ if (args->p.kl->key == NULL) {
|
||||||
+ free(args->p.kl);
|
|
||||||
+ args->error = true;
|
+ args->error = true;
|
||||||
+ args->error_msg = zriver_error_alloc;
|
+ args->error_msg = zriver_error_alloc;
|
||||||
+ } else {
|
+ } else {
|
||||||
@ -916,11 +915,8 @@ index 0000000..07cd8fb
|
|||||||
+ args->p.rl->rule->id = append_str_store(args->str_link->string,argument,args->argc-1);
|
+ args->p.rl->rule->id = append_str_store(args->str_link->string,argument,args->argc-1);
|
||||||
+ args->rule_match_type = ZRIVER_RULE_MATCH_TYPE_NONE;
|
+ args->rule_match_type = ZRIVER_RULE_MATCH_TYPE_NONE;
|
||||||
+ } else {
|
+ } else {
|
||||||
+ free(args->p.rl->rule);
|
|
||||||
+ free(args->p.rl);
|
|
||||||
+ args->error = true;
|
+ args->error = true;
|
||||||
+ args->error_msg = zriver_error_double_appid;
|
+ args->error_msg = zriver_error_double_appid;
|
||||||
+ free_str_store(args->str_link);
|
|
||||||
+ }
|
+ }
|
||||||
+ break;
|
+ break;
|
||||||
+ case(ZRIVER_RULE_MATCH_TYPE_TITLE):
|
+ case(ZRIVER_RULE_MATCH_TYPE_TITLE):
|
||||||
@ -928,11 +924,8 @@ index 0000000..07cd8fb
|
|||||||
+ args->p.rl->rule->title = append_str_store(args->str_link->string,argument,args->argc-1);
|
+ args->p.rl->rule->title = append_str_store(args->str_link->string,argument,args->argc-1);
|
||||||
+ args->rule_match_type = ZRIVER_RULE_MATCH_TYPE_NONE;
|
+ args->rule_match_type = ZRIVER_RULE_MATCH_TYPE_NONE;
|
||||||
+ } else {
|
+ } else {
|
||||||
+ free(args->p.rl->rule);
|
|
||||||
+ free(args->p.rl);
|
|
||||||
+ args->error = true;
|
+ args->error = true;
|
||||||
+ args->error_msg = zriver_error_double_title;
|
+ args->error_msg = zriver_error_double_title;
|
||||||
+ free_str_store(args->str_link);
|
|
||||||
+ }
|
+ }
|
||||||
+ break;
|
+ break;
|
||||||
+ case(ZRIVER_RULE_MATCH_TYPE_APPLYING):
|
+ case(ZRIVER_RULE_MATCH_TYPE_APPLYING):
|
||||||
@ -951,9 +944,6 @@ index 0000000..07cd8fb
|
|||||||
+ args->rule_type = ZRIVER_RULE_TYPE_MONITOR;
|
+ args->rule_type = ZRIVER_RULE_TYPE_MONITOR;
|
||||||
+ args->rule_valid = true;
|
+ args->rule_valid = true;
|
||||||
+ } else {
|
+ } else {
|
||||||
+ free(args->p.rl->rule);
|
|
||||||
+ free(args->p.rl);
|
|
||||||
+ free_str_store(args->str_link);
|
|
||||||
+ args->error = true;
|
+ args->error = true;
|
||||||
+ }
|
+ }
|
||||||
+ break;
|
+ break;
|
||||||
@ -1054,16 +1044,6 @@ index 0000000..07cd8fb
|
|||||||
+ } else if (strcmp("down",argument)) {
|
+ } else if (strcmp("down",argument)) {
|
||||||
+ arg->i = WLR_DIRECTION_DOWN;
|
+ arg->i = WLR_DIRECTION_DOWN;
|
||||||
+ } else {
|
+ } else {
|
||||||
+ if (args->type == ZRIVER_ARG_TYPE_KEY) {
|
|
||||||
+ free(args->p.kl->key);
|
|
||||||
+ free(args->p.kl);
|
|
||||||
+ } else if (args->type == ZRIVER_ARG_TYPE_FUNC) {
|
|
||||||
+ if (args->str_link != NULL) {
|
|
||||||
+ free_str_store(args->str_link);
|
|
||||||
+ free(args->str_link);
|
|
||||||
+ }
|
|
||||||
+ free(args->p.fa);
|
|
||||||
+ }
|
|
||||||
+ args->error = true;
|
+ args->error = true;
|
||||||
+ args->error_msg = zriver_error_out_of_range;
|
+ args->error_msg = zriver_error_out_of_range;
|
||||||
+ }
|
+ }
|
||||||
@ -1073,16 +1053,6 @@ index 0000000..07cd8fb
|
|||||||
+ if (arg->ui < (int)LENGTH(layouts)) {
|
+ if (arg->ui < (int)LENGTH(layouts)) {
|
||||||
+ arg->v = &layouts[arg->ui];
|
+ arg->v = &layouts[arg->ui];
|
||||||
+ } else {
|
+ } else {
|
||||||
+ if (args->type == ZRIVER_ARG_TYPE_KEY) {
|
|
||||||
+ free(args->p.kl->key);
|
|
||||||
+ free(args->p.kl);
|
|
||||||
+ } else if (args->type == ZRIVER_ARG_TYPE_FUNC) {
|
|
||||||
+ if (args->str_link != NULL) {
|
|
||||||
+ free_str_store(args->str_link);
|
|
||||||
+ free(args->str_link);
|
|
||||||
+ }
|
|
||||||
+ free(args->p.fa);
|
|
||||||
+ }
|
|
||||||
+ args->error = true;
|
+ args->error = true;
|
||||||
+ args->error_msg = zriver_error_out_of_range;
|
+ args->error_msg = zriver_error_out_of_range;
|
||||||
+ }
|
+ }
|
||||||
@ -1102,6 +1072,35 @@ index 0000000..07cd8fb
|
|||||||
+ if (args->argc == 0) {
|
+ if (args->argc == 0) {
|
||||||
+ zriver_command_callback_v1_send_failure(callback_interface,zriver_error_too_few_args);
|
+ zriver_command_callback_v1_send_failure(callback_interface,zriver_error_too_few_args);
|
||||||
+ } else if (args->error == true) {
|
+ } else if (args->error == true) {
|
||||||
|
+ switch (args->type) {
|
||||||
|
+ case(ZRIVER_ARG_TYPE_KEY):
|
||||||
|
+ if (args->p.kl != NULL) {
|
||||||
|
+ if (args->p.kl->key != NULL) {
|
||||||
|
+ free(args->p.kl->key);
|
||||||
|
+ }
|
||||||
|
+ free(args->p.kl);
|
||||||
|
+ }
|
||||||
|
+ break;
|
||||||
|
+ case(ZRIVER_ARG_TYPE_FUNC):
|
||||||
|
+ if (args->p.fa != NULL) {
|
||||||
|
+ free(args->p.fa);
|
||||||
|
+ }
|
||||||
|
+ break;
|
||||||
|
+ case(ZRIVER_ARG_TYPE_RULE):
|
||||||
|
+ if (args->p.rl != NULL) {
|
||||||
|
+ if (args->p.rl->rule != NULL) {
|
||||||
|
+ free(args->p.rl->rule);
|
||||||
|
+ }
|
||||||
|
+ free(args->p.rl);
|
||||||
|
+ }
|
||||||
|
+ break;
|
||||||
|
+ case(ZRIVER_ARG_TYPE_NONE):
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ if (args->str_link != NULL) {
|
||||||
|
+ free_str_store(args->str_link);
|
||||||
|
+ free(args->str_link);
|
||||||
|
+ }
|
||||||
+ zriver_command_callback_v1_send_failure(callback_interface,args->error_msg);
|
+ zriver_command_callback_v1_send_failure(callback_interface,args->error_msg);
|
||||||
+ } else if (args->error == false) {
|
+ } else if (args->error == false) {
|
||||||
+ if (args->type == ZRIVER_ARG_TYPE_KEY) {
|
+ if (args->type == ZRIVER_ARG_TYPE_KEY) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user