summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/arbits/slbt_archive_meta.c11
1 files changed, 3 insertions, 8 deletions
diff --git a/src/arbits/slbt_archive_meta.c b/src/arbits/slbt_archive_meta.c
index 108cb5d..5bc1c2f 100644
--- a/src/arbits/slbt_archive_meta.c
+++ b/src/arbits/slbt_archive_meta.c
@@ -444,8 +444,8 @@ static int slbt_ar_parse_primary_armap_bsd_64(
sizeofstrs = u64_lo + (u64_hi << 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(
@@ -463,7 +463,7 @@ static int slbt_ar_parse_primary_armap_bsd_64(
dctx,
SLBT_ERR_AR_INVALID_ARMAP_STRING_TABLE);
- if (!ch[0] && ch[-1])
+ if (!ch[0] && ch[-1] && (nstrs < nsyms))
nstrs++;
}
@@ -472,11 +472,6 @@ static int slbt_ar_parse_primary_armap_bsd_64(
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);