diff options
| author | B. Watson <urchlay@slackware.uk> | 2025-11-14 17:54:01 -0500 |
|---|---|---|
| committer | B. Watson <urchlay@slackware.uk> | 2025-11-14 17:54:01 -0500 |
| commit | c90c5405e83ab7e6ee8c5a264977052c3fa72840 (patch) | |
| tree | f3056e9ba2f633224eb9cd627fb0dae6785ead0c /src | |
| parent | c6c54622b219a25cbbd24665c2394056ac33b8b4 (diff) | |
| download | unalf-c90c5405e83ab7e6ee8c5a264977052c3fa72840.tar.gz | |
Force null terminator on filename, s/strcpy/strncpy/g.
Diffstat (limited to 'src')
| -rw-r--r-- | src/extract.c | 12 |
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); |
