aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorB. Watson <urchlay@slackware.uk>2025-11-14 17:54:01 -0500
committerB. Watson <urchlay@slackware.uk>2025-11-14 17:54:01 -0500
commitc90c5405e83ab7e6ee8c5a264977052c3fa72840 (patch)
treef3056e9ba2f633224eb9cd627fb0dae6785ead0c /src
parentc6c54622b219a25cbbd24665c2394056ac33b8b4 (diff)
downloadunalf-c90c5405e83ab7e6ee8c5a264977052c3fa72840.tar.gz
Force null terminator on filename, s/strcpy/strncpy/g.
Diffstat (limited to 'src')
-rw-r--r--src/extract.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/extract.c b/src/extract.c
index 9c45941..515d2dd 100644
--- a/src/extract.c
+++ b/src/extract.c
@@ -24,6 +24,11 @@ void fix_filename(void) {
if(!out_filename) return;
+ if(strlen(out_filename) > 12) {
+ fprintf(stderr, "%s: filename in ALF header not null-terminated, fixing.\n", self);
+ out_filename[12] = '\0';
+ }
+
if(opts.lowercase) {
for(p = out_filename; *p; p++)
*p = tolower(*p);
@@ -37,10 +42,11 @@ void fix_filename(void) {
}
void make_backup(void) {
- char backup[PATH_MAX];
+ /* up to 12-char FILENAME.EXT, plus a ~, plus null terminator = 14 */
+ char backup[14];
- strcpy(backup, out_filename);
- strcat(backup, "~");
+ strncpy(backup, out_filename, 13);
+ strncat(backup, "~", 13);
/* silently ignore errors! */
rename(out_filename, backup);