]> git.sesse.net Git - vlc/commitdiff
Do not store p_this in a table value visible from lua code.
authorAntoine Cellerier <dionoea@videolan.org>
Fri, 26 Feb 2010 10:56:32 +0000 (11:56 +0100)
committerAntoine Cellerier <dionoea@videolan.org>
Sat, 27 Feb 2010 21:04:19 +0000 (22:04 +0100)
modules/misc/lua/demux.c
modules/misc/lua/extension.c
modules/misc/lua/intf.c
modules/misc/lua/libs/misc.c
modules/misc/lua/meta.c
modules/misc/lua/services_discovery.c
modules/misc/lua/vlc.h

index 601287f058a6d5ccb87ac17807de3a8f1b6cac5b..c3d3595c69d2a6bd64243cf6029a8bceda7bf188 100644 (file)
@@ -135,14 +135,13 @@ static int probe_luascript( vlc_object_t *p_this, const char * psz_filename,
     /* Load Lua libraries */
     luaL_openlibs( L ); /* FIXME: Don't open all the libs? */
 
+    vlclua_set_this( L, p_demux );
     luaL_register( L, "vlc", p_reg );
     luaopen_msg( L );
     luaopen_strings( L );
     luaopen_stream( L );
     luaopen_xml( L );
     luaopen_md5( L );
-    lua_pushlightuserdata( L, p_demux );
-    lua_setfield( L, -2, "private" );
     lua_pushstring( L, p_demux->psz_path );
     lua_setfield( L, -2, "path" );
     lua_pushstring( L, p_demux->psz_access );
index a6fa103359977b1bb343dd98eca900f308ba163e..174d18dda1b59331ede71f243bf1457998760e38 100644 (file)
@@ -719,13 +719,12 @@ static lua_State* GetLuaState( extensions_manager_t *p_mgr,
             msg_Err( p_mgr, "Could not create new Lua State" );
             return NULL;
         }
+        vlclua_set_this( L, p_mgr );
+
         luaL_openlibs( L );
         luaL_register( L, "vlc", p_reg );
         luaopen_msg( L );
 
-        lua_pushlightuserdata( L, p_mgr );
-        lua_setfield( L, -2, "private" );
-
         lua_pushlightuserdata( L, p_ext );
         lua_setfield( L, -2, "extension" );
 
index 90bb782005569c37d42f6ff963441f22f70e40d6..34159076160ae8a14f728879ee9b073d786af1b2 100644 (file)
@@ -168,15 +168,13 @@ int Open_LuaIntf( vlc_object_t *p_this )
         goto error;
     }
 
+    vlclua_set_this( L, p_intf );
+
     luaL_openlibs( L );
 
     /* register our functions */
     luaL_register( L, "vlc", p_reg );
 
-    /* store a pointer to p_intf (FIXME: user could overwrite this) */
-    lua_pushlightuserdata( L, p_intf );
-    lua_setfield( L, -2, "private" );
-
     /* register submodules */
     luaopen_acl( L );
     luaopen_config( L );
index 5e5e8060e67927be65e3dab24d8c96b870fba410..444092dada9b143bc7a995d92108c2653ef8fe93 100644 (file)
 /*****************************************************************************
  * Internal lua<->vlc utils
  *****************************************************************************/
+void __vlclua_set_this( lua_State *L, vlc_object_t *p_this )
+{
+    lua_pushlightuserdata( L, __vlclua_set_this );
+    lua_pushlightuserdata( L, p_this );
+    lua_rawset( L, LUA_REGISTRYINDEX );
+}
+
 vlc_object_t * vlclua_get_this( lua_State *L )
 {
-    vlc_object_t * p_this;
-    lua_getglobal( L, "vlc" );
-    lua_getfield( L, -1, "private" );
-    p_this = (vlc_object_t*)lua_topointer( L, lua_gettop( L ) );
-    lua_pop( L, 2 );
+    lua_pushlightuserdata( L, __vlclua_set_this );
+    lua_rawget( L, LUA_REGISTRYINDEX );
+    vlc_object_t *p_this = (vlc_object_t*)lua_topointer( L, -1 );
+    lua_pop( L, 1 );
     return p_this;
 }
 
index b61ec4ec6af84ea2cd054d00c6b5ff347f94e1c9..a56fd091d2f27cd63916d2de8463c8d347b0397e 100644 (file)
@@ -60,6 +60,8 @@ static lua_State * init( vlc_object_t *p_this, input_item_t * p_item, const char
         return NULL;
     }
 
+    vlclua_set_this( L, p_this );
+
     /* Load Lua libraries */
     luaL_openlibs( L ); /* XXX: Don't open all the libs? */
 
@@ -75,9 +77,6 @@ static lua_State * init( vlc_object_t *p_this, input_item_t * p_item, const char
     luaopen_md5( L );
     luaopen_input_item( L, p_item );
 
-    lua_pushlightuserdata( L, p_this );
-    lua_setfield( L, -2, "private" );
-
     if( vlclua_add_modules_path( p_this, L, psz_filename ) )
     {
         msg_Warn( p_this, "Error while setting the module search path for %s",
index f5e21fdff7f611318ad4f3246bf1c6cc45dca1d6..d5f36494daa98adf3f5aa933c83224a848d59551 100644 (file)
@@ -94,10 +94,9 @@ int Open_LuaSD( vlc_object_t *p_this )
         msg_Err( p_sd, "Could not create new Lua State" );
         goto error;
     }
+    vlclua_set_this( L, p_sd );
     luaL_openlibs( L );
     luaL_register( L, "vlc", p_reg );
-    lua_pushlightuserdata( L, p_sd );
-    lua_setfield( L, -2, "private" );
     luaopen_input( L );
     luaopen_msg( L );
     luaopen_misc( L );
index e6e13d2ca82be2aabf313413ec67084cb49c2f69..20b19fd500779f375ddbc875167c8f0f25c584e2 100644 (file)
@@ -91,6 +91,8 @@ static inline const char *luaL_nilorcheckstring( lua_State *L, int narg )
     return luaL_checkstring( L, narg );
 }
 
+#define vlclua_set_this(a, b) __vlclua_set_this(a, VLC_OBJECT(b))
+void __vlclua_set_this( lua_State *, vlc_object_t * );
 vlc_object_t * vlclua_get_this( lua_State * );
 
 /*****************************************************************************