Hi, Remove some checks for NULL around free() in vi. vi still sees to work when I build it on i386 and amd64.
- Michael Index: cl/cl_screen.c =================================================================== RCS file: /cvs/src/usr.bin/vi/cl/cl_screen.c,v retrieving revision 1.27 diff -u -p -u -r1.27 cl_screen.c --- cl/cl_screen.c 28 May 2016 18:30:35 -0000 1.27 +++ cl/cl_screen.c 16 Apr 2017 13:06:45 -0000 @@ -434,14 +434,10 @@ cl_ex_init(SCR *sp) /* Enter_standout_mode and exit_standout_mode are paired. */ if (clp->smso == NULL || clp->rmso == NULL) { - if (clp->smso != NULL) { - free(clp->smso); - clp->smso = NULL; - } - if (clp->rmso != NULL) { - free(clp->rmso); - clp->rmso = NULL; - } + free(clp->smso); + clp->smso = NULL; + free(clp->rmso); + clp->rmso = NULL; } /* @@ -515,26 +511,16 @@ cl_getcap(SCR *sp, char *name, char **el static void cl_freecap(CL_PRIVATE *clp) { - if (clp->el != NULL) { - free(clp->el); - clp->el = NULL; - } - if (clp->cup != NULL) { - free(clp->cup); - clp->cup = NULL; - } - if (clp->cuu1 != NULL) { - free(clp->cuu1); - clp->cuu1 = NULL; - } - if (clp->rmso != NULL) { - free(clp->rmso); - clp->rmso = NULL; - } - if (clp->smso != NULL) { - free(clp->smso); - clp->smso = NULL; - } + free(clp->el); + clp->el = NULL; + free(clp->cup); + clp->cup = NULL; + free(clp->cuu1); + clp->cuu1 = NULL; + free(clp->rmso); + clp->rmso = NULL; + free(clp->smso); + clp->smso = NULL; } /* Index: common/cut.c =================================================================== RCS file: /cvs/src/usr.bin/vi/common/cut.c,v retrieving revision 1.16 diff -u -p -u -r1.16 cut.c --- common/cut.c 27 May 2016 09:18:11 -0000 1.16 +++ common/cut.c 16 Apr 2017 13:06:45 -0000 @@ -343,7 +343,6 @@ text_lfree(TEXTH *headp) void text_free(TEXT *tp) { - if (tp->lb != NULL) - free(tp->lb); + free(tp->lb); free(tp); } Index: common/exf.c =================================================================== RCS file: /cvs/src/usr.bin/vi/common/exf.c,v retrieving revision 1.44 diff -u -p -u -r1.44 exf.c --- common/exf.c 1 Aug 2016 18:27:35 -0000 1.44 +++ common/exf.c 16 Apr 2017 13:06:46 -0000 @@ -76,8 +76,7 @@ file_add(SCR *sp, CHAR_T *name) TAILQ_FOREACH_SAFE(frp, &gp->frefq, q, tfrp) { if (frp->name == NULL) { TAILQ_REMOVE(&gp->frefq, frp, q); - if (frp->name != NULL) - free(frp->name); + free(frp->name); free(frp); continue; } @@ -197,8 +196,7 @@ file_init(SCR *sp, FREF *frp, char *rcv_ F_SET(frp, FR_TMPFILE); if ((frp->tname = strdup(tname)) == NULL || (frp->name == NULL && (frp->name = strdup(tname)) == NULL)) { - if (frp->tname != NULL) - free(frp->tname); + free(frp->tname); msgq(sp, M_SYSERR, NULL); (void)unlink(tname); goto err; @@ -410,10 +408,9 @@ file_init(SCR *sp, FREF *frp, char *rcv_ return (0); -err: if (frp->name != NULL) { - free(frp->name); - frp->name = NULL; - } +err: + free(frp->name); + frp->name = NULL; if (frp->tname != NULL) { (void)unlink(frp->tname); free(frp->tname); @@ -422,10 +419,8 @@ err: if (frp->name != NULL) { oerr: if (F_ISSET(ep, F_RCV_ON)) (void)unlink(ep->rcv_path); - if (ep->rcv_path != NULL) { - free(ep->rcv_path); - ep->rcv_path = NULL; - } + free(ep->rcv_path); + ep->rcv_path = NULL; if (ep->db != NULL) (void)ep->db->close(ep->db); free(ep); @@ -659,8 +654,7 @@ file_end(SCR *sp, EXF *ep, int force) frp->tname = NULL; if (F_ISSET(frp, FR_TMPFILE)) { TAILQ_REMOVE(&sp->gp->frefq, frp, q); - if (frp->name != NULL) - free(frp->name); + free(frp->name); free(frp); } sp->frp = NULL; @@ -704,11 +698,8 @@ file_end(SCR *sp, EXF *ep, int force) (void)close(ep->fcntl_fd); if (ep->rcv_fd != -1) (void)close(ep->rcv_fd); - if (ep->rcv_path != NULL) - free(ep->rcv_path); - if (ep->rcv_mpath != NULL) - free(ep->rcv_mpath); - + free(ep->rcv_path); + free(ep->rcv_mpath); free(ep); return (0); } @@ -1358,8 +1349,7 @@ file_aw(SCR *sp, int flags) void set_alt_name(SCR *sp, char *name) { - if (sp->alt_name != NULL) - free(sp->alt_name); + free(sp->alt_name); if (name == NULL) sp->alt_name = NULL; else if ((sp->alt_name = strdup(name)) == NULL) Index: common/key.c =================================================================== RCS file: /cvs/src/usr.bin/vi/common/key.c,v retrieving revision 1.18 diff -u -p -u -r1.18 key.c --- common/key.c 27 May 2016 09:18:11 -0000 1.18 +++ common/key.c 16 Apr 2017 13:06:46 -0000 @@ -770,8 +770,7 @@ v_event_err(SCR *sp, EVENT *evp) } /* Free any allocated memory. */ - if (evp->e_asp != NULL) - free(evp->e_asp); + free(evp->e_asp); } /* Index: common/log.c =================================================================== RCS file: /cvs/src/usr.bin/vi/common/log.c,v retrieving revision 1.11 diff -u -p -u -r1.11 log.c --- common/log.c 20 Jan 2017 00:55:52 -0000 1.11 +++ common/log.c 16 Apr 2017 13:06:46 -0000 @@ -124,10 +124,8 @@ log_end(SCR *sp, EXF *ep) (void)(ep->log->close)(ep->log); ep->log = NULL; } - if (ep->l_lp != NULL) { - free(ep->l_lp); - ep->l_lp = NULL; - } + free(ep->l_lp); + ep->l_lp = NULL; ep->l_len = 0; ep->l_cursor.lno = 1; /* XXX Any valid recno. */ ep->l_cursor.cno = 0; Index: common/main.c =================================================================== RCS file: /cvs/src/usr.bin/vi/common/main.c,v retrieving revision 1.38 diff -u -p -u -r1.38 main.c --- common/main.c 27 May 2016 09:18:11 -0000 1.38 +++ common/main.c 16 Apr 2017 13:06:47 -0000 @@ -470,17 +470,14 @@ v_end(GS *gp) /* Free FREF's. */ while ((frp = TAILQ_FIRST(&gp->frefq))) { TAILQ_REMOVE(&gp->frefq, frp, q); - if (frp->name != NULL) - free(frp->name); - if (frp->tname != NULL) - free(frp->tname); + free(frp->name); + free(frp->tname); free(frp); } } /* Free key input queue. */ - if (gp->i_event != NULL) - free(gp->i_event); + free(gp->i_event); /* Free cut buffers. */ cut_close(gp); @@ -514,8 +511,7 @@ v_end(GS *gp) #if defined(DEBUG) || defined(PURIFY) /* Free any temporary space. */ - if (gp->tmp_bp != NULL) - free(gp->tmp_bp); + free(gp->tmp_bp); #if defined(DEBUG) /* Close debugging file descriptor. */ Index: common/options.c =================================================================== RCS file: /cvs/src/usr.bin/vi/common/options.c,v retrieving revision 1.22 diff -u -p -u -r1.22 options.c --- common/options.c 1 Aug 2016 18:27:35 -0000 1.22 +++ common/options.c 16 Apr 2017 13:06:47 -0000 @@ -1129,9 +1129,7 @@ opts_free(SCR *sp) if (optlist[cnt].type != OPT_STR || F_ISSET(&optlist[cnt], OPT_GLOBAL)) continue; - if (O_STR(sp, cnt) != NULL) - free(O_STR(sp, cnt)); - if (O_D_STR(sp, cnt) != NULL) - free(O_D_STR(sp, cnt)); + free(O_STR(sp, cnt)); + free(O_D_STR(sp, cnt)); } } Index: common/screen.c =================================================================== RCS file: /cvs/src/usr.bin/vi/common/screen.c,v retrieving revision 1.13 diff -u -p -u -r1.13 screen.c --- common/screen.c 7 Dec 2015 20:39:19 -0000 1.13 +++ common/screen.c 16 Apr 2017 13:06:47 -0000 @@ -176,22 +176,17 @@ screen_end(SCR *sp) text_lfree(&sp->tiq); /* Free alternate file name. */ - if (sp->alt_name != NULL) - free(sp->alt_name); + free(sp->alt_name); /* Free up search information. */ - if (sp->re != NULL) - free(sp->re); + free(sp->re); if (F_ISSET(sp, SC_RE_SEARCH)) regfree(&sp->re_c); - if (sp->subre != NULL) - free(sp->subre); + free(sp->subre); if (F_ISSET(sp, SC_RE_SUBST)) regfree(&sp->subre_c); - if (sp->repl != NULL) - free(sp->repl); - if (sp->newl != NULL) - free(sp->newl); + free(sp->repl); + free(sp->newl); /* Free all the options */ opts_free(sp); Index: common/seq.c =================================================================== RCS file: /cvs/src/usr.bin/vi/common/seq.c,v retrieving revision 1.13 diff -u -p -u -r1.13 seq.c --- common/seq.c 27 May 2016 09:18:11 -0000 1.13 +++ common/seq.c 16 Apr 2017 13:06:47 -0000 @@ -58,8 +58,7 @@ seq_set(SCR *sp, CHAR_T *name, size_t nl sv_errno = errno; goto mem1; } - if (qp->output != NULL) - free(qp->output); + free(qp->output); qp->olen = olen; qp->output = p; return (0); @@ -95,8 +94,7 @@ seq_set(SCR *sp, CHAR_T *name, size_t nl } else if ((qp->output = v_strdup(sp, output, olen)) == NULL) { sv_errno = errno; free(qp->input); -mem3: if (qp->name != NULL) - free(qp->name); +mem3: free(qp->name); mem2: free(qp); mem1: errno = sv_errno; msgq(sp, M_SYSERR, NULL); @@ -148,11 +146,9 @@ int seq_mdel(SEQ *qp) { LIST_REMOVE(qp, q); - if (qp->name != NULL) - free(qp->name); + free(qp->name); free(qp->input); - if (qp->output != NULL) - free(qp->output); + free(qp->output); free(qp); return (0); } @@ -250,12 +246,9 @@ seq_close(GS *gp) SEQ *qp; while ((qp = LIST_FIRST(&gp->seqq)) != NULL) { - if (qp->name != NULL) - free(qp->name); - if (qp->input != NULL) - free(qp->input); - if (qp->output != NULL) - free(qp->output); + free(qp->name); + free(qp->input); + free(qp->output); LIST_REMOVE(qp, q); free(qp); } Index: ex/ex_bang.c =================================================================== RCS file: /cvs/src/usr.bin/vi/ex/ex_bang.c,v retrieving revision 1.10 diff -u -p -u -r1.10 ex_bang.c --- ex/ex_bang.c 6 Jan 2016 22:29:38 -0000 1.10 +++ ex/ex_bang.c 16 Apr 2017 13:06:47 -0000 @@ -63,8 +63,7 @@ ex_bang(SCR *sp, EXCMD *cmdp) /* Set the "last bang command" remembered value. */ exp = EXP(sp); - if (exp->lastbcomm != NULL) - free(exp->lastbcomm); + free(exp->lastbcomm); if ((exp->lastbcomm = strdup(ap->bp)) == NULL) { msgq(sp, M_SYSERR, NULL); return (1); Index: ex/ex_init.c =================================================================== RCS file: /cvs/src/usr.bin/vi/ex/ex_init.c,v retrieving revision 1.17 diff -u -p -u -r1.17 ex_init.c --- ex/ex_init.c 6 Jan 2016 22:28:52 -0000 1.17 +++ ex/ex_init.c 16 Apr 2017 13:06:47 -0000 @@ -90,11 +90,8 @@ ex_screen_end(SCR *sp) if (argv_free(sp)) rval = 1; - if (exp->ibp != NULL) - free(exp->ibp); - - if (exp->lastbcomm != NULL) - free(exp->lastbcomm); + free(exp->ibp); + free(exp->lastbcomm); if (ex_tag_free(sp)) rval = 1; Index: ex/ex_read.c =================================================================== RCS file: /cvs/src/usr.bin/vi/ex/ex_read.c,v retrieving revision 1.13 diff -u -p -u -r1.13 ex_read.c --- ex/ex_read.c 27 May 2016 09:18:12 -0000 1.13 +++ ex/ex_read.c 16 Apr 2017 13:06:47 -0000 @@ -111,8 +111,7 @@ ex_read(SCR *sp, EXCMD *cmdp) /* Set the last bang command. */ exp = EXP(sp); - if (exp->lastbcomm != NULL) - free(exp->lastbcomm); + free(exp->lastbcomm); if ((exp->lastbcomm = strdup(cmdp->argv[argc]->bp)) == NULL) { msgq(sp, M_SYSERR, NULL); Index: ex/ex_script.c =================================================================== RCS file: /cvs/src/usr.bin/vi/ex/ex_script.c,v retrieving revision 1.26 diff -u -p -u -r1.26 ex_script.c --- ex/ex_script.c 27 May 2016 09:18:12 -0000 1.26 +++ ex/ex_script.c 16 Apr 2017 13:06:47 -0000 @@ -569,8 +569,7 @@ sscr_setprompt(SCR *sp, char *buf, size_ SCRIPT *sc; sc = sp->script; - if (sc->sh_prompt) - free(sc->sh_prompt); + free(sc->sh_prompt); MALLOC(sp, sc->sh_prompt, len + 1); if (sc->sh_prompt == NULL) { sscr_end(sp); Index: ex/ex_subst.c =================================================================== RCS file: /cvs/src/usr.bin/vi/ex/ex_subst.c,v retrieving revision 1.29 diff -u -p -u -r1.29 ex_subst.c --- ex/ex_subst.c 2 Sep 2016 15:38:42 -0000 1.29 +++ ex/ex_subst.c 16 Apr 2017 13:06:48 -0000 @@ -187,8 +187,7 @@ subagain: return (ex_subagain(sp, cmdp)) if (p[0] == '\0' || p[0] == delim) { if (p[0] == delim) ++p; - if (sp->repl != NULL) - free(sp->repl); + free(sp->repl); sp->repl = NULL; sp->repl_len = 0; } else if (p[0] == '%' && (p[1] == '\0' || p[1] == delim)) @@ -227,8 +226,7 @@ tilde: ++p; ++len; } if ((sp->repl_len = len) != 0) { - if (sp->repl != NULL) - free(sp->repl); + free(sp->repl); if ((sp->repl = malloc(len)) == NULL) { msgq(sp, M_SYSERR, NULL); FREE_SPACE(sp, bp, blen); @@ -857,8 +855,7 @@ err: rval = 1; if (bp != NULL) FREE_SPACE(sp, bp, blen); - if (lb != NULL) - free(lb); + free(lb); return (rval); } @@ -917,10 +914,8 @@ re_compile(SCR *sp, char *ptrn, size_t p return (1); /* Discard previous pattern. */ - if (*ptrnp != NULL) { - free(*ptrnp); - *ptrnp = NULL; - } + free(*ptrnp); + *ptrnp = NULL; if (lenp != NULL) *lenp = plen; Index: ex/ex_tag.c =================================================================== RCS file: /cvs/src/usr.bin/vi/ex/ex_tag.c,v retrieving revision 1.24 diff -u -p -u -r1.24 ex_tag.c --- ex/ex_tag.c 6 Jan 2016 22:28:52 -0000 1.24 +++ ex/ex_tag.c 16 Apr 2017 13:06:48 -0000 @@ -102,8 +102,7 @@ ex_tag_push(SCR *sp, EXCMD *cmdp) exp = EXP(sp); switch (cmdp->argc) { case 1: - if (exp->tag_last != NULL) - free(exp->tag_last); + free(exp->tag_last); if ((exp->tag_last = strdup(cmdp->argv[0]->bp)) == NULL) { msgq(sp, M_SYSERR, NULL); @@ -208,10 +207,8 @@ ex_tag_push(SCR *sp, EXCMD *cmdp) err: alloc_err: - if (rtqp != NULL) - free(rtqp); - if (rtp != NULL) - free(rtp); + free(rtqp); + free(rtp); tagq_free(sp, tqp); return (1); } @@ -861,8 +858,7 @@ ex_tag_free(SCR *sp) tagq_free(sp, tqp); /* tagq_free removes tqp from queue. */ while ((tfp = TAILQ_FIRST(&exp->tagfq)) != NULL) tagf_free(sp, tfp); - if (exp->tag_last != NULL) - free(exp->tag_last); + free(exp->tag_last); return (0); } Index: vi/v_init.c =================================================================== RCS file: /cvs/src/usr.bin/vi/vi/v_init.c,v retrieving revision 1.7 diff -u -p -u -r1.7 v_init.c --- vi/v_init.c 7 Dec 2015 20:39:19 -0000 1.7 +++ vi/v_init.c 16 Apr 2017 13:06:48 -0000 @@ -81,16 +81,10 @@ v_screen_end(SCR *sp) if ((vip = VIP(sp)) == NULL) return (0); - if (vip->keyw != NULL) - free(vip->keyw); - if (vip->rep != NULL) - free(vip->rep); - if (vip->ps != NULL) - free(vip->ps); - - if (HMAP != NULL) - free(HMAP); - + free(vip->keyw); + free(vip->rep); + free(vip->ps); + free(HMAP); free(vip); sp->vi_private = NULL; Index: vi/v_paragraph.c =================================================================== RCS file: /cvs/src/usr.bin/vi/vi/v_paragraph.c,v retrieving revision 1.8 diff -u -p -u -r1.8 v_paragraph.c --- vi/v_paragraph.c 7 Dec 2015 20:39:19 -0000 1.8 +++ vi/v_paragraph.c 16 Apr 2017 13:06:48 -0000 @@ -326,8 +326,7 @@ v_buildps(SCR *sp, char *p_p, char *s_p) MALLOC_RET(sp, p, p_len + s_len + 1); vip = VIP(sp); - if (vip->ps != NULL) - free(vip->ps); + free(vip->ps); if (p_p != NULL) memmove(p, p_p, p_len + 1); Index: vi/vi.c =================================================================== RCS file: /cvs/src/usr.bin/vi/vi/vi.c,v retrieving revision 1.20 diff -u -p -u -r1.20 vi.c --- vi/vi.c 27 May 2016 09:18:12 -0000 1.20 +++ vi/vi.c 16 Apr 2017 13:06:49 -0000 @@ -1001,10 +1001,8 @@ v_dtoh(SCR *sp) hidden = 0; gp = sp->gp; while ((tsp = TAILQ_FIRST(&gp->dq))) { - if (_HMAP(tsp) != NULL) { - free(_HMAP(tsp)); - _HMAP(tsp) = NULL; - } + free(_HMAP(tsp)); + _HMAP(tsp) = NULL; TAILQ_REMOVE(&gp->dq, tsp, q); TAILQ_INSERT_TAIL(&gp->hq, tsp, q); ++hidden; Index: vi/vs_msg.c =================================================================== RCS file: /cvs/src/usr.bin/vi/vi/vs_msg.c,v retrieving revision 1.19 diff -u -p -u -r1.19 vs_msg.c --- vi/vs_msg.c 18 Dec 2016 06:11:23 -0000 1.19 +++ vi/vs_msg.c 16 Apr 2017 13:06:49 -0000 @@ -899,7 +899,6 @@ vs_msgsave(SCR *sp, mtype_t mt, char *p, return; alloc_err: - if (mp_n != NULL) - free(mp_n); + free(mp_n); (void)fprintf(stderr, "%.*s\n", (int)len, p); }