From d4ea4cc70d46a8004d43d013fa074d4997e05f46 Mon Sep 17 00:00:00 2001 From: Jacob McDonnell Date: Mon, 11 Mar 2024 20:51:42 -0400 Subject: Fixed Heap Overflow in rm --- src/cmd/rm/makefile | 2 +- src/cmd/rm/rm | Bin 34912 -> 24592 bytes src/cmd/rm/rm.c | 5 +++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/cmd/rm/makefile b/src/cmd/rm/makefile index 8b9afda..444ddf0 100755 --- a/src/cmd/rm/makefile +++ b/src/cmd/rm/makefile @@ -1,4 +1,4 @@ -CFLAGS=-Wall -Werror +CFLAGS=-Wall -Werror -g build: rm @cp rm $(PROROOT)/build/bin/rm diff --git a/src/cmd/rm/rm b/src/cmd/rm/rm index e2c59a6..4dbbec7 100755 Binary files a/src/cmd/rm/rm and b/src/cmd/rm/rm differ diff --git a/src/cmd/rm/rm.c b/src/cmd/rm/rm.c index ceff76b..86a30b9 100755 --- a/src/cmd/rm/rm.c +++ b/src/cmd/rm/rm.c @@ -77,7 +77,7 @@ int rm(char *path) { return -1; } } else if (S_ISDIR(sbuf.st_mode)) { - warnc(EISDIR, "%s", path); + fprintf(stderr, "rm: %s: %s\n", path, strerror(EISDIR)); return -1; } else { if (unlink(path) != 0) { @@ -101,9 +101,10 @@ int removedir(const char * const path) { size_t len = strlen(path) + strlen(name) + 3; char *newpath = (char *)malloc(len); if (newpath == NULL) { + perror("rm"); exit(EXIT_FAILURE); } - strncat(newpath, path, len); + strncpy(newpath, path, len); strncat(newpath, "/", (len -= strlen(path))); strncat(newpath, name, --len); status = rm(newpath); -- cgit v1.2.3