Avoid memory leak when failing to open connections

This commit is contained in:
Sean Klein 2020-05-25 10:58:46 -04:00
parent 22580234c1
commit 42f9bbfe01

View File

@ -28,12 +28,25 @@ impl Connection {
pub fn open_with_flags<T: AsRef<Path>>(path: T, flags: OpenFlags) -> Result<Connection> {
let mut raw = 0 as *mut _;
unsafe {
ok!(ffi::sqlite3_open_v2(
let ret = ffi::sqlite3_open_v2(
path_to_cstr!(path.as_ref()).as_ptr(),
&mut raw,
flags.0,
0 as *const _,
));
0 as *const _ );
// Explicitly close the connection on error.
// This is a quirk of the C API, where the database handle
// (raw) is unconditionally allocated.
match ret {
ffi::SQLITE_OK => {},
code => {
ffi::sqlite3_close(raw);
return Err(::Error {
code: Some(code as isize),
message: None
});
},
}
}
Ok(Connection {
raw: raw,