Imported Upstream version 0.6.9
[platform/upstream/libsolv.git] / src / repodata.c
index c35da23..4ba1345 100644 (file)
@@ -479,11 +479,11 @@ get_vertical_data(Repodata *data, Repokey *key, Id off, Id len)
   if (off >= data->lastverticaloffset)
     {
       off -= data->lastverticaloffset;
-      if (off + len > data->vincorelen)
+      if ((unsigned int)off + len > data->vincorelen)
        return 0;
       return data->vincore + off;
     }
-  if (off + len > key->size)
+  if ((unsigned int)off + len > key->size)
     return 0;
   /* we now have the offset, go into vertical */
   off += data->verticaloffset[key - data->keys];
@@ -1444,6 +1444,8 @@ dataiterator_filelistcheck(Dataiterator *di)
   if (!needcomplete)
     {
       /* we don't need the complete filelist, so ignore all stubs */
+      if (data->repo->nrepodata == 2)
+       return 1;
       for (j = 1; j < data->nkeys; j++)
        if (data->keys[j].name != REPOSITORY_SOLVABLES && data->keys[j].name != SOLVABLE_FILELIST)
          return 1;
@@ -2102,6 +2104,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 +2815,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;
@@ -2923,7 +2930,7 @@ compact_attrdata(Repodata *data, int entry, int nentry)
            case REPOKEY_TYPE_STR:
            case REPOKEY_TYPE_BINARY:
            case_CHKSUM_TYPES:
-             if (attrs[1] < attrdatastart)
+             if ((unsigned int)attrs[1] < attrdatastart)
                 attrdatastart = attrs[1];
              break;
            case REPOKEY_TYPE_DIRSTRARRAY:
@@ -2933,7 +2940,7 @@ compact_attrdata(Repodata *data, int entry, int nentry)
              /* FALLTHROUGH */
            case REPOKEY_TYPE_IDARRAY:
            case REPOKEY_TYPE_DIRNUMNUMARRAY:
-             if (attrs[1] < attriddatastart)
+             if ((unsigned int)attrs[1] < attriddatastart)
                attriddatastart = attrs[1];
              break;
            case REPOKEY_TYPE_FIXARRAY: