summaryrefslogtreecommitdiff
path: root/src/cmd/rm/rm.c
diff options
context:
space:
mode:
authorJacob McDonnell <jacob@jacobmcdonnell.com>2024-03-11 20:51:42 -0400
committerJacob McDonnell <jacob@jacobmcdonnell.com>2024-03-11 20:51:42 -0400
commitd4ea4cc70d46a8004d43d013fa074d4997e05f46 (patch)
treee775a43ee5c30acd992a1697d0acf68a1364adfc /src/cmd/rm/rm.c
parent5e32f9d376222f20a695636e600aec765e24c44a (diff)
Fixed Heap Overflow in rm
Diffstat (limited to 'src/cmd/rm/rm.c')
-rwxr-xr-xsrc/cmd/rm/rm.c5
1 files changed, 3 insertions, 2 deletions
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);