diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2018-05-18 09:07:42 +0200 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2018-05-18 19:04:37 +0200 |
commit | 26d5a981eb444acf9469853d6c4988140d20cb83 (patch) | |
tree | 617df8b0201bce295f954a0347a993c123a5bb41 | |
parent | e121b1dbe78cdf7ad46f493ca3a1cb83c190f719 (diff) | |
download | rneovim-26d5a981eb444acf9469853d6c4988140d20cb83.tar.gz rneovim-26d5a981eb444acf9469853d6c4988140d20cb83.tar.bz2 rneovim-26d5a981eb444acf9469853d6c4988140d20cb83.zip |
do not pass NULL to os_getenv
closes #8393
-rw-r--r-- | src/nvim/eval.c | 3 | ||||
-rw-r--r-- | src/nvim/main.c | 1 | ||||
-rw-r--r-- | src/nvim/option.c | 2 | ||||
-rw-r--r-- | src/nvim/os/stdpaths.c | 4 | ||||
-rw-r--r-- | test/functional/options/defaults_spec.lua | 45 |
5 files changed, 32 insertions, 23 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c index a3540b3153..de40bea0dd 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -15712,6 +15712,9 @@ static void get_xdg_var_list(const XDGVarType xdg, typval_T *rettv) rettv->vval.v_list = list; tv_list_ref(list); char *const dirs = stdpaths_get_xdg_var(xdg); + if (dirs == NULL) { + return; + } do { size_t dir_len; const char *dir; diff --git a/src/nvim/main.c b/src/nvim/main.c index a4ed868af1..23cea3e592 100644 --- a/src/nvim/main.c +++ b/src/nvim/main.c @@ -1849,6 +1849,7 @@ static void source_startup_scripts(const mparm_T *const parmp) /// @return FAIL if the environment variable was not executed, /// OK otherwise. static int process_env(char *env, bool is_viminit) + FUNC_ATTR_NONNULL_ALL { const char *initstr = os_getenv(env); if (initstr != NULL) { diff --git a/src/nvim/option.c b/src/nvim/option.c index 1da259e6b8..68f76296c7 100644 --- a/src/nvim/option.c +++ b/src/nvim/option.c @@ -6585,7 +6585,7 @@ void vimrc_found(char_u *fname, char_u *envname) { char_u *p; - if (fname != NULL) { + if (fname != NULL && envname != NULL) { p = (char_u *)vim_getenv((char *)envname); if (p == NULL) { /* Set $MYVIMRC to the first vimrc file found. */ diff --git a/src/nvim/os/stdpaths.c b/src/nvim/os/stdpaths.c index 866a005228..f6503dfdb0 100644 --- a/src/nvim/os/stdpaths.c +++ b/src/nvim/os/stdpaths.c @@ -65,7 +65,7 @@ char *stdpaths_get_xdg_var(const XDGVarType idx) const char *env_val = os_getenv(env); #ifdef WIN32 - if (env_val == NULL) { + if (env_val == NULL && xdg_defaults_env_vars[idx] != NULL) { env_val = os_getenv(xdg_defaults_env_vars[idx]); } #endif @@ -74,7 +74,7 @@ char *stdpaths_get_xdg_var(const XDGVarType idx) if (env_val != NULL) { ret = xstrdup(env_val); } else if (fallback) { - ret = (char *) expand_env_save((char_u *)fallback); + ret = (char *)expand_env_save((char_u *)fallback); } return ret; diff --git a/test/functional/options/defaults_spec.lua b/test/functional/options/defaults_spec.lua index f452cafd22..787ec366b8 100644 --- a/test/functional/options/defaults_spec.lua +++ b/test/functional/options/defaults_spec.lua @@ -10,6 +10,7 @@ local eval = helpers.eval local eq = helpers.eq local funcs = helpers.funcs local insert = helpers.insert +local iswin = helpers.iswin local neq = helpers.neq local mkdir = helpers.mkdir local rmdir = helpers.rmdir @@ -170,8 +171,7 @@ describe('startup defaults', function() end) describe('$NVIM_LOG_FILE', function() - -- TODO(jkeyes): use stdpath('data') instead. - local datasubdir = helpers.iswin() and 'nvim-data' or 'nvim' + local datasubdir = iswin() and 'nvim-data' or 'nvim' local xdgdir = 'Xtest-startup-xdg-logpath' local xdgdatadir = xdgdir..'/'..datasubdir after_each(function() @@ -428,7 +428,24 @@ end) describe('stdpath()', function() + -- Windows appends 'nvim-data' instead of just 'nvim' to prevent collisions + -- due to XDG_CONFIG_HOME and XDG_DATA_HOME being the same. + local datadir = iswin() and 'nvim-data' or 'nvim' + + it('acceptance', function() + clear() -- Do not explicitly set any env vars. + + eq('nvim', funcs.fnamemodify(funcs.stdpath('cache'), ':t')) + eq('nvim', funcs.fnamemodify(funcs.stdpath('config'), ':t')) + eq(datadir, funcs.fnamemodify(funcs.stdpath('data'), ':t')) + eq('table', type(funcs.stdpath('config_dirs'))) + eq('table', type(funcs.stdpath('data_dirs'))) + -- Check for crash. #8393 + eq(2, eval('1+1')) + end) + context('returns a String', function() + describe('with "config"' , function () it('knows XDG_CONFIG_HOME', function() clear({env={ @@ -463,32 +480,20 @@ describe('stdpath()', function() end) describe('with "data"' , function () - local appended_dir - setup(function() - -- Windows appends 'nvim-data' instead of just 'nvim' to - -- prevent collisions due to XDG_CONFIG_HOME and XDG_DATA_HOME - -- being the same. - if helpers.iswin() then - appended_dir = '/nvim-data' - else - appended_dir = '/nvim' - end - end) - it('knows XDG_DATA_HOME', function() clear({env={ XDG_DATA_HOME=alter_slashes('/home/docwhat/.local'), }}) - eq(alter_slashes('/home/docwhat/.local' .. appended_dir), funcs.stdpath('data')) + eq(alter_slashes('/home/docwhat/.local/'..datadir), funcs.stdpath('data')) end) it('handles changes during runtime', function() clear({env={ XDG_DATA_HOME=alter_slashes('/home/original'), }}) - eq(alter_slashes('/home/original' .. appended_dir), funcs.stdpath('data')) + eq(alter_slashes('/home/original/'..datadir), funcs.stdpath('data')) command("let $XDG_DATA_HOME='"..alter_slashes('/home/new').."'") - eq(alter_slashes('/home/new' .. appended_dir), funcs.stdpath('data')) + eq(alter_slashes('/home/new/'..datadir), funcs.stdpath('data')) end) it("doesn't expand $VARIABLES", function() @@ -496,14 +501,14 @@ describe('stdpath()', function() XDG_DATA_HOME='$VARIABLES', VARIABLES='this-should-not-happen', }}) - eq(alter_slashes('$VARIABLES' .. appended_dir), funcs.stdpath('data')) + eq(alter_slashes('$VARIABLES/'..datadir), funcs.stdpath('data')) end) it("doesn't expand ~/", function() clear({env={ XDG_DATA_HOME=alter_slashes('~/frobnitz'), }}) - eq(alter_slashes('~/frobnitz' .. appended_dir), funcs.stdpath('data')) + eq(alter_slashes('~/frobnitz/'..datadir), funcs.stdpath('data')) end) end) @@ -544,7 +549,7 @@ describe('stdpath()', function() context('returns a List', function() -- Some OS specific variables the system would have set. local function base_env() - if helpers.iswin() then + if iswin() then return { HOME='C:\\Users\\docwhat', -- technically, is not a usual PATH HOMEDRIVE='C:', |