From 3eae8295611985639272d5f0fe6c1d9dec6dfa09 Mon Sep 17 00:00:00 2001 From: midipix Date: Jan 28 2024 07:31:09 +0000 Subject: slbt_ar_parse_primary_armap_bsd_32(): account for data past the string table. --- diff --git a/src/arbits/slbt_archive_meta.c b/src/arbits/slbt_archive_meta.c index f70ee43..108cb5d 100644 --- a/src/arbits/slbt_archive_meta.c +++ b/src/arbits/slbt_archive_meta.c @@ -304,8 +304,8 @@ static int slbt_ar_parse_primary_armap_bsd_32( m->symstrs = (const char *)mark; - cap = memberp->ar_object_data; - cap += memberp->ar_object_size; + cap = m->symstrs; + cap += sizeofstrs; if ((cap == m->symstrs) && nsyms) return SLBT_CUSTOM_ERROR( @@ -323,7 +323,7 @@ static int slbt_ar_parse_primary_armap_bsd_32( dctx, SLBT_ERR_AR_INVALID_ARMAP_STRING_TABLE); - if (!ch[0] && ch[-1]) + if (!ch[0] && ch[-1] && (nstrs < nsyms)) nstrs++; } @@ -332,11 +332,6 @@ static int slbt_ar_parse_primary_armap_bsd_32( dctx, SLBT_ERR_AR_INVALID_ARMAP_STRING_TABLE); - if (cap[-1]) - return SLBT_CUSTOM_ERROR( - dctx, - SLBT_ERR_AR_INVALID_ARMAP_STRING_TABLE); - if (!(m->symstrv = calloc(nsyms + 1,sizeof(const char *)))) return SLBT_SYSTEM_ERROR(dctx,0);