Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit d209c2e

Browse files
committed
Tweak empty array logic a bit
We want to make sure we always consume the entire reader.
1 parent 606637b commit d209c2e

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

src/types/mod.rs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -358,15 +358,18 @@ impl<T: FromSql> FromSql for Vec<T> {
358358
_ => panic!("expected array type"),
359359
};
360360

361-
match try!(raw.read_i32::<BigEndian>()) {
362-
0 => return Ok(Vec::new()),
363-
1 => (),
364-
_ => return Err(Error::Conversion("array contains too many dimensions".into())),
365-
};
361+
let dimensions = try!(raw.read_i32::<BigEndian>());
362+
if dimensions > 1 {
363+
return Err(Error::Conversion("array contains too many dimensions".into()));
364+
}
366365

367366
let _has_nulls = try!(raw.read_i32::<BigEndian>());
368367
let _member_oid = try!(raw.read_u32::<BigEndian>());
369368

369+
if dimensions == 0 {
370+
return Ok(vec![]);
371+
}
372+
370373
let count = try!(raw.read_i32::<BigEndian>());
371374
let _index_offset = try!(raw.read_i32::<BigEndian>());
372375

0 commit comments

Comments
 (0)