]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Add error handling 2654/head
authorAZero13 <gfunni234@gmail.com>
Thu, 6 Nov 2025 15:46:27 +0000 (10:46 -0500)
committerAZero13 <gfunni234@gmail.com>
Thu, 6 Nov 2025 15:46:27 +0000 (10:46 -0500)
libarchive/archive_read_disk_posix.c
libarchive/archive_read_disk_windows.c

index 72dde0730bf3c1107b36843327dfe967e701ced2..7cd292f259ff6d18606427e57ccf8552604cca81 100644 (file)
 #define O_CLOEXEC      0
 #endif
 
+#define MAX_FILESYSTEM_ID 1000000
+
 #if defined(__hpux) && !defined(HAVE_DIRFD)
 #define dirfd(x) ((x)->__dd_fd)
 #define HAVE_DIRFD
@@ -1412,6 +1414,10 @@ update_current_filesystem(struct archive_read_disk *a, int64_t dev)
         * This is the new filesystem which we have to generate a new ID for.
         */
        fid = t->max_filesystem_id++;
+       if (fid > MAX_FILESYSTEM_ID) {
+               archive_set_error(&a->archive, ENOMEM, "Too many filesystems");
+               return (ARCHIVE_FATAL);
+       }
        if (t->max_filesystem_id > t->allocated_filesystem) {
                int s;
                void *p;
index 689a45958c156626fabc865ee64968e92bb75c26..17557a89103920283d9d8053ddd3a8e7f4bd6bcb 100644 (file)
@@ -53,6 +53,8 @@
 /* To deal with absolute symlink issues */
 #define START_ABSOLUTE_SYMLINK_REPARSE L"\\??\\"
 
+#define MAX_FILESYSTEM_ID 1000000
+
 /*-
  * This is a new directory-walking system that addresses a number
  * of problems I've had with fts(3).  In particular, it has no
@@ -1449,8 +1451,12 @@ update_current_filesystem(struct archive_read_disk *a, int64_t dev)
         * There is a new filesystem, we generate a new ID for.
         */
        fid = t->max_filesystem_id++;
+       if (fid > MAX_FILESYSTEM_ID) {
+               archive_set_error(&a->archive, ENOMEM, "Too many filesystems");
+               return (ARCHIVE_FATAL);
+       }
        if (t->max_filesystem_id > t->allocated_filesystem) {
-               size_t s;
+               int s;
                void *p;
 
                s = t->max_filesystem_id * 2;