X-Git-Url: https://git.distorted.org.uk/~mdw/termux-packages/blobdiff_plain/f1cb02a4b18a4c483b22ec104fc320aeb156e5f5..360e5c42afccee42238ccb115a4a12a1a2572398:/packages/termux-tools/termux-elf-cleaner.cpp diff --git a/packages/termux-tools/termux-elf-cleaner.cpp b/packages/termux-tools/termux-elf-cleaner.cpp index e0923c7b..29a680ac 100644 --- a/packages/termux-tools/termux-elf-cleaner.cpp +++ b/packages/termux-tools/termux-elf-cleaner.cpp @@ -92,12 +92,20 @@ int main(int argc, char const** argv) for (int i = 1; i < argc; i++) { char const* file_name = argv[i]; int fd = open(file_name, O_RDWR); - if (fd < 0) { perror("open()"); return 1; } + if (fd < 0) { + char* error_message; + if (asprintf(&error_message, "open(\"%s\")", file_name) == -1) error_message = (char*) "open()"; + perror(error_message); + return 1; + } struct stat st; if (fstat(fd, &st) < 0) { perror("fstat()"); return 1; } - if (st.st_size < (long long) sizeof(Elf32_Ehdr)) continue; + if (st.st_size < (long long) sizeof(Elf32_Ehdr)) { + close(fd); + continue; + } void* mem = mmap(0, st.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if (mem == MAP_FAILED) { perror("mmap()"); return 1; } @@ -112,6 +120,8 @@ int main(int argc, char const** argv) if (bytes[/*EI_DATA*/5] != 1) { fprintf(stderr, "termux-elf-cleaner: Not little endianness in '%s'\n", file_name); + munmap(mem, st.st_size); + close(fd); continue; }