On Feb 11, 2008 8:34 AM, Nagy Gabor <ngaba@bibl.u-szeged.hu> wrote:
Part II [the real problem].
Hi!
This is the next part of my previous e-mail. After some investigation I figured out that chk_filedifference is the reason of the bug: The different pB==NULL handling is a good indicator of the bug (which is totally needless in bugfree chk_filedifference): almost the same happens here. The problem is the "while(pA && pB)"; if we reach the end of pB first, then the remaining pA is cut down... As an illustration I attached an other failing pactest file, which also demonstrates this clearly (and tests a now not checked case).
Nagy, we've discussed this before in the past. *Please* do not just point out problems with the expectation that we will fix it. I know you are a very competent coder, and I'd appreciate you contributing solutions rather than inferring our code is shit. Saying things like "totally needless" does not start things off on the right foot with Aaron and I, who have really tried hard to clean up some questionable code. We do make mistakes. diff --git a/lib/libalpm/conflict.c b/lib/libalpm/conflict.c index c093705..9ef5c9f 100644 --- a/lib/libalpm/conflict.c +++ b/lib/libalpm/conflict.c @@ -279,6 +279,12 @@ static alpm_list_t *chk_filedifference(alpm_list_t *filesA, alpm_list_t *filesB) } } } + /* ensure we have completely emptied pA */ + while(pA) { + const char *strA = pA->data; + ret = alpm_list_add(ret, strdup(strA)); + pA = pA->next; + } return(ret); } This patch fixes the revised upgrade040 and 041 pactests, as well as upgrade011 as attached. It doesn't fix upgrade046.py. Any thoughts for that issue? I'm not familiar enough with the whole program flow there yet. -Dan