[wiki] [sites] [slstatus][patch][dyn-battery]Improved memory-safety || Madison Lynch

From: <git_AT_suckless.org>
Date: Thu, 17 Apr 2025 01:23:02 +0200

commit 2f7366e8fd55260291bd91c3d87b63e927a797ee
Author: Madison Lynch <madi_AT_mxdi.xyz>
Date: Wed Apr 16 16:22:50 2025 -0700

    [slstatus][patch][dyn-battery]Improved memory-safety

diff --git a/tools.suckless.org/slstatus/patches/dyn-battery/index.md b/tools.suckless.org/slstatus/patches/dyn-battery/index.md
index 9c1ef99a..9f396d28 100644
--- a/tools.suckless.org/slstatus/patches/dyn-battery/index.md
+++ b/tools.suckless.org/slstatus/patches/dyn-battery/index.md
_AT_@ -14,7 +14,7 @@ state (%s), capacity (%s). Example:
 
 Download
 --------
-* [slstatus-dyn_battery-20250414-f68f492.diff](slstatus-dyn_battery-20250414-f68f492.diff)
+* [slstatus-dyn_battery-20250416-f68f492.diff](slstatus-dyn_battery-20250416-f68f492.diff)
 
 Author
 ------
diff --git a/tools.suckless.org/slstatus/patches/dyn-battery/slstatus-dyn_battery-20250414-f68f492.diff b/tools.suckless.org/slstatus/patches/dyn-battery/slstatus-dyn_battery-20250416-f68f492.diff
similarity index 79%
rename from tools.suckless.org/slstatus/patches/dyn-battery/slstatus-dyn_battery-20250414-f68f492.diff
rename to tools.suckless.org/slstatus/patches/dyn-battery/slstatus-dyn_battery-20250416-f68f492.diff
index a583a75e..9174a051 100644
--- a/tools.suckless.org/slstatus/patches/dyn-battery/slstatus-dyn_battery-20250414-f68f492.diff
+++ b/tools.suckless.org/slstatus/patches/dyn-battery/slstatus-dyn_battery-20250416-f68f492.diff
_AT_@ -1,15 +1,14 @@
-From b96a72c277a72c77feaf94fac679f3ea87f78ea6 Mon Sep 17 00:00:00 2001
+From 44fcd213f975ae35fb92de9bc56d8d895478edb5 Mon Sep 17 00:00:00 2001
 From: Madison Lynch <madi_AT_mxdi.xyz>
-Date: Mon, 14 Apr 2025 21:04:23 -0700
-Subject: [PATCH] Created dyn-battery patch, for displaying status of multiple
- batteries
+Date: Wed, 16 Apr 2025 16:18:33 -0700
+Subject: [PATCH] Improved memory-safety in dyn_battery function
 
 ---
  Makefile | 1 +
- components/dyn_battery.c | 77 ++++++++++++++++++++++++++++++++++++++++
- config.def.h | 4 +++
+ components/dyn_battery.c | 84 ++++++++++++++++++++++++++++++++++++++++
+ config.def.h | 3 ++
  slstatus.h | 3 ++
- 4 files changed, 85 insertions(+)
+ 4 files changed, 91 insertions(+)
  create mode 100644 components/dyn_battery.c
 
 diff --git a/Makefile b/Makefile
_AT_@ -26,10 +25,10 @@ index 7a18274..d1b24dd 100644
          components/ip\
 diff --git a/components/dyn_battery.c b/components/dyn_battery.c
 new file mode 100644
-index 0000000..2e58351
+index 0000000..9377071
 --- /dev/null
 +++ b/components/dyn_battery.c
-_AT_@ -0,0 +1,77 @@
+_AT_@ -0,0 +1,84 @@
 +/* Written by Madison Lynch <madi_AT_mxdi.xyz> */
 +/* Only Linux is supported */
 +#include <stdio.h>
_AT_@ -74,51 +73,57 @@ index 0000000..2e58351
 +*/
 +const char *
 +dyn_battery(const char *fmt) {
++ static char *ret;
++ free(ret); // Free address from previous output
++
 + const size_t fmt_s = strlen(fmt);
 + const unsigned int bat_c = battery_count();
 +
 + // Extra byte in calloc() for null byte
-+ char *output = (char *)calloc(fmt_s * bat_c + 1, sizeof(char));
++ ret = (char *)calloc(fmt_s * bat_c + 1, sizeof(char));
++ if(!ret) {
++ fprintf(stderr, "dyn_battery: calloc() failed.");
++ return NULL;
++ }
++
 + unsigned int displacement = 0; // For appending battery displays
 + for(unsigned int i=0; i<bat_c; i++) {
 + char bat[7]; // "BAT" = 3 + <=3 digit number + null byte
-+ sprintf(bat, "BAT%u", i);
++ (void) sprintf(bat, "BAT%u", i);
 +
 + // Add battery display to final string to be returned
-+ sprintf(
-+ output + displacement,
++ (void) sprintf(
++ ret + displacement,
 + fmt,
 + i,
 + battery_state(bat),
 + battery_perc(bat)
 + );
-+ displacement = strlen(output);
++ displacement = strlen(ret);
 +
 + // Add space between battery displays
-+ *(output + displacement) = ' ';
-+ displacement++;
++ ret[displacement++] = ' ';
 + }
 +
 + // Remove extra space after last battery display
-+ output[--displacement] = 0x00;
++ ret[--displacement] = ' +
-+ return output;
++ return ret;
 +}
 +
 +#undef BAT_DIR
 +#undef BAT_PREFIX
 diff --git a/config.def.h b/config.def.h
-index d805331..967d63d 100644
+index d805331..a0052e3 100644
 --- a/config.def.h
 +++ b/config.def.h
-_AT_@ -26,6 +26,10 @@ static const char unknown_str[] = "n/a";
+_AT_@ -26,6 +26,9 @@ static const char unknown_str[] = "n/a";
   * disk_perc disk usage in percent mountpoint path (/)
   * disk_total total disk space in GB mountpoint path (/)
   * disk_used used disk space in GB mountpoint path (/)
 + * dyn_battery displays the name, state and format string (%u, %s,
 + * capacity of all detected %s). order is important,
 + * batteries and matches description.
-+ * (Linux only)
   * entropy available entropy NULL
   * gid GID of current user NULL
   * hostname hostname NULL
Received on Thu Apr 17 2025 - 01:23:02 CEST

This archive was generated by hypermail 2.3.0 : Thu Apr 17 2025 - 01:24:55 CEST