summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Schroeder <mls@suse.de>2014-04-16 13:57:24 +0200
committerMichael Schroeder <mls@suse.de>2014-04-16 13:57:24 +0200
commit14c1dfbd0d9c3184178e5e1de3aa3f8d2e29f42f (patch)
treecec22596590ebb75b1b94bce3d55a944faa88d6a /src
parentcb11f93cb0f785bd19a04a14f9242bc99c4dc187 (diff)
downloadlibsolv-14c1dfbd0d9c3184178e5e1de3aa3f8d2e29f42f.tar.gz
libsolv-14c1dfbd0d9c3184178e5e1de3aa3f8d2e29f42f.tar.bz2
libsolv-14c1dfbd0d9c3184178e5e1de3aa3f8d2e29f42f.zip
repodata_swap_attrs: make sure src and dest are in the repodata
Diffstat (limited to 'src')
-rw-r--r--src/repodata.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/repodata.c b/src/repodata.c
index c35da23..d527a42 100644
--- a/src/repodata.c
+++ b/src/repodata.c
@@ -2102,6 +2102,7 @@ repodata_extend_block(Repodata *data, Id start, Id num)
return;
if (!data->incoreoffset)
{
+ /* this also means that data->attrs is NULL */
data->incoreoffset = solv_calloc_block(num, sizeof(Id), REPODATA_BLOCK);
data->start = start;
data->end = start + num;
@@ -2812,6 +2813,10 @@ repodata_swap_attrs(Repodata *data, Id dest, Id src)
Id *tmpattrs;
if (!data->attrs || dest == src)
return;
+ if (dest < data->start || dest >= data->end)
+ repodata_extend(data, dest);
+ if (src < data->start || src >= data->end)
+ repodata_extend(data, src);
tmpattrs = data->attrs[dest - data->start];
data->attrs[dest - data->start] = data->attrs[src - data->start];
data->attrs[src - data->start] = tmpattrs;