summaryrefslogtreecommitdiff
path: root/lib/header.c
diff options
context:
space:
mode:
authorPanu Matilainen <pmatilai@redhat.com>2011-10-03 17:49:29 +0300
committerPanu Matilainen <pmatilai@redhat.com>2011-10-03 17:59:18 +0300
commit472e569562d4c90d7a298080e0052856aa7fa86b (patch)
tree4e7ce9d002cc2869c76d3f01dc8abfe5df65d93e /lib/header.c
parent30635dd4330a192fa2b6e202a0e2490eba599a93 (diff)
downloadlibrpm-tizen-472e569562d4c90d7a298080e0052856aa7fa86b.tar.gz
librpm-tizen-472e569562d4c90d7a298080e0052856aa7fa86b.tar.bz2
librpm-tizen-472e569562d4c90d7a298080e0052856aa7fa86b.zip
Sanity check region length on header load
- Region size can't obviously be larger than the containing header, sanity check to avoid crashes from malformed packages. - We should really test for length equality here, but with dribbles the size is sometimes off by three, whatever the reason (bug likely), leaving that investigation for some sunnier day...
Diffstat (limited to 'lib/header.c')
-rw-r--r--lib/header.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/lib/header.c b/lib/header.c
index c77196749..b01d1e48b 100644
--- a/lib/header.c
+++ b/lib/header.c
@@ -895,6 +895,11 @@ Header headerLoad(void * uh)
h->indexUsed += ne;
}
}
+
+ rdlen += REGION_TAG_COUNT;
+ /* XXX should be equality test, but dribbles are sometimes a bit off? */
+ if (rdlen > dl || (rdlen < dl && ril == h->indexUsed))
+ goto errxit;
}
h->flags &= ~HEADERFLAG_SORTED;