From 3039489e1d28d9475a2bab5ffa067c675bf8d19a Mon Sep 17 00:00:00 2001 From: gaoyi Date: Fri, 16 Apr 2021 18:46:04 +0800 Subject: [PATCH] if rpmtdGetUint32 return NULL, return RPMRC_FAIL --- lib/rpmtriggers.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/rpmtriggers.c b/lib/rpmtriggers.c index fc809a65e2..5db89e5927 100644 --- a/lib/rpmtriggers.c +++ b/lib/rpmtriggers.c @@ -517,7 +517,7 @@ rpmRC runFileTriggers(rpmts ts, rpmte te, rpmsenseFlags sense, if (matchFunc(ts, te, pfx, sense)) { for (i = 0; i < rpmdbIndexIteratorNumPkgs(ii); i++) { struct rpmtd_s priorities; - unsigned int priority; + unsigned int *priority; unsigned int offset = rpmdbIndexIteratorPkgOffset(ii, i); unsigned int tix = rpmdbIndexIteratorTagNum(ii, i); @@ -535,11 +535,17 @@ rpmRC runFileTriggers(rpmts ts, rpmte te, rpmsenseFlags sense, trigH = rpmdbGetHeaderAt(rpmtsGetRdb(ts), offset); headerGet(trigH, priorityTag, &priorities, HEADERGET_MINMEM); rpmtdSetIndex(&priorities, tix); - priority = *rpmtdGetUint32(&priorities); + priority = rpmtdGetUint32(&priorities); headerFree(trigH); - /* Store file trigger in array */ - rpmtriggersAdd(triggers, offset, tix, priority); + if (priority == NULL) { + fprintf(stderr, "DB may be destroyed, some filetriggers will not run. Please reinstall the packages"); + return RPMRC_FAIL; + } else { + /* Store file trigger in array */ + rpmtriggersAdd(triggers, offset, tix, *priority); + } + } } free(pfx);