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;
 }
 

Reply via email to