delete broken solvables if the xml parser returns an error
authorMichael Schroeder <mls@suse.de>
Wed, 5 Mar 2014 14:48:33 +0000 (15:48 +0100)
committerMichael Schroeder <mls@suse.de>
Wed, 5 Mar 2014 14:48:33 +0000 (15:48 +0100)
ext/repo_appdata.c
ext/repo_products.c
ext/repo_zyppdb.c

index 986492b..63c03fc 100644 (file)
@@ -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;
        }
index 0294ff2..f7a36e1 100644 (file)
@@ -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)
index 135a155..207f563 100644 (file)
@@ -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)