From: Michael Schroeder Date: Wed, 5 Mar 2014 14:48:33 +0000 (+0100) Subject: delete broken solvables if the xml parser returns an error X-Git-Tag: 0.6.4~72 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=147d0ddffe2334f8bf98fff630eb378d20a367f6;p=thirdparty%2Flibsolv.git delete broken solvables if the xml parser returns an error --- diff --git a/ext/repo_appdata.c b/ext/repo_appdata.c index 986492b1..63c03fc2 100644 --- a/ext/repo_appdata.c +++ b/ext/repo_appdata.c @@ -511,7 +511,12 @@ repo_add_appdata(Repo *repo, FILE *fp, int flags) l = fread(buf, 1, sizeof(buf), fp); if (XML_Parse(parser, buf, l, l == 0) == XML_STATUS_ERROR) { - pool_error(pool, -1, "repo_appdata: %s at line %u:%u\n", XML_ErrorString(XML_GetErrorCode(parser)), (unsigned int)XML_GetCurrentLineNumber(parser), (unsigned int)XML_GetCurrentColumnNumber(parser)); + pool_error(pool, -1, "repo_appdata: %s at line %u:%u\n", XML_ErrorString(XML_GetErrorCode(parser)), (unsigned int)XML_GetCurrentLineNumber(parser), (unsigned int)XML_GetCurrentColumnNumber(parser)); + if (pd.solvable) + { + repo_free_solvable(repo, pd.solvable - pd.pool->solvables, 1); + pd.solvable = 0; + } ret = -1; break; } diff --git a/ext/repo_products.c b/ext/repo_products.c index 0294ff25..f7a36e11 100644 --- a/ext/repo_products.c +++ b/ext/repo_products.c @@ -451,8 +451,12 @@ add_code11_product(struct parsedata *pd, FILE *fp) if (XML_Parse(parser, buf, l, l == 0) == XML_STATUS_ERROR) { pool_debug(pd->pool, SOLV_ERROR, "%s: %s at line %u:%u\n", pd->filename, XML_ErrorString(XML_GetErrorCode(parser)), (unsigned int)XML_GetCurrentLineNumber(parser), (unsigned int)XML_GetCurrentColumnNumber(parser)); - pool_debug(pd->pool, SOLV_ERROR, "skipping this product\n"); XML_ParserFree(parser); + if (pd->solvable) + { + repo_free_solvable(pd->repo, pd->solvable - pd->pool->solvables, 1); + pd->solvable = 0; + } return; } if (l == 0) diff --git a/ext/repo_zyppdb.c b/ext/repo_zyppdb.c index 135a1553..207f5636 100644 --- a/ext/repo_zyppdb.c +++ b/ext/repo_zyppdb.c @@ -290,6 +290,11 @@ add_zyppdb_product(struct parsedata *pd, FILE *fp) if (XML_Parse(parser, buf, l, l == 0) == XML_STATUS_ERROR) { pool_debug(pd->pool, SOLV_ERROR, "repo_zyppdb: %s at line %u:%u\n", XML_ErrorString(XML_GetErrorCode(parser)), (unsigned int)XML_GetCurrentLineNumber(parser), (unsigned int)XML_GetCurrentColumnNumber(parser)); + if (pd->solvable) + { + repo_free_solvable(pd->repo, pd->solvable - pd->pool->solvables, 1); + pd->solvable = 0; + } return; } if (l == 0)