From fdd5a632457c1382239321368c9b48e69e3c9ceb Mon Sep 17 00:00:00 2001 From: tsutsui Date: Fri, 31 May 2024 20:50:48 +0000 Subject: [PATCH] Pull malloc related fixes from cdrtools-2.01. This seems to fix SIGSEGV during free(3) in write.c:write_one_file(). --- external/gpl2/mkhybrid/dist/tree.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/external/gpl2/mkhybrid/dist/tree.c b/external/gpl2/mkhybrid/dist/tree.c index e4a557dad8e3..08d75cb546ce 100644 --- a/external/gpl2/mkhybrid/dist/tree.c +++ b/external/gpl2/mkhybrid/dist/tree.c @@ -410,8 +410,8 @@ got_valid_name: if (jhide_trans_tbl) table->de_flags |= INHIBIT_JOLIET_ENTRY; table->name = strdup(""); - table->table = (char *) e_malloc(ROUND_UP(tablesize)); - memset(table->table, 0, ROUND_UP(tablesize)); + table->table = (char *) e_malloc(ROUND_UP(tablesize)+1); + memset(table->table, 0, ROUND_UP(tablesize)+1); #ifdef APPLE_HYB iso9660_file_length (trans_tbl, table, 0); #else @@ -678,6 +678,13 @@ static void FDECL2(attach_dot_entries, struct directory *, dirnode, e_malloc(sizeof (struct directory_entry)); memcpy(s_entry, dirnode->self, sizeof(struct directory_entry)); +#ifdef APPLE_HYB + if (dirnode->self->hfs_ent) { + s_entry->hfs_ent = (hfsdirent *) e_malloc(sizeof (hfsdirent)); + memcpy(s_entry->hfs_ent, dirnode->self->hfs_ent, + sizeof (hfsdirent)); + } +#endif s_entry->name = strdup(".."); s_entry->whole_name = NULL; s_entry->isorec.name_len[0] = 1; @@ -710,6 +717,13 @@ static void FDECL2(attach_dot_entries, struct directory *, dirnode, e_malloc(sizeof (struct directory_entry)); memcpy(s_entry, dirnode->self, sizeof(struct directory_entry)); +#ifdef APPLE_HYB + if (dirnode->self->hfs_ent) { + s_entry->hfs_ent = (hfsdirent *) e_malloc(sizeof (hfsdirent)); + memcpy(s_entry->hfs_ent, dirnode->self->hfs_ent, + sizeof (hfsdirent)); + } +#endif s_entry->name = strdup("."); s_entry->whole_name = NULL; s_entry->isorec.name_len[0] = 1;