--- ./squashfs-tools/unsquash-4.c.orig +++ ./squashfs-tools/unsquash-4.c @@ -31,8 +31,9 @@ int read_fragment_table_4() { - int res, i, indexes = SQUASHFS_FRAGMENT_INDEXES(sBlk.s.fragments); - long long fragment_table_index[indexes]; + int res, i; + size_t indexes = SQUASHFS_FRAGMENT_INDEXES(sBlk.s.fragments); + long long *fragment_table_index; TRACE("read_fragment_table: %d fragments, reading %d fragment indexes " "from 0x%llx\n", sBlk.s.fragments, indexes, @@ -40,6 +41,11 @@ if(sBlk.s.fragments == 0) return TRUE; + + fragment_table_index = malloc(indexes*sizeof(long long)); + if(fragment_table_index == NULL) + EXIT_UNSQUASH("read_fragment_table: failed to allocate " + "fragment table index\n"); fragment_table = malloc(sBlk.s.fragments * sizeof(struct squashfs_fragment_entry));