summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Klauser <tklauser@distanz.ch>2015-11-11 14:46:00 +0100
committerTobias Klauser <tklauser@distanz.ch>2015-11-11 14:46:00 +0100
commit2f43dee3a51eeb96746c0f27bba837b9e423788b (patch)
tree6bba5247514b0cfb1a5b86c567494bdf0cf4d071
parent240bb31fc01efd6d059afcd9884b29f6814be789 (diff)
geoip: Error out if file is not inflated completely
In case the downloaded gzip file got corrupted somehow, the gzread would fail, leaving part of the file uninflated and thus leading to a corrupted GeoIP database. This can in the worst case lead to a crash in libgeoip which in turn causes netsniff-ng/flowtop/astraceroute to crash. So better panic() if we fail to uncompress. Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
-rw-r--r--geoip.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/geoip.c b/geoip.c
index 78b20fe..439c052 100644
--- a/geoip.c
+++ b/geoip.c
@@ -150,6 +150,9 @@ static void geoip_inflate(int which)
while ((ret = gzread(fpi, raw, sizeof(raw))) && ret2)
ret2 = fwrite(raw, ret, 1, fpo);
+ if (!gzeof(fpi))
+ panic("Error in gzread: %s\n", gzerror(fpi, &ret));
+
gzclose(fpi);
fclose(fpo);
}