summaryrefslogtreecommitdiff
path: root/geoip.c
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 /geoip.c
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>
Diffstat (limited to 'geoip.c')
-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);
}