From: Michael Schroeder Date: Tue, 18 Dec 2012 12:36:53 +0000 (+0100) Subject: don't access r->p after solver_addrule is called, as it may realloc the rules X-Git-Tag: BASE-SuSE-Code-12_3-Branch~111 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=aa7796db956c80ceb0975afef216a98c800ad592;p=thirdparty%2Flibsolv.git don't access r->p after solver_addrule is called, as it may realloc the rules Thanks valgrind! --- diff --git a/src/rules.c b/src/rules.c index 9b9b8aa3..f6facf40 100644 --- a/src/rules.c +++ b/src/rules.c @@ -2414,14 +2414,15 @@ solver_addchoicerules(Solver *solv) if (i == q.count) continue; /* already added that one */ } - d = q.count ? pool_queuetowhatprovides(pool, &q) : 0; - solver_addrule(solv, r->p, d); - queue_push(&solv->weakruleq, solv->nrules - 1); - solv->choicerules_ref[solv->nrules - 1 - solv->choicerules] = rid; + lastaddedp = r->p; lastaddedd = d; lastaddedcnt = q.count; + + solver_addrule(solv, r->p, d); + queue_push(&solv->weakruleq, solv->nrules - 1); + solv->choicerules_ref[solv->nrules - 1 - solv->choicerules] = rid; #if 0 printf("OLD "); solver_printrule(solv, SOLV_DEBUG_RESULT, solv->rules + rid);