mirror of
https://github.com/neovim/neovim.git
synced 2026-08-14 03:04:54 +00:00
fix(coverity): UNINIT, FORWARD_NULL
CID 652778: Uninitialized variables (UNINIT)
/src/nvim/context.c: 353 in ctx_dirs_save()
347 if (curbuf->b_sfname != NULL && curbuf->b_fname == curbuf->b_sfname) {
348 cs->cs_save_sfname = xstrdup(curbuf->b_sfname);
349 }
350 do_autochdir();
351 char autocwd[MAXPATHL];
352 if (os_dirname(autocwd, MAXPATHL) == OK) {
>>> CID 652778: Uninitialized variables (UNINIT)
>>> Using uninitialized value "*cwd" when calling "strcmp".
353 cs->cs_apply_acd = strcmp(cwd, autocwd) == 0;
354 }
355 }
356 }
357
358 /// Restores the dir state saved by ctx_dirs_save(), undoing any chdir made while switched. The
CID 652777: Null pointer dereferences (FORWARD_NULL)
/src/nvim/context.c: 556 in ctx_switch()
550 cs->cs_target_win = wp->handle;
551 cs->cs_target_old_pos = wp->w_cursor;
552 }
553 // The CWD-state snapshot is only for a real window target; hidden-buffer target is handled by the
554 // ctx_win machinery (ctx_win_prep).
555 if (buf == NULL || wp != NULL) {
>>> CID 652777: Null pointer dereferences (FORWARD_NULL)
>>> Passing null pointer "wp" to "ctx_dirs_save", which dereferences it.
556 ctx_dirs_save(cs, wp, tp == NULL ? curtab : tp, buf);
557 }
558
559 // Save the current state.
560 cs->cs_curwin = curwin->handle;
561 cs->cs_prevwin = prevwin == NULL ? 0 : prevwin->handle;
This commit is contained in:
@@ -312,6 +312,7 @@ static void ctx_localdirs_restore(CtxSwitch *cs, win_T *cwp, tabpage_T *tp, bool
|
||||
/// ('autochdir', win/tab-local directories) can be undone.
|
||||
/// - kCtxKeepDirs: also copies of the target context's dir scopes (w/b/tp-local, global).
|
||||
static void ctx_dirs_save(CtxSwitch *cs, win_T *wp, tabpage_T *tp, buf_T *buf)
|
||||
FUNC_ATTR_NONNULL_ARG(1, 2, 3)
|
||||
{
|
||||
if (!(cs->cs_flags & (kCtxKeepCwd | kCtxKeepDirs))) {
|
||||
return;
|
||||
@@ -332,8 +333,8 @@ static void ctx_dirs_save(CtxSwitch *cs, win_T *wp, tabpage_T *tp, buf_T *buf)
|
||||
char cwd[MAXPATHL];
|
||||
if ((cs->cs_flags & kCtxKeepDirs)
|
||||
|| (curwin != wp
|
||||
&& (curwin->w_localdir != NULL || (wp != NULL && wp->w_localdir != NULL)
|
||||
|| curbuf->b_localdir != NULL || (wp != NULL && wp->w_buffer->b_localdir != NULL)
|
||||
&& (curwin->w_localdir != NULL || wp->w_localdir != NULL
|
||||
|| curbuf->b_localdir != NULL || wp->w_buffer->b_localdir != NULL
|
||||
|| (curtab != tp && (curtab->tp_localdir != NULL || tp->tp_localdir != NULL))
|
||||
|| p_acd))) {
|
||||
if (os_dirname(cwd, MAXPATHL) == OK) {
|
||||
@@ -350,7 +351,7 @@ static void ctx_dirs_save(CtxSwitch *cs, win_T *wp, tabpage_T *tp, buf_T *buf)
|
||||
do_autochdir();
|
||||
char autocwd[MAXPATHL];
|
||||
if (os_dirname(autocwd, MAXPATHL) == OK) {
|
||||
cs->cs_apply_acd = strcmp(cwd, autocwd) == 0;
|
||||
cs->cs_apply_acd = strcmp(cs->cs_cwd, autocwd) == 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -552,7 +553,7 @@ bool ctx_switch(CtxSwitch *cs, win_T *wp, tabpage_T *tp, buf_T *buf, CtxSwitchFl
|
||||
}
|
||||
// The CWD-state snapshot is only for a real window target; hidden-buffer target is handled by the
|
||||
// ctx_win machinery (ctx_win_prep).
|
||||
if (buf == NULL || wp != NULL) {
|
||||
if (wp != NULL) {
|
||||
ctx_dirs_save(cs, wp, tp == NULL ? curtab : tp, buf);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user