Module Name: src Committed By: mbalmer Date: Wed May 10 07:36:01 UTC 2017
Modified Files: src/lib/lua/sqlite: sqlite.c Log Message: Guard against double freeing of objects (explicit by the Lua program, then later by the garbage collector). This fixes PR bin/52218. To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 src/lib/lua/sqlite/sqlite.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/lua/sqlite/sqlite.c diff -u src/lib/lua/sqlite/sqlite.c:1.8 src/lib/lua/sqlite/sqlite.c:1.9 --- src/lib/lua/sqlite/sqlite.c:1.8 Mon Feb 15 15:56:33 2016 +++ src/lib/lua/sqlite/sqlite.c Wed May 10 07:36:01 2017 @@ -1,7 +1,7 @@ -/* $NetBSD: sqlite.c,v 1.8 2016/02/15 15:56:33 mbalmer Exp $ */ +/* $NetBSD: sqlite.c,v 1.9 2017/05/10 07:36:01 mbalmer Exp $ */ /* - * Copyright (c) 2011, 2013, 2016 Marc Balmer <m...@msys.ch> + * Copyright (c) 2011, 2013, 2016, 2017 Marc Balmer <m...@msys.ch> * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -120,7 +120,11 @@ db_close(lua_State *L) sqlite3 **db; db = luaL_checkudata(L, 1, SQLITE_DB_METATABLE); - lua_pushinteger(L, sqlite3_close(*db)); + if (*db) { + lua_pushinteger(L, sqlite3_close(*db)); + *db = NULL; + } else + lua_pushnil(L); return 1; } @@ -342,7 +346,10 @@ stmt_finalize(lua_State *L) sqlite3_stmt **stmt; stmt = luaL_checkudata(L, 1, SQLITE_STMT_METATABLE); - sqlite3_finalize(*stmt); + if (*stmt) { + sqlite3_finalize(*stmt); + *stmt = NULL; + } return 0; }