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);