Skip to content

Commit

Permalink
Add missing solv_free in the adb_read_adb_blk error case
Browse files Browse the repository at this point in the history
  • Loading branch information
mlschroe committed Jan 17, 2025
1 parent cf65c2b commit 997a5ad
Showing 1 changed file with 15 additions and 22 deletions.
37 changes: 15 additions & 22 deletions ext/repo_apkv3.c
Original file line number Diff line number Diff line change
Expand Up @@ -338,6 +338,7 @@ adb_read_adb_blk(Pool *pool, FILE *fp, const char *fn, size_t *adblenp)
adb = solv_malloc((size_t)size);
if (fread(adb, (size_t)size, 1, fp) != 1)
{
solv_free(adb);
pool_error(pool, -1, "%s: adb block read error", fn);
return 0;
}
Expand All @@ -353,25 +354,20 @@ apkv3_add_pkg(Repo *repo, Repodata *data, const char *fn, FILE *fp, int flags)
const unsigned char *adb;
size_t adblen;
unsigned int v, cnt;
Id p;
Id p = 0;

if (fread(buf, 4, 1, fp) != 1 || buf[0] != 'p' || buf[1] != 'c' || buf[2] != 'k' || buf[3] != 'g')
{
pool_error(pool, -1, "%s: not an apkv3 package", fn);
return 0;
}

adb = adb_read_adb_blk(pool, fp, fn, &adblen);
if (!adb)
if (!(adb = adb_read_adb_blk(pool, fp, fn, &adblen)))
return 0;

v = adb_u32(adb + 4);
if (!(cnt = adb_arr(adb, adblen, v)))
{
solv_free((void *)adb);
return 0;
}
p = adb_add_pkg_info(pool, repo, data, adb, adblen, adb_idx(adb, v, cnt, 1), flags);
if ((cnt = adb_arr(adb, adblen, v)) != 0)
p = adb_add_pkg_info(pool, repo, data, adb, adblen, adb_idx(adb, v, cnt, 1), flags);
if (p && (flags & APK_ADD_WITH_PKGID) != 0)
{
unsigned char pkgid[16];
Expand Down Expand Up @@ -400,25 +396,22 @@ apkv3_add_idx(Repo *repo, Repodata *data, FILE *fp, int flags)
return -1;
}

adb = adb_read_adb_blk(pool, fp, idb ? "installed database" : "index", &adblen);
if (!adb)
if (!(adb = adb_read_adb_blk(pool, fp, idb ? "installed database" : "index", &adblen)))
return -1;

v = adb_u32(adb + 4);
if (!(cnt = adb_arr(adb, adblen, v)))
{
solv_free((void *)adb);
return -1;
}
v = adb_idx(adb, v, cnt, idb ? 1 : 2);
if ((cnt = adb_arr(adb, adblen, v)) != 0)
{
for (idx = 1; idx < cnt; idx++)
v = adb_idx(adb, v, cnt, idb ? 1 : 2);
if ((cnt = adb_arr(adb, adblen, v)) != 0)
{
if (idb)
add_add_idb_pkg(pool, repo, data, adb, adblen, adb_idx(adb, v, cnt, idx), flags);
else
adb_add_pkg_info(pool, repo, data, adb, adblen, adb_idx(adb, v, cnt, idx), flags);
for (idx = 1; idx < cnt; idx++)
{
if (idb)
add_add_idb_pkg(pool, repo, data, adb, adblen, adb_idx(adb, v, cnt, idx), flags);
else
adb_add_pkg_info(pool, repo, data, adb, adblen, adb_idx(adb, v, cnt, idx), flags);
}
}
}
solv_free((void *)adb);
Expand Down

0 comments on commit 997a5ad

Please sign in to comment.