Fixes for coverity warnings.
diff --git a/src/diff.c b/src/diff.c
index e733ccd..9b6d279 100644
--- a/src/diff.c
+++ b/src/diff.c
@@ -1177,6 +1177,9 @@
 	{
 	    /* Set 'diff', 'scrollbind' off and 'wrap' on. */
 	    wp->w_p_diff = FALSE;
+#ifdef FEAT_CURSORBIND
+	    wp->w_p_crb = FALSE;
+#endif
 	    wp->w_p_scb = FALSE;
 	    wp->w_p_wrap = TRUE;
 #ifdef FEAT_FOLDING
@@ -2360,7 +2363,7 @@
     }
 
     /* restore curwin/curbuf and a few other things */
-    if (idx_other == idx_to)
+    if (eap->cmdidx != CMD_diffget)
     {
 	/* Syncing undo only works for the current buffer, but we change
 	 * another buffer.  Sync undo if the command was typed.  This isn't
diff --git a/src/ex_getln.c b/src/ex_getln.c
index b292f63..790d531 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -3780,7 +3780,7 @@
 
     /* '>' and '+' are special at the start of some commands, e.g. ":edit" and
      * ":write".  "cd -" has a special meaning. */
-    if (*p == '>' || *p == '+' || (*p == '-' && p[1] == NUL))
+    if (p != NULL && (*p == '>' || *p == '+' || (*p == '-' && p[1] == NUL)))
 	escape_fname(&p);
 
     return p;
diff --git a/src/hardcopy.c b/src/hardcopy.c
index 744a2a2..0747dc9 100644
--- a/src/hardcopy.c
+++ b/src/hardcopy.c
@@ -1943,6 +1943,7 @@
 	fclose(fd_resource);
 	return FALSE;
     }
+    fclose(fd_resource);
 
     prt_resfile.line_end = -1;
     prt_resfile.line_start = 0;
@@ -1956,7 +1957,6 @@
     {
 	EMSG2(_("E618: file \"%s\" is not a PostScript resource file"),
 		resource->filename);
-	fclose(fd_resource);
 	return FALSE;
     }
 
@@ -1974,7 +1974,6 @@
     {
 	EMSG2(_("E619: file \"%s\" is not a supported PostScript resource file"),
 		resource->filename);
-	fclose(fd_resource);
 	return FALSE;
     }
     offset += (int)STRLEN(PRT_RESOURCE_RESOURCE);
@@ -1993,7 +1992,6 @@
     {
 	EMSG2(_("E619: file \"%s\" is not a supported PostScript resource file"),
 		resource->filename);
-	fclose(fd_resource);
 	return FALSE;
     }
 
@@ -2036,12 +2034,9 @@
     {
 	EMSG2(_("E619: file \"%s\" is not a supported PostScript resource file"),
 		resource->filename);
-	fclose(fd_resource);
 	return FALSE;
     }
 
-    fclose(fd_resource);
-
     return TRUE;
 }
 
diff --git a/src/misc2.c b/src/misc2.c
index 6b9ffe1..96813a4 100644
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -4533,8 +4533,9 @@
 	 * This is needed if the parameter path is fully qualified.
 	 */
 	search_ctx->ffsc_start_dir = vim_strsave(search_ctx->ffsc_fix_path);
-	if (search_ctx->ffsc_start_dir)
-	    search_ctx->ffsc_fix_path[0] = NUL;
+	if (search_ctx->ffsc_start_dir == NULL)
+	    goto error_return;
+	search_ctx->ffsc_fix_path[0] = NUL;
     }
 
     /* create an absolute path */
diff --git a/src/netbeans.c b/src/netbeans.c
index 00c7ce2..68914eb 100644
--- a/src/netbeans.c
+++ b/src/netbeans.c
@@ -3682,17 +3682,18 @@
 	if (buf->signmaplen == 0) /* first allocation */
 	{
 	    buf->signmaplen = 5;
-	    buf->signmap = (int *)alloc_clear(buf->signmaplen * sizeof(int *));
+	    buf->signmap = (int *)alloc_clear(buf->signmaplen * sizeof(int));
 	}
 	else    /* grow it */
 	{
 	    int incr;
 	    int oldlen = buf->signmaplen;
+
 	    buf->signmaplen *= 2;
 	    incr = buf->signmaplen - oldlen;
 	    buf->signmap = (int *)vim_realloc(buf->signmap,
-					       buf->signmaplen*sizeof(int *));
-	    vim_memset(buf->signmap + oldlen, 0, incr * sizeof(int *));
+					       buf->signmaplen * sizeof(int));
+	    vim_memset(buf->signmap + oldlen, 0, incr * sizeof(int));
 	}
     }
 
diff --git a/src/normal.c b/src/normal.c
index e17aec3..b76e40d 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -6358,7 +6358,7 @@
 nv_brackets(cap)
     cmdarg_T	*cap;
 {
-    pos_T	new_pos;
+    pos_T	new_pos = INIT_POS_T(0, 0, 0);
     pos_T	prev_pos;
     pos_T	*pos = NULL;	    /* init for GCC */
     pos_T	old_pos;	    /* cursor position before command */
@@ -6436,7 +6436,6 @@
     {
 	if (cap->nchar == '*')
 	    cap->nchar = '/';
-	new_pos.lnum = 0;
 	prev_pos.lnum = 0;
 	if (cap->nchar == 'm' || cap->nchar == 'M')
 	{
diff --git a/src/option.c b/src/option.c
index 2c5e88b..06e569c 100644
--- a/src/option.c
+++ b/src/option.c
@@ -3212,6 +3212,8 @@
 		    options[opt_idx].def_val[VI_DEFAULT] = buf;
 		    options[opt_idx].flags |= P_DEF_ALLOCED;
 		}
+		else
+		    vim_free(buf); /* cannot happen */
 	    }
 	    if (mustfree)
 		vim_free(cdpath);
@@ -4262,6 +4264,7 @@
 		 * 'foldmethod' becomes "marker" instead of "diff" and that
 		 * "wrap" gets set. */
 		if (curwin->w_p_diff
+			&& opt_idx >= 0  /* shut up coverity warning */
 			&& (options[opt_idx].indir == PV_FDM
 			    || options[opt_idx].indir == PV_WRAP))
 		    goto skip;
diff --git a/src/spell.c b/src/spell.c
index 6d4d47e..30510ad 100644
--- a/src/spell.c
+++ b/src/spell.c
@@ -9439,7 +9439,8 @@
 		    fseek(fd, fpos_next, SEEK_SET);
 		}
 	    }
-	    fclose(fd);
+	    if (fd != NULL)
+		fclose(fd);
 	}
     }
 
diff --git a/src/ui.c b/src/ui.c
index fbdc325..a05490c 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -3100,6 +3100,9 @@
 
     if (mpos->col > 0)
 	--mpos->col;
+#ifdef FEAT_VIRTUALEDIT
+    mpos->coladd = 0;
+#endif
     return IN_BUFFER;
 }