projects
/
platform
/
upstream
/
libsolv.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
repodata_swap_attrs: make sure src and dest are in the repodata
[platform/upstream/libsolv.git]
/
src
/
repodata.c
diff --git
a/src/repodata.c
b/src/repodata.c
index
c35da23
..
d527a42
100644
(file)
--- 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)
{
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;
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;
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;
tmpattrs = data->attrs[dest - data->start];
data->attrs[dest - data->start] = data->attrs[src - data->start];
data->attrs[src - data->start] = tmpattrs;