summaryrefslogtreecommitdiff
path: root/util/libreboot-utils/lib/file.c
diff options
context:
space:
mode:
authorLeah Rowe <leah@libreboot.org>2026-04-21 06:39:50 +0100
committerLeah Rowe <leah@libreboot.org>2026-04-21 06:39:50 +0100
commite097eb5483b00631ef49353a22a73c2c48939d95 (patch)
treeb0446d36f711dd1b439f67571b38b13e17663f01 /util/libreboot-utils/lib/file.c
parent7faf014a84e89f442f1ce35f5d0305074e77b85d (diff)
lbutils: don't use stack memory for path strings
Signed-off-by: Leah Rowe <leah@libreboot.org>
Diffstat (limited to 'util/libreboot-utils/lib/file.c')
-rw-r--r--util/libreboot-utils/lib/file.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/util/libreboot-utils/lib/file.c b/util/libreboot-utils/lib/file.c
index efc23ba9..0385ebbb 100644
--- a/util/libreboot-utils/lib/file.c
+++ b/util/libreboot-utils/lib/file.c
@@ -521,6 +521,8 @@ fs_dirname_basename(const char *path,
char *buf = NULL;
char *slash;
size_t len;
+ const char *d = NULL;
+ const char *b = NULL;
errno = 0;
if (if_err(path == NULL || dir == NULL || base == NULL, EFAULT))
@@ -539,22 +541,27 @@ fs_dirname_basename(const char *path,
if (slash) {
*slash = '\0';
- *dir = buf;
- *base = slash + 1;
+ d = buf;
+ b = slash + 1;
- if (**dir == '\0') {
- (*dir)[0] = '/';
- (*dir)[1] = '\0';
- }
+ if (*d == '\0')
+ d = "/";
} else if (allow_relative) {
- sdup(".", PATH_MAX, dir);
- *base = buf;
+ d = ".";
+ b = buf;
} else {
free_and_set_null(&buf);
goto err;
}
+ if (dup_pair(dir, d, base, b) < 0) {
+ free_and_set_null(&buf);
+ goto err;
+ }
+
+ free_and_set_null(&buf);
+
reset_caller_errno(0);
return 0;
err: