Skip to content

Commit 997a5ad

Browse files
committed
Add missing solv_free in the adb_read_adb_blk error case
1 parent cf65c2b commit 997a5ad

File tree

1 file changed

+15
-22
lines changed

1 file changed

+15
-22
lines changed

ext/repo_apkv3.c

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,7 @@ adb_read_adb_blk(Pool *pool, FILE *fp, const char *fn, size_t *adblenp)
338338
adb = solv_malloc((size_t)size);
339339
if (fread(adb, (size_t)size, 1, fp) != 1)
340340
{
341+
solv_free(adb);
341342
pool_error(pool, -1, "%s: adb block read error", fn);
342343
return 0;
343344
}
@@ -353,25 +354,20 @@ apkv3_add_pkg(Repo *repo, Repodata *data, const char *fn, FILE *fp, int flags)
353354
const unsigned char *adb;
354355
size_t adblen;
355356
unsigned int v, cnt;
356-
Id p;
357+
Id p = 0;
357358

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

364-
adb = adb_read_adb_blk(pool, fp, fn, &adblen);
365-
if (!adb)
365+
if (!(adb = adb_read_adb_blk(pool, fp, fn, &adblen)))
366366
return 0;
367367

368368
v = adb_u32(adb + 4);
369-
if (!(cnt = adb_arr(adb, adblen, v)))
370-
{
371-
solv_free((void *)adb);
372-
return 0;
373-
}
374-
p = adb_add_pkg_info(pool, repo, data, adb, adblen, adb_idx(adb, v, cnt, 1), flags);
369+
if ((cnt = adb_arr(adb, adblen, v)) != 0)
370+
p = adb_add_pkg_info(pool, repo, data, adb, adblen, adb_idx(adb, v, cnt, 1), flags);
375371
if (p && (flags & APK_ADD_WITH_PKGID) != 0)
376372
{
377373
unsigned char pkgid[16];
@@ -400,25 +396,22 @@ apkv3_add_idx(Repo *repo, Repodata *data, FILE *fp, int flags)
400396
return -1;
401397
}
402398

403-
adb = adb_read_adb_blk(pool, fp, idb ? "installed database" : "index", &adblen);
404-
if (!adb)
399+
if (!(adb = adb_read_adb_blk(pool, fp, idb ? "installed database" : "index", &adblen)))
405400
return -1;
406401

407402
v = adb_u32(adb + 4);
408-
if (!(cnt = adb_arr(adb, adblen, v)))
409-
{
410-
solv_free((void *)adb);
411-
return -1;
412-
}
413-
v = adb_idx(adb, v, cnt, idb ? 1 : 2);
414403
if ((cnt = adb_arr(adb, adblen, v)) != 0)
415404
{
416-
for (idx = 1; idx < cnt; idx++)
405+
v = adb_idx(adb, v, cnt, idb ? 1 : 2);
406+
if ((cnt = adb_arr(adb, adblen, v)) != 0)
417407
{
418-
if (idb)
419-
add_add_idb_pkg(pool, repo, data, adb, adblen, adb_idx(adb, v, cnt, idx), flags);
420-
else
421-
adb_add_pkg_info(pool, repo, data, adb, adblen, adb_idx(adb, v, cnt, idx), flags);
408+
for (idx = 1; idx < cnt; idx++)
409+
{
410+
if (idb)
411+
add_add_idb_pkg(pool, repo, data, adb, adblen, adb_idx(adb, v, cnt, idx), flags);
412+
else
413+
adb_add_pkg_info(pool, repo, data, adb, adblen, adb_idx(adb, v, cnt, idx), flags);
414+
}
422415
}
423416
}
424417
solv_free((void *)adb);

0 commit comments

Comments
 (0)