#2257·libsql

不健全的 API: row.next() 的无效化未受到生命周期的保护,可能会导致使用后释放

作者: CharaVerKys创建于 2026年7月13日更新于 2026年7月13日

摘要: Rust charaverk | ~/repos/libsql_execute/src $ cat main.rs fn main() { let runtime = tokio::runtime::Runtime::new().unwrap(); runtime.block_on(async { let db = libsql::Builder::new_local("/tmp/test.db").build().await.unwrap(); let conn = db.connect().unwrap(); / * conn.execute("CREATE TABLE IF NOT EXISTS test_table(id INTEGER PRIMARY KEY, data TEXT)", ()).await.unwrap(); let _res = conn.execute( "INSERT INTO test_table(id, data) VALUES(0, ?1); ", [ "some str content" ]).await; * / let mut res = conn.query( "SELECT data FROM test_table WHERE id == ?1; ", [ 0 ]).await.unwrap(); let row = res.next().await.unwrap().unwrap(); let str_ref = row.get_str(0).unwrap(); let erm = res.next().await; //* unsound here, quickly debugged what cause, but still... let str_ = str_ref.to_owned(); //? invalidation that can lead to 'use after free' ? or just logical error? println!("{erm:?} {str_}"); }); }

内容来源: tursodatabase/libsql