diff options
| author | Jacob McDonnell <jacob@jacobmcdonnell.com> | 2024-03-11 20:51:42 -0400 |
|---|---|---|
| committer | Jacob McDonnell <jacob@jacobmcdonnell.com> | 2024-03-11 20:51:42 -0400 |
| commit | d4ea4cc70d46a8004d43d013fa074d4997e05f46 (patch) | |
| tree | e775a43ee5c30acd992a1697d0acf68a1364adfc /src/cmd/rm/rm.c | |
| parent | 5e32f9d376222f20a695636e600aec765e24c44a (diff) | |
Fixed Heap Overflow in rm
Diffstat (limited to 'src/cmd/rm/rm.c')
| -rwxr-xr-x | src/cmd/rm/rm.c | 5 |
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); |
