Skip to content

Commit aadfa82

Browse files
rossoschwald
authored andcommitted
test_within_broken_database
1 parent 4943877 commit aadfa82

File tree

2 files changed

+24
-4
lines changed

2 files changed

+24
-4
lines changed

src/maxminddb/lib.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -123,10 +123,10 @@ impl<'de, T: Deserialize<'de>, S: AsRef<[u8]>> Iterator for Within<'de, T, S> {
123123
&self.reader.buf.as_ref()[self.reader.pointer_base..],
124124
rec,
125125
);
126-
return Some(Ok(WithinItem {
127-
ip_net,
128-
info: T::deserialize(&mut decoder).unwrap(),
129-
}));
126+
return match T::deserialize(&mut decoder) {
127+
Ok(info) => Some(Ok(WithinItem { ip_net, info })),
128+
Err(e) => Some(Err(e)),
129+
};
130130
} else if current.node == self.node_count {
131131
// Dead end, nothing to do
132132
} else {

src/maxminddb/reader_test.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,26 @@ fn test_within_city() {
386386
}
387387
}
388388

389+
#[test]
390+
fn test_within_broken_database() {
391+
use super::geoip2::City;
392+
use ipnetwork::IpNetwork;
393+
394+
let r = Reader::open_readfile("test-data/test-data/GeoIP2-City-Test-Broken-Double-Format.mmdb")
395+
.ok()
396+
.unwrap();
397+
398+
let ip_net = IpNetwork::V6("::/0".parse().unwrap());
399+
let mut iter = r.within::<City>(ip_net).unwrap();
400+
match iter.next().unwrap() {
401+
Err(e) => assert_eq!(
402+
e,
403+
MaxMindDBError::InvalidDatabaseError("double of size 7".to_string())
404+
),
405+
Ok(_) => panic!("Error expected"),
406+
};
407+
}
408+
389409
fn check_metadata<T: AsRef<[u8]>>(reader: &Reader<T>, ip_version: usize, record_size: usize) {
390410
let metadata = &reader.metadata;
391411

0 commit comments

Comments
 (0)