aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Simon Ser <contact@emersion.fr>2022-02-08 09:52:24 +0100
committerLibravatar Simon Zeni <simon@bl4ckb0ne.ca>2022-02-08 09:20:13 -0500
commitf707f583e17cb5e8323ceb4bfd951ad0465b7d10 (patch)
tree9de2eaecf63cb4f8e1c0af7ba1c7c9d7a8fd01a4
parentFix snprintf compiler warning (diff)
downloadsway-f707f583e17cb5e8323ceb4bfd951ad0465b7d10.tar.gz
sway-f707f583e17cb5e8323ceb4bfd951ad0465b7d10.tar.zst
sway-f707f583e17cb5e8323ceb4bfd951ad0465b7d10.zip
Remove all sprintf calls
Replace them with snprintf, which ensures buffer overflows won't happen.
-rw-r--r--sway/tree/container.c2
-rw-r--r--sway/tree/root.c2
-rw-r--r--swaynag/config.c4
-rw-r--r--swaynag/swaynag.c5
4 files changed, 7 insertions, 6 deletions
diff --git a/sway/tree/container.c b/sway/tree/container.c
index 527759ba..09766ce5 100644
--- a/sway/tree/container.c
+++ b/sway/tree/container.c
@@ -1706,7 +1706,7 @@ static void update_marks_texture(struct sway_container *con,
1706 for (int i = 0; i < con->marks->length; ++i) { 1706 for (int i = 0; i < con->marks->length; ++i) {
1707 char *mark = con->marks->items[i]; 1707 char *mark = con->marks->items[i];
1708 if (mark[0] != '_') { 1708 if (mark[0] != '_') {
1709 sprintf(part, "[%s]", mark); 1709 snprintf(part, len + 1, "[%s]", mark);
1710 strcat(buffer, part); 1710 strcat(buffer, part);
1711 } 1711 }
1712 } 1712 }
diff --git a/sway/tree/root.c b/sway/tree/root.c
index 73f3993c..8508e9eb 100644
--- a/sway/tree/root.c
+++ b/sway/tree/root.c
@@ -209,7 +209,7 @@ static pid_t get_parent_pid(pid_t child) {
209 FILE *stat = NULL; 209 FILE *stat = NULL;
210 size_t buf_size = 0; 210 size_t buf_size = 0;
211 211
212 sprintf(file_name, "/proc/%d/stat", child); 212 snprintf(file_name, sizeof(file_name), "/proc/%d/stat", child);
213 213
214 if ((stat = fopen(file_name, "r"))) { 214 if ((stat = fopen(file_name, "r"))) {
215 if (getline(&buffer, &buf_size, stat) != -1) { 215 if (getline(&buffer, &buf_size, stat) != -1) {
diff --git a/swaynag/config.c b/swaynag/config.c
index 6db7cce5..ede0938c 100644
--- a/swaynag/config.c
+++ b/swaynag/config.c
@@ -414,8 +414,8 @@ int swaynag_load_config(char *path, struct swaynag *swaynag, list_t *types) {
414 } 414 }
415 free(name); 415 free(name);
416 } else { 416 } else {
417 char *flag = malloc(sizeof(char) * (nread + 3)); 417 char *flag = malloc(nread + 3);
418 sprintf(flag, "--%s", line); 418 snprintf(flag, nread + 3, "--%s", line);
419 char *argv[] = {"swaynag", flag}; 419 char *argv[] = {"swaynag", flag};
420 result = swaynag_parse_options(2, argv, swaynag, types, type, 420 result = swaynag_parse_options(2, argv, swaynag, types, type,
421 NULL, NULL); 421 NULL, NULL);
diff --git a/swaynag/swaynag.c b/swaynag/swaynag.c
index 03ec0411..23d23f38 100644
--- a/swaynag/swaynag.c
+++ b/swaynag/swaynag.c
@@ -28,8 +28,9 @@ static bool terminal_execute(char *terminal, char *command) {
28 fprintf(tmp, "#!/bin/sh\nrm %s\n%s", fname, command); 28 fprintf(tmp, "#!/bin/sh\nrm %s\n%s", fname, command);
29 fclose(tmp); 29 fclose(tmp);
30 chmod(fname, S_IRUSR | S_IWUSR | S_IXUSR); 30 chmod(fname, S_IRUSR | S_IWUSR | S_IXUSR);
31 char *cmd = malloc(sizeof(char) * (strlen(terminal) + strlen(" -e ") + strlen(fname) + 1)); 31 size_t cmd_size = strlen(terminal) + strlen(" -e ") + strlen(fname) + 1;
32 sprintf(cmd, "%s -e %s", terminal, fname); 32 char *cmd = malloc(cmd_size);
33 snprintf(cmd, cmd_size, "%s -e %s", terminal, fname);
33 execlp("sh", "sh", "-c", cmd, NULL); 34 execlp("sh", "sh", "-c", cmd, NULL);
34 sway_log_errno(SWAY_ERROR, "Failed to run command, execlp() returned."); 35 sway_log_errno(SWAY_ERROR, "Failed to run command, execlp() returned.");
35 free(cmd); 36 free(cmd);