diff --git a/modules/lua/vlc.c b/modules/lua/vlc.c
index 1271d570f89414ae45272f437bafd3eb03741090..ef5298d7a7bc5e79ba8b853414fe4c47e5859e77 100644
--- a/modules/lua/vlc.c
+++ b/modules/lua/vlc.c
@@ -199,15 +199,17 @@ int vlclua_dir_list(const char *luadirname, char ***restrict listp)
     *listp = list;
 
     /* Lua scripts in user-specific data directory */
-    list = vlclua_dir_list_append(list, config_GetUserDir(VLC_USERDATA_DIR),
-                                  luadirname);
+    char *userdir = config_GetUserDir(VLC_USERDATA_DIR);
+    if (likely(userdir != NULL))
+        list = vlclua_dir_list_append(list, userdir, luadirname);
 
     char *libdir = config_GetSysPath(VLC_PKG_LIBEXEC_DIR, NULL);
     char *datadir = config_GetSysPath(VLC_PKG_DATA_DIR, NULL);
     bool both = libdir != NULL && datadir != NULL && strcmp(libdir, datadir);
 
     /* Tokenized Lua scripts in architecture-specific data directory */
-    list = vlclua_dir_list_append(list, libdir, luadirname);
+    if (libdir != NULL)
+        list = vlclua_dir_list_append(list, libdir, luadirname);
 
     /* Source Lua Scripts in architecture-independent data directory */
     if (both || libdir == NULL)