63 lines
2.0 KiB
Diff
63 lines
2.0 KiB
Diff
|
From 0956e7d1b1354860ab0bf7105c4477cb2c61539a Mon Sep 17 00:00:00 2001
|
||
|
From: Michael Schroeder <mls@suse.de>
|
||
|
Date: Mon, 14 Dec 2020 11:12:00 +0100
|
||
|
Subject: [PATCH] testcase_read: error out if repos are added or the system is
|
||
|
changed too late
|
||
|
|
||
|
We must not add new solvables after the considered map was created, the solver
|
||
|
was created, or jobs were added. We may not changed the system after jobs have
|
||
|
been added.
|
||
|
|
||
|
(Jobs may point inside the whatproviedes array, so we must not invalidate this
|
||
|
area.)
|
||
|
---
|
||
|
ext/testcase.c | 21 +++++++++++++++++++++
|
||
|
1 file changed, 21 insertions(+)
|
||
|
|
||
|
diff --git a/ext/testcase.c b/ext/testcase.c
|
||
|
index bd0643a8a..b81834faa 100644
|
||
|
--- a/ext/testcase.c
|
||
|
+++ b/ext/testcase.c
|
||
|
@@ -1975,6 +1975,7 @@ testcase_read(Pool *pool, FILE *fp, const char *testcase, Queue *job, char **res
|
||
|
Id *genid = 0;
|
||
|
int ngenid = 0;
|
||
|
Queue autoinstq;
|
||
|
+ int oldjobsize = job ? job->count : 0;
|
||
|
|
||
|
if (resultp)
|
||
|
*resultp = 0;
|
||
|
@@ -2049,6 +2050,21 @@ testcase_read(Pool *pool, FILE *fp, const char *testcase, Queue *job, char **res
|
||
|
int prio, subprio;
|
||
|
const char *rdata;
|
||
|
|
||
|
+ if (pool->considered)
|
||
|
+ {
|
||
|
+ pool_error(pool, 0, "testcase_read: cannot add repos after packages were disabled");
|
||
|
+ continue;
|
||
|
+ }
|
||
|
+ if (solv)
|
||
|
+ {
|
||
|
+ pool_error(pool, 0, "testcase_read: cannot add repos after the solver was created");
|
||
|
+ continue;
|
||
|
+ }
|
||
|
+ if (job && job->count != oldjobsize)
|
||
|
+ {
|
||
|
+ pool_error(pool, 0, "testcase_read: cannot add repos after jobs have been created");
|
||
|
+ continue;
|
||
|
+ }
|
||
|
prepared = 0;
|
||
|
if (!poolflagsreset)
|
||
|
{
|
||
|
@@ -2109,6 +2125,11 @@ testcase_read(Pool *pool, FILE *fp, const char *testcase, Queue *job, char **res
|
||
|
int i;
|
||
|
|
||
|
/* must set the disttype before the arch */
|
||
|
+ if (job && job->count != oldjobsize)
|
||
|
+ {
|
||
|
+ pool_error(pool, 0, "testcase_read: cannot change the system after jobs have been created");
|
||
|
+ continue;
|
||
|
+ }
|
||
|
prepared = 0;
|
||
|
if (strcmp(pieces[2], "*") != 0)
|
||
|
{
|