From: Michael Tremer Date: Sun, 7 Feb 2010 20:45:49 +0000 (+0100) Subject: ncurses: Remove old coverty fixes patch. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6d943e2c6895eeafaba7a880549bf5cba0203458;p=ipfire-3.x.git ncurses: Remove old coverty fixes patch. --- diff --git a/pkgs/core/ncurses/patches/ncurses-5.7-coverity_fixes-1.patch b/pkgs/core/ncurses/patches/ncurses-5.7-coverity_fixes-1.patch deleted file mode 100644 index 42232c073..000000000 --- a/pkgs/core/ncurses/patches/ncurses-5.7-coverity_fixes-1.patch +++ /dev/null @@ -1,548 +0,0 @@ -Submitted By: Matt Burgess (matthew at linuxfromscratch dot org) -Date: 2007-05-05 -Initial Package Version: 5.6 -Upstream Status: From Upstream -Origin: ftp://invisible-island.net/ncurses/5.6/ncurses-5.6-coverity.patch.gz -Description: Fixes a number of issues found by the Coverity static code analysis - program. - -diff -Naur ncurses-5.6.orig/NEWS ncurses-5.6/NEWS ---- ncurses-5.6.orig/NEWS 2006-12-17 20:36:26.000000000 +0000 -+++ ncurses-5.6/NEWS 2007-05-05 08:11:08.000000000 +0000 -@@ -45,6 +45,36 @@ - Changes through 1.9.9e did not credit all contributions; - it is not possible to add this information. - -+20060407 -+ > other fixes prompted by inspection for Coverity report: -+ + modify ifdef's for c++ binding to use try/catch/throw statements -+ + add a null-pointer check in tack/ansi.c request_cfss() -+ + fix a memory leak in ncurses/base/wresize.c -+ + corrected check for valid memu/meml capabilities in -+ progs/dump_entry.c when handling V_HPUX case. -+ > fixes based on Coverity report: -+ + remove dead code in test/bs.c -+ + remove dead code in test/demo_defkey.c -+ + remove an unused assignment in progs/infocmp.c -+ + fix a limit check in tack/ansi.c tools_charset() -+ + fix tack/ansi.c tools_status() to perform the VT320/VT420 -+ tests in request_cfss(). The function had exited too soon. -+ + fix a memory leak in tic.c's make_namelist() -+ + fix a couple of places in tack/output.c which did not check for EOF. -+ + fix a loop-condition in test/bs.c -+ + add index checks in lib_color.c for color palettes -+ + add index checks in progs/dump_entry.c for version_filter() handling -+ of V_BSD case. -+ + fix a possible null-pointer dereference in copywin() -+ + fix a possible null-pointer dereference in waddchnstr() -+ + add a null-pointer check in _nc_expand_try() -+ + add a null-pointer check in tic.c's make_namelist() -+ + add a null-pointer check in _nc_expand_try() -+ + add null-pointer checks in test/cardfile.c -+ + fix a double-free in ncurses/tinfo/trim_sgr0.c -+ + fix a double-free in ncurses/base/wresize.c -+ + add try/catch block to c++/cursesmain.cc -+ - 20061217 5.6 release for upload to ftp.gnu.org - - 20061217 -diff -Naur ncurses-5.6.orig/c++/cursesmain.cc ncurses-5.6/c++/cursesmain.cc ---- ncurses-5.6.orig/c++/cursesmain.cc 2003-10-25 14:53:13.000000000 +0000 -+++ ncurses-5.6/c++/cursesmain.cc 2007-05-05 08:11:08.000000000 +0000 -@@ -34,6 +34,13 @@ - #include "internal.h" - #include "cursesapp.h" - -+#if CPP_HAS_TRY_CATCH && HAVE_IOSTREAM -+#include -+#else -+#undef CPP_HAS_TRY_CATCH -+#define CPP_HAS_TRY_CATCH 0 -+#endif -+ - MODULE_ID("$Id: cursesmain.cc,v 1.11 2003/10/25 14:53:13 tom Exp $") - - #if HAVE_LOCALE_H -@@ -58,8 +65,20 @@ - - A->handleArgs(argc,argv); - ::endwin(); -+#if CPP_HAS_TRY_CATCH -+ try { -+ res = (*A)(); -+ ::endwin(); -+ } -+ catch(const NCursesException &e) { -+ ::endwin(); -+ std::cerr << e.message << std::endl; -+ res = e.errorno; -+ } -+#else - res = (*A)(); - ::endwin(); -+#endif - return(res); - } - } -diff -Naur ncurses-5.6.orig/c++/cursesp.h ncurses-5.6/c++/cursesp.h ---- ncurses-5.6.orig/c++/cursesp.h 2005-08-13 18:09:21.000000000 +0000 -+++ ncurses-5.6/c++/cursesp.h 2007-05-05 08:11:08.000000000 +0000 -@@ -83,7 +83,7 @@ - return uptr->m_user; - } - -- void OnError (int err) const THROWS((NCursesPanelException)) -+ void OnError (int err) const THROWS(NCursesPanelException) - { - if (err==ERR) - THROW(new NCursesPanelException (this, err)); -diff -Naur ncurses-5.6.orig/c++/etip.h.in ncurses-5.6/c++/etip.h.in ---- ncurses-5.6.orig/c++/etip.h.in 2005-08-06 19:55:57.000000000 +0000 -+++ ncurses-5.6/c++/etip.h.in 2007-05-05 08:11:08.000000000 +0000 -@@ -342,23 +342,33 @@ - inline void THROW(const NCursesException *e) { - #if defined(__GNUG__) && defined(__EXCEPTIONS) - # if ((__GNUG__ <= 2) && (__GNUC_MINOR__ < 8)) -- (*lib_error_handler)(e?e->classname():"",e?e->message:""); -+ (*lib_error_handler)(e ? e->classname() : "", e ? e->message : ""); - #else -- throw *e; -+#define CPP_HAS_TRY_CATCH 1 - #endif - #elif defined(__SUNPRO_CC) - # if !defined(__SUNPRO_CC_COMPAT) || (__SUNPRO_CC_COMPAT < 5) - genericerror(1, ((e != 0) ? (char *)(e->message) : "")); - #else -- throw *e; -+#define CPP_HAS_TRY_CATCH 1 - #endif - #else - if (e) - cerr << e->message << endl; - exit(0); - #endif --} - --#define THROWS(s) -+#ifndef CPP_HAS_TRY_CATCH -+#define CPP_HAS_TRY_CATCH 0 -+#define NCURSES_CPP_TRY /* nothing */ -+#define NCURSES_CPP_CATCH(e) if (false) -+#define THROWS(s) /* nothing */ -+#elif CPP_HAS_TRY_CATCH -+ throw *e; -+#define NCURSES_CPP_TRY try -+#define NCURSES_CPP_CATCH(e) catch(e) -+#define THROWS(s) throw(s) -+#endif -+} - - #endif /* NCURSES_ETIP_H_incl */ -diff -Naur ncurses-5.6.orig/configure ncurses-5.6/configure ---- ncurses-5.6.orig/configure 2006-12-17 16:33:38.000000000 +0000 -+++ ncurses-5.6/configure 2007-05-05 08:11:08.000000000 +0000 -@@ -13865,7 +13865,7 @@ - ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - ac_main_return=return - --for ac_header in typeinfo -+for ac_header in iostream typeinfo - do - as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` - echo "$as_me:13871: checking for $ac_header" >&5 -diff -Naur ncurses-5.6.orig/configure.in ncurses-5.6/configure.in ---- ncurses-5.6.orig/configure.in 2006-12-17 01:26:06.000000000 +0000 -+++ ncurses-5.6/configure.in 2007-05-05 08:11:08.000000000 +0000 -@@ -1200,7 +1200,7 @@ - ;; - esac - -- AC_CHECK_HEADERS(typeinfo) -+ AC_CHECK_HEADERS(iostream typeinfo) - - CF_BOOL_DECL - CF_BOOL_SIZE -diff -Naur ncurses-5.6.orig/include/ncurses_defs ncurses-5.6/include/ncurses_defs ---- ncurses-5.6.orig/include/ncurses_defs 2006-08-05 19:27:02.000000000 +0000 -+++ ncurses-5.6/include/ncurses_defs 2007-05-05 08:11:08.000000000 +0000 -@@ -68,6 +68,7 @@ - HAVE_GPP_BUILTIN_H - HAVE_GXX_BUILTIN_H - HAVE_HAS_KEY -+HAVE_IOSTREAM - HAVE_ISASCII - HAVE_ISSETUGID - HAVE_LANGINFO_CODESET -diff -Naur ncurses-5.6.orig/ncurses/base/lib_addstr.c ncurses-5.6/ncurses/base/lib_addstr.c ---- ncurses-5.6.orig/ncurses/base/lib_addstr.c 2006-05-27 19:22:19.000000000 +0000 -+++ ncurses-5.6/ncurses/base/lib_addstr.c 2007-05-05 08:11:08.000000000 +0000 -@@ -80,8 +80,7 @@ - NCURSES_EXPORT(int) - waddchnstr(WINDOW *win, const chtype *astr, int n) - { -- NCURSES_SIZE_T y = win->_cury; -- NCURSES_SIZE_T x = win->_curx; -+ NCURSES_SIZE_T y, x; - int code = OK; - int i; - struct ldat *line; -@@ -91,6 +90,8 @@ - if (!win) - returnCode(ERR); - -+ y = win->_cury; -+ x = win->_curx; - if (n < 0) { - const chtype *str; - n = 0; -diff -Naur ncurses-5.6.orig/ncurses/base/lib_color.c ncurses-5.6/ncurses/base/lib_color.c ---- ncurses-5.6.orig/ncurses/base/lib_color.c 2006-11-26 01:33:16.000000000 +0000 -+++ ncurses-5.6/ncurses/base/lib_color.c 2007-05-05 08:11:08.000000000 +0000 -@@ -56,7 +56,10 @@ - - #define TYPE_CALLOC(type,elts) typeCalloc(type, (unsigned)(elts)) - -+#define MAX_PALETTE 8 -+ - #define OkColorHi(n) (((n) < COLORS) && ((n) < max_colors)) -+#define InPalette(n) ((n) >= 0 && (n) < MAX_PALETTE) - - /* - * Given a RGB range of 0..1000, we'll normally set the individual values -@@ -162,10 +165,10 @@ - - tp = (hue_lightness_saturation) ? hls_palette : cga_palette; - for (n = 0; n < COLORS; n++) { -- if (n < 8) { -+ if (InPalette(n)) { - SP->_color_table[n] = tp[n]; - } else { -- SP->_color_table[n] = tp[n % 8]; -+ SP->_color_table[n] = tp[n % MAX_PALETTE]; - if (hue_lightness_saturation) { - SP->_color_table[n].green = 100; - } else { -@@ -365,7 +368,7 @@ - if (GET_SCREEN_PAIR(SP) == pair) - SET_SCREEN_PAIR(SP, (chtype) (~0)); /* force attribute update */ - -- if (initialize_pair) { -+ if (initialize_pair && InPalette(f) && InPalette(b)) { - const color_t *tp = hue_lightness_saturation ? hls_palette : cga_palette; - - T(("initializing pair: pair = %d, fg=(%d,%d,%d), bg=(%d,%d,%d)", -diff -Naur ncurses-5.6.orig/ncurses/base/lib_overlay.c ncurses-5.6/ncurses/base/lib_overlay.c ---- ncurses-5.6.orig/ncurses/base/lib_overlay.c 2006-10-14 20:43:31.000000000 +0000 -+++ ncurses-5.6/ncurses/base/lib_overlay.c 2007-05-05 08:11:08.000000000 +0000 -@@ -139,8 +139,8 @@ - { - int sx, sy, dx, dy; - bool touched; -- attr_t bk = AttrOf(dst->_nc_bkgd); -- attr_t mask = ~(attr_t) ((bk & A_COLOR) ? A_COLOR : 0); -+ attr_t bk; -+ attr_t mask; - - T((T_CALLED("copywin(%p, %p, %d, %d, %d, %d, %d, %d, %d)"), - src, dst, sminrow, smincol, dminrow, dmincol, dmaxrow, dmaxcol, over)); -@@ -148,6 +148,9 @@ - if (!src || !dst) - returnCode(ERR); - -+ bk = AttrOf(dst->_nc_bkgd); -+ mask = ~(attr_t) ((bk & A_COLOR) ? A_COLOR : 0); -+ - /* make sure rectangle exists in source */ - if ((sminrow + dmaxrow - dminrow) > (src->_maxy + 1) || - (smincol + dmaxcol - dmincol) > (src->_maxx + 1)) { -diff -Naur ncurses-5.6.orig/ncurses/base/tries.c ncurses-5.6/ncurses/base/tries.c ---- ncurses-5.6.orig/ncurses/base/tries.c 2005-11-26 20:09:18.000000000 +0000 -+++ ncurses-5.6/ncurses/base/tries.c 2007-05-05 08:11:08.000000000 +0000 -@@ -68,7 +68,7 @@ - } - } - if (result != 0) { -- if ((result[len] = ptr->ch) == 0) -+ if (ptr != 0 && (result[len] = ptr->ch) == 0) - *((unsigned char *) (result + len)) = 128; - #ifdef TRACE - if (len == 0 && _nc_tracing != 0) -diff -Naur ncurses-5.6.orig/ncurses/base/wresize.c ncurses-5.6/ncurses/base/wresize.c ---- ncurses-5.6.orig/ncurses/base/wresize.c 2006-10-14 20:43:31.000000000 +0000 -+++ ncurses-5.6/ncurses/base/wresize.c 2007-05-05 08:11:08.000000000 +0000 -@@ -38,7 +38,7 @@ - cleanup_lines(struct ldat *data, int length) - { - while (--length >= 0) -- free(data->text); -+ free(data[length].text); - free(data); - return ERR; - } -diff -Naur ncurses-5.6.orig/ncurses/tinfo/trim_sgr0.c ncurses-5.6/ncurses/tinfo/trim_sgr0.c ---- ncurses-5.6.orig/ncurses/tinfo/trim_sgr0.c 2006-12-02 19:37:57.000000000 +0000 -+++ ncurses-5.6/ncurses/tinfo/trim_sgr0.c 2007-05-05 08:11:08.000000000 +0000 -@@ -247,9 +247,7 @@ - if (!rewrite_sgr(on, enter_alt_charset_mode) - || !rewrite_sgr(off, exit_alt_charset_mode) - || !rewrite_sgr(end, exit_alt_charset_mode)) { -- FreeIfNeeded(on); - FreeIfNeeded(off); -- FreeIfNeeded(end); - } else if (similar_sgr(off, end) - && !similar_sgr(off, on)) { - TR(TRACE_DATABASE, ("adjusting sgr(9:off) : %s", _nc_visbuf(off))); -@@ -315,8 +313,8 @@ - */ - free(off); - } -- free(end); -- free(on); -+ FreeIfNeeded(end); -+ FreeIfNeeded(on); - } else { - /* - * Possibly some applications are confused if sgr0 contains rmacs, -diff -Naur ncurses-5.6.orig/progs/dump_entry.c ncurses-5.6/progs/dump_entry.c ---- ncurses-5.6.orig/progs/dump_entry.c 2006-09-30 20:18:15.000000000 +0000 -+++ ncurses-5.6/progs/dump_entry.c 2007-05-05 08:11:08.000000000 +0000 -@@ -352,14 +352,17 @@ - } - break; - -+#define is_termcap(type) (idx < (int) sizeof(type##_from_termcap) && \ -+ type##_from_termcap[idx]) -+ - case V_BSD: /* BSD */ - switch (type) { - case BOOLEAN: -- return bool_from_termcap[idx]; -+ return is_termcap(bool); - case NUMBER: -- return num_from_termcap[idx]; -+ return is_termcap(num); - case STRING: -- return str_from_termcap[idx]; -+ return is_termcap(str); - } - break; - } -@@ -788,11 +791,11 @@ - * Much more work should be done on this to support dumping termcaps. - */ - if (tversion == V_HPUX) { -- if (memory_lock) { -+ if (VALID_STRING(memory_lock)) { - (void) sprintf(buffer, "meml=%s", memory_lock); - WRAP_CONCAT; - } -- if (memory_unlock) { -+ if (VALID_STRING(memory_unlock)) { - (void) sprintf(buffer, "memu=%s", memory_unlock); - WRAP_CONCAT; - } -diff -Naur ncurses-5.6.orig/progs/infocmp.c ncurses-5.6/progs/infocmp.c ---- ncurses-5.6.orig/progs/infocmp.c 2006-08-19 21:20:37.000000000 +0000 -+++ ncurses-5.6/progs/infocmp.c 2007-05-05 08:11:08.000000000 +0000 -@@ -1083,7 +1083,6 @@ - } - *tp++ = '"'; - *tp = '\0'; -- size += (strlen(term->Strings[n]) + 1); - (void) printf("static char %-20s[] = %s;\n", - string_variable(ExtStrname(term, n, strnames)), buf); - } -diff -Naur ncurses-5.6.orig/progs/tic.c ncurses-5.6/progs/tic.c ---- ncurses-5.6.orig/progs/tic.c 2006-12-02 22:13:17.000000000 +0000 -+++ ncurses-5.6/progs/tic.c 2007-05-05 08:11:08.000000000 +0000 -@@ -353,11 +353,24 @@ - return fp; - } - -+#if NO_LEAKS -+static void -+free_namelist(char **src) -+{ -+ if (src != 0) { -+ int n; -+ for (n = 0; src[n] != 0; ++n) -+ free (src[n]); -+ free (src); -+ } -+} -+#endif -+ - /* Parse the "-e" option-value into a list of names */ --static const char ** -+static char ** - make_namelist(char *src) - { -- const char **dst = 0; -+ char **dst = 0; - - char *s, *base; - unsigned pass, n, nn; -@@ -374,11 +387,13 @@ - if ((s = stripped(buffer)) != 0) { - if (dst != 0) - dst[nn] = s; -+ else -+ free(s); - nn++; - } - } - if (pass == 1) { -- dst = typeCalloc(const char *, nn + 1); -+ dst = typeCalloc(char *, nn + 1); - rewind(fp); - } - } -@@ -401,10 +416,10 @@ - break; - } - if (pass == 1) -- dst = typeCalloc(const char *, nn + 1); -+ dst = typeCalloc(char *, nn + 1); - } - } -- if (showsummary) { -+ if (showsummary && (dst != 0)) { - fprintf(log_fp, "Entries that will be compiled:\n"); - for (n = 0; dst[n] != 0; n++) - fprintf(log_fp, "%u:%s\n", n + 1, dst[n]); -@@ -413,7 +428,7 @@ - } - - static bool --matches(const char **needle, const char *haystack) -+matches(char **needle, const char *haystack) - /* does entry in needle list match |-separated field in haystack? */ - { - bool code = FALSE; -@@ -468,7 +483,7 @@ - bool limited = TRUE; - char *tversion = (char *) NULL; - const char *source_file = "terminfo"; -- const char **namelst = 0; -+ char **namelst = 0; - char *outdir = (char *) NULL; - bool check_only = FALSE; - bool suppress_untranslatable = FALSE; -@@ -784,6 +799,9 @@ - else - fprintf(log_fp, "No entries written\n"); - } -+#if NO_LEAKS -+ free_namelist(namelst); -+#endif - cleanup(); - ExitProgram(EXIT_SUCCESS); - } -diff -Naur ncurses-5.6.orig/tack/ansi.c ncurses-5.6/tack/ansi.c ---- ncurses-5.6.orig/tack/ansi.c 2005-09-17 19:49:16.000000000 +0000 -+++ ncurses-5.6/tack/ansi.c 2007-05-05 08:11:08.000000000 +0000 -@@ -309,6 +309,8 @@ - put_crlf(); - for (i = 0; rqss[i].text; i++) { - ptext(rqss[i].text); -+ if (rqss[i].expect == 0) -+ continue; - j = strlen(rqss[i].text) + strlen(rqss[i].expect); - putchp(' '); - for (j++; j < 40; j++) -@@ -600,10 +602,11 @@ - i = read_reports(); - if (i != 'r' && i != 'R') { - *ch = i; -- return; -+ break; - } - } while (i); - -+ /* VT320, VT420, etc. */ - if (terminal_class >= 63) { - do { - i = request_cfss(); -@@ -841,7 +844,7 @@ - bank[j] = ch; - if (ch < ' ' || ch > '/') - break; -- if (j + 1 >= (int) sizeof(bank)) -+ if (j + 2 >= (int) sizeof(bank)) - break; - } - if (j == 1) -diff -Naur ncurses-5.6.orig/tack/output.c ncurses-5.6/tack/output.c ---- ncurses-5.6.orig/tack/output.c 2006-11-26 00:16:49.000000000 +0000 -+++ ncurses-5.6/tack/output.c 2007-05-05 08:11:08.000000000 +0000 -@@ -740,7 +740,9 @@ - /* ignore control S, but tell me about it */ - while (ch == 023 || ch == 021) { - ch = getchp(STRIP_PARITY); -- if (i < (int) sizeof(cc)) -+ if (ch == EOF) -+ break; -+ if (i + 1 < (int) sizeof(cc)) - cc[++i] = ch; - } - put_str("\nThe terminal sent a ^S -"); -@@ -778,7 +780,7 @@ - - for (i = 0; i < length - 1; ) { - ch = getchp(STRIP_PARITY); -- if (ch == '\r' || ch == '\n') { -+ if (ch == '\r' || ch == '\n' || ch == EOF) { - break; - } - if (ch == '\b' || ch == 127) { -diff -Naur ncurses-5.6.orig/test/bs.c ncurses-5.6/test/bs.c ---- ncurses-5.6.orig/test/bs.c 2006-05-20 15:38:52.000000000 +0000 -+++ ncurses-5.6/test/bs.c 2007-05-05 08:11:08.000000000 +0000 -@@ -459,7 +459,7 @@ - do { - c = getch(); - } while -- (!strchr("hjklrR", c) || c == FF); -+ (!(strchr("hjklrR", c) || c == FF)); - - if (c == FF) { - (void) clearok(stdscr, TRUE); -diff -Naur ncurses-5.6.orig/test/cardfile.c ncurses-5.6/test/cardfile.c ---- ncurses-5.6.orig/test/cardfile.c 2006-12-10 00:30:09.000000000 +0000 -+++ ncurses-5.6/test/cardfile.c 2007-05-05 08:11:08.000000000 +0000 -@@ -136,13 +136,15 @@ - if ((offset = strlen(card->content)) != 0) { - total += 1 + offset; - card->content = (char *) realloc(card->content, total + 1); -- strcpy(card->content + offset++, " "); -+ if (card->content) -+ strcpy(card->content + offset++, " "); - } else { - if (card->content != 0) - free(card->content); - card->content = (char *) malloc(total + 1); - } -- strcpy(card->content + offset, content); -+ if (card->content) -+ strcpy(card->content + offset, content); - } - } - -diff -Naur ncurses-5.6.orig/test/demo_defkey.c ncurses-5.6/test/demo_defkey.c ---- ncurses-5.6.orig/test/demo_defkey.c 2006-04-01 19:08:03.000000000 +0000 -+++ ncurses-5.6/test/demo_defkey.c 2007-05-05 08:11:08.000000000 +0000 -@@ -143,13 +143,12 @@ - code_name); - } - log_last_line(win); -+ - if (vis_string != 0) { - free(vis_string); - vis_string = 0; - } - -- if (vis_string != 0) -- free(vis_string); - vis_string = visible(new_string); - if ((rc = key_defined(new_string)) > 0) { - wprintw(win, "%s was bound to %s\n", vis_string, keyname(rc)); diff --git a/pkgs/toolchain/ncurses/patches/ncurses-5.7-coverity_fixes-1.patch b/pkgs/toolchain/ncurses/patches/ncurses-5.7-coverity_fixes-1.patch deleted file mode 100644 index 42232c073..000000000 --- a/pkgs/toolchain/ncurses/patches/ncurses-5.7-coverity_fixes-1.patch +++ /dev/null @@ -1,548 +0,0 @@ -Submitted By: Matt Burgess (matthew at linuxfromscratch dot org) -Date: 2007-05-05 -Initial Package Version: 5.6 -Upstream Status: From Upstream -Origin: ftp://invisible-island.net/ncurses/5.6/ncurses-5.6-coverity.patch.gz -Description: Fixes a number of issues found by the Coverity static code analysis - program. - -diff -Naur ncurses-5.6.orig/NEWS ncurses-5.6/NEWS ---- ncurses-5.6.orig/NEWS 2006-12-17 20:36:26.000000000 +0000 -+++ ncurses-5.6/NEWS 2007-05-05 08:11:08.000000000 +0000 -@@ -45,6 +45,36 @@ - Changes through 1.9.9e did not credit all contributions; - it is not possible to add this information. - -+20060407 -+ > other fixes prompted by inspection for Coverity report: -+ + modify ifdef's for c++ binding to use try/catch/throw statements -+ + add a null-pointer check in tack/ansi.c request_cfss() -+ + fix a memory leak in ncurses/base/wresize.c -+ + corrected check for valid memu/meml capabilities in -+ progs/dump_entry.c when handling V_HPUX case. -+ > fixes based on Coverity report: -+ + remove dead code in test/bs.c -+ + remove dead code in test/demo_defkey.c -+ + remove an unused assignment in progs/infocmp.c -+ + fix a limit check in tack/ansi.c tools_charset() -+ + fix tack/ansi.c tools_status() to perform the VT320/VT420 -+ tests in request_cfss(). The function had exited too soon. -+ + fix a memory leak in tic.c's make_namelist() -+ + fix a couple of places in tack/output.c which did not check for EOF. -+ + fix a loop-condition in test/bs.c -+ + add index checks in lib_color.c for color palettes -+ + add index checks in progs/dump_entry.c for version_filter() handling -+ of V_BSD case. -+ + fix a possible null-pointer dereference in copywin() -+ + fix a possible null-pointer dereference in waddchnstr() -+ + add a null-pointer check in _nc_expand_try() -+ + add a null-pointer check in tic.c's make_namelist() -+ + add a null-pointer check in _nc_expand_try() -+ + add null-pointer checks in test/cardfile.c -+ + fix a double-free in ncurses/tinfo/trim_sgr0.c -+ + fix a double-free in ncurses/base/wresize.c -+ + add try/catch block to c++/cursesmain.cc -+ - 20061217 5.6 release for upload to ftp.gnu.org - - 20061217 -diff -Naur ncurses-5.6.orig/c++/cursesmain.cc ncurses-5.6/c++/cursesmain.cc ---- ncurses-5.6.orig/c++/cursesmain.cc 2003-10-25 14:53:13.000000000 +0000 -+++ ncurses-5.6/c++/cursesmain.cc 2007-05-05 08:11:08.000000000 +0000 -@@ -34,6 +34,13 @@ - #include "internal.h" - #include "cursesapp.h" - -+#if CPP_HAS_TRY_CATCH && HAVE_IOSTREAM -+#include -+#else -+#undef CPP_HAS_TRY_CATCH -+#define CPP_HAS_TRY_CATCH 0 -+#endif -+ - MODULE_ID("$Id: cursesmain.cc,v 1.11 2003/10/25 14:53:13 tom Exp $") - - #if HAVE_LOCALE_H -@@ -58,8 +65,20 @@ - - A->handleArgs(argc,argv); - ::endwin(); -+#if CPP_HAS_TRY_CATCH -+ try { -+ res = (*A)(); -+ ::endwin(); -+ } -+ catch(const NCursesException &e) { -+ ::endwin(); -+ std::cerr << e.message << std::endl; -+ res = e.errorno; -+ } -+#else - res = (*A)(); - ::endwin(); -+#endif - return(res); - } - } -diff -Naur ncurses-5.6.orig/c++/cursesp.h ncurses-5.6/c++/cursesp.h ---- ncurses-5.6.orig/c++/cursesp.h 2005-08-13 18:09:21.000000000 +0000 -+++ ncurses-5.6/c++/cursesp.h 2007-05-05 08:11:08.000000000 +0000 -@@ -83,7 +83,7 @@ - return uptr->m_user; - } - -- void OnError (int err) const THROWS((NCursesPanelException)) -+ void OnError (int err) const THROWS(NCursesPanelException) - { - if (err==ERR) - THROW(new NCursesPanelException (this, err)); -diff -Naur ncurses-5.6.orig/c++/etip.h.in ncurses-5.6/c++/etip.h.in ---- ncurses-5.6.orig/c++/etip.h.in 2005-08-06 19:55:57.000000000 +0000 -+++ ncurses-5.6/c++/etip.h.in 2007-05-05 08:11:08.000000000 +0000 -@@ -342,23 +342,33 @@ - inline void THROW(const NCursesException *e) { - #if defined(__GNUG__) && defined(__EXCEPTIONS) - # if ((__GNUG__ <= 2) && (__GNUC_MINOR__ < 8)) -- (*lib_error_handler)(e?e->classname():"",e?e->message:""); -+ (*lib_error_handler)(e ? e->classname() : "", e ? e->message : ""); - #else -- throw *e; -+#define CPP_HAS_TRY_CATCH 1 - #endif - #elif defined(__SUNPRO_CC) - # if !defined(__SUNPRO_CC_COMPAT) || (__SUNPRO_CC_COMPAT < 5) - genericerror(1, ((e != 0) ? (char *)(e->message) : "")); - #else -- throw *e; -+#define CPP_HAS_TRY_CATCH 1 - #endif - #else - if (e) - cerr << e->message << endl; - exit(0); - #endif --} - --#define THROWS(s) -+#ifndef CPP_HAS_TRY_CATCH -+#define CPP_HAS_TRY_CATCH 0 -+#define NCURSES_CPP_TRY /* nothing */ -+#define NCURSES_CPP_CATCH(e) if (false) -+#define THROWS(s) /* nothing */ -+#elif CPP_HAS_TRY_CATCH -+ throw *e; -+#define NCURSES_CPP_TRY try -+#define NCURSES_CPP_CATCH(e) catch(e) -+#define THROWS(s) throw(s) -+#endif -+} - - #endif /* NCURSES_ETIP_H_incl */ -diff -Naur ncurses-5.6.orig/configure ncurses-5.6/configure ---- ncurses-5.6.orig/configure 2006-12-17 16:33:38.000000000 +0000 -+++ ncurses-5.6/configure 2007-05-05 08:11:08.000000000 +0000 -@@ -13865,7 +13865,7 @@ - ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - ac_main_return=return - --for ac_header in typeinfo -+for ac_header in iostream typeinfo - do - as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` - echo "$as_me:13871: checking for $ac_header" >&5 -diff -Naur ncurses-5.6.orig/configure.in ncurses-5.6/configure.in ---- ncurses-5.6.orig/configure.in 2006-12-17 01:26:06.000000000 +0000 -+++ ncurses-5.6/configure.in 2007-05-05 08:11:08.000000000 +0000 -@@ -1200,7 +1200,7 @@ - ;; - esac - -- AC_CHECK_HEADERS(typeinfo) -+ AC_CHECK_HEADERS(iostream typeinfo) - - CF_BOOL_DECL - CF_BOOL_SIZE -diff -Naur ncurses-5.6.orig/include/ncurses_defs ncurses-5.6/include/ncurses_defs ---- ncurses-5.6.orig/include/ncurses_defs 2006-08-05 19:27:02.000000000 +0000 -+++ ncurses-5.6/include/ncurses_defs 2007-05-05 08:11:08.000000000 +0000 -@@ -68,6 +68,7 @@ - HAVE_GPP_BUILTIN_H - HAVE_GXX_BUILTIN_H - HAVE_HAS_KEY -+HAVE_IOSTREAM - HAVE_ISASCII - HAVE_ISSETUGID - HAVE_LANGINFO_CODESET -diff -Naur ncurses-5.6.orig/ncurses/base/lib_addstr.c ncurses-5.6/ncurses/base/lib_addstr.c ---- ncurses-5.6.orig/ncurses/base/lib_addstr.c 2006-05-27 19:22:19.000000000 +0000 -+++ ncurses-5.6/ncurses/base/lib_addstr.c 2007-05-05 08:11:08.000000000 +0000 -@@ -80,8 +80,7 @@ - NCURSES_EXPORT(int) - waddchnstr(WINDOW *win, const chtype *astr, int n) - { -- NCURSES_SIZE_T y = win->_cury; -- NCURSES_SIZE_T x = win->_curx; -+ NCURSES_SIZE_T y, x; - int code = OK; - int i; - struct ldat *line; -@@ -91,6 +90,8 @@ - if (!win) - returnCode(ERR); - -+ y = win->_cury; -+ x = win->_curx; - if (n < 0) { - const chtype *str; - n = 0; -diff -Naur ncurses-5.6.orig/ncurses/base/lib_color.c ncurses-5.6/ncurses/base/lib_color.c ---- ncurses-5.6.orig/ncurses/base/lib_color.c 2006-11-26 01:33:16.000000000 +0000 -+++ ncurses-5.6/ncurses/base/lib_color.c 2007-05-05 08:11:08.000000000 +0000 -@@ -56,7 +56,10 @@ - - #define TYPE_CALLOC(type,elts) typeCalloc(type, (unsigned)(elts)) - -+#define MAX_PALETTE 8 -+ - #define OkColorHi(n) (((n) < COLORS) && ((n) < max_colors)) -+#define InPalette(n) ((n) >= 0 && (n) < MAX_PALETTE) - - /* - * Given a RGB range of 0..1000, we'll normally set the individual values -@@ -162,10 +165,10 @@ - - tp = (hue_lightness_saturation) ? hls_palette : cga_palette; - for (n = 0; n < COLORS; n++) { -- if (n < 8) { -+ if (InPalette(n)) { - SP->_color_table[n] = tp[n]; - } else { -- SP->_color_table[n] = tp[n % 8]; -+ SP->_color_table[n] = tp[n % MAX_PALETTE]; - if (hue_lightness_saturation) { - SP->_color_table[n].green = 100; - } else { -@@ -365,7 +368,7 @@ - if (GET_SCREEN_PAIR(SP) == pair) - SET_SCREEN_PAIR(SP, (chtype) (~0)); /* force attribute update */ - -- if (initialize_pair) { -+ if (initialize_pair && InPalette(f) && InPalette(b)) { - const color_t *tp = hue_lightness_saturation ? hls_palette : cga_palette; - - T(("initializing pair: pair = %d, fg=(%d,%d,%d), bg=(%d,%d,%d)", -diff -Naur ncurses-5.6.orig/ncurses/base/lib_overlay.c ncurses-5.6/ncurses/base/lib_overlay.c ---- ncurses-5.6.orig/ncurses/base/lib_overlay.c 2006-10-14 20:43:31.000000000 +0000 -+++ ncurses-5.6/ncurses/base/lib_overlay.c 2007-05-05 08:11:08.000000000 +0000 -@@ -139,8 +139,8 @@ - { - int sx, sy, dx, dy; - bool touched; -- attr_t bk = AttrOf(dst->_nc_bkgd); -- attr_t mask = ~(attr_t) ((bk & A_COLOR) ? A_COLOR : 0); -+ attr_t bk; -+ attr_t mask; - - T((T_CALLED("copywin(%p, %p, %d, %d, %d, %d, %d, %d, %d)"), - src, dst, sminrow, smincol, dminrow, dmincol, dmaxrow, dmaxcol, over)); -@@ -148,6 +148,9 @@ - if (!src || !dst) - returnCode(ERR); - -+ bk = AttrOf(dst->_nc_bkgd); -+ mask = ~(attr_t) ((bk & A_COLOR) ? A_COLOR : 0); -+ - /* make sure rectangle exists in source */ - if ((sminrow + dmaxrow - dminrow) > (src->_maxy + 1) || - (smincol + dmaxcol - dmincol) > (src->_maxx + 1)) { -diff -Naur ncurses-5.6.orig/ncurses/base/tries.c ncurses-5.6/ncurses/base/tries.c ---- ncurses-5.6.orig/ncurses/base/tries.c 2005-11-26 20:09:18.000000000 +0000 -+++ ncurses-5.6/ncurses/base/tries.c 2007-05-05 08:11:08.000000000 +0000 -@@ -68,7 +68,7 @@ - } - } - if (result != 0) { -- if ((result[len] = ptr->ch) == 0) -+ if (ptr != 0 && (result[len] = ptr->ch) == 0) - *((unsigned char *) (result + len)) = 128; - #ifdef TRACE - if (len == 0 && _nc_tracing != 0) -diff -Naur ncurses-5.6.orig/ncurses/base/wresize.c ncurses-5.6/ncurses/base/wresize.c ---- ncurses-5.6.orig/ncurses/base/wresize.c 2006-10-14 20:43:31.000000000 +0000 -+++ ncurses-5.6/ncurses/base/wresize.c 2007-05-05 08:11:08.000000000 +0000 -@@ -38,7 +38,7 @@ - cleanup_lines(struct ldat *data, int length) - { - while (--length >= 0) -- free(data->text); -+ free(data[length].text); - free(data); - return ERR; - } -diff -Naur ncurses-5.6.orig/ncurses/tinfo/trim_sgr0.c ncurses-5.6/ncurses/tinfo/trim_sgr0.c ---- ncurses-5.6.orig/ncurses/tinfo/trim_sgr0.c 2006-12-02 19:37:57.000000000 +0000 -+++ ncurses-5.6/ncurses/tinfo/trim_sgr0.c 2007-05-05 08:11:08.000000000 +0000 -@@ -247,9 +247,7 @@ - if (!rewrite_sgr(on, enter_alt_charset_mode) - || !rewrite_sgr(off, exit_alt_charset_mode) - || !rewrite_sgr(end, exit_alt_charset_mode)) { -- FreeIfNeeded(on); - FreeIfNeeded(off); -- FreeIfNeeded(end); - } else if (similar_sgr(off, end) - && !similar_sgr(off, on)) { - TR(TRACE_DATABASE, ("adjusting sgr(9:off) : %s", _nc_visbuf(off))); -@@ -315,8 +313,8 @@ - */ - free(off); - } -- free(end); -- free(on); -+ FreeIfNeeded(end); -+ FreeIfNeeded(on); - } else { - /* - * Possibly some applications are confused if sgr0 contains rmacs, -diff -Naur ncurses-5.6.orig/progs/dump_entry.c ncurses-5.6/progs/dump_entry.c ---- ncurses-5.6.orig/progs/dump_entry.c 2006-09-30 20:18:15.000000000 +0000 -+++ ncurses-5.6/progs/dump_entry.c 2007-05-05 08:11:08.000000000 +0000 -@@ -352,14 +352,17 @@ - } - break; - -+#define is_termcap(type) (idx < (int) sizeof(type##_from_termcap) && \ -+ type##_from_termcap[idx]) -+ - case V_BSD: /* BSD */ - switch (type) { - case BOOLEAN: -- return bool_from_termcap[idx]; -+ return is_termcap(bool); - case NUMBER: -- return num_from_termcap[idx]; -+ return is_termcap(num); - case STRING: -- return str_from_termcap[idx]; -+ return is_termcap(str); - } - break; - } -@@ -788,11 +791,11 @@ - * Much more work should be done on this to support dumping termcaps. - */ - if (tversion == V_HPUX) { -- if (memory_lock) { -+ if (VALID_STRING(memory_lock)) { - (void) sprintf(buffer, "meml=%s", memory_lock); - WRAP_CONCAT; - } -- if (memory_unlock) { -+ if (VALID_STRING(memory_unlock)) { - (void) sprintf(buffer, "memu=%s", memory_unlock); - WRAP_CONCAT; - } -diff -Naur ncurses-5.6.orig/progs/infocmp.c ncurses-5.6/progs/infocmp.c ---- ncurses-5.6.orig/progs/infocmp.c 2006-08-19 21:20:37.000000000 +0000 -+++ ncurses-5.6/progs/infocmp.c 2007-05-05 08:11:08.000000000 +0000 -@@ -1083,7 +1083,6 @@ - } - *tp++ = '"'; - *tp = '\0'; -- size += (strlen(term->Strings[n]) + 1); - (void) printf("static char %-20s[] = %s;\n", - string_variable(ExtStrname(term, n, strnames)), buf); - } -diff -Naur ncurses-5.6.orig/progs/tic.c ncurses-5.6/progs/tic.c ---- ncurses-5.6.orig/progs/tic.c 2006-12-02 22:13:17.000000000 +0000 -+++ ncurses-5.6/progs/tic.c 2007-05-05 08:11:08.000000000 +0000 -@@ -353,11 +353,24 @@ - return fp; - } - -+#if NO_LEAKS -+static void -+free_namelist(char **src) -+{ -+ if (src != 0) { -+ int n; -+ for (n = 0; src[n] != 0; ++n) -+ free (src[n]); -+ free (src); -+ } -+} -+#endif -+ - /* Parse the "-e" option-value into a list of names */ --static const char ** -+static char ** - make_namelist(char *src) - { -- const char **dst = 0; -+ char **dst = 0; - - char *s, *base; - unsigned pass, n, nn; -@@ -374,11 +387,13 @@ - if ((s = stripped(buffer)) != 0) { - if (dst != 0) - dst[nn] = s; -+ else -+ free(s); - nn++; - } - } - if (pass == 1) { -- dst = typeCalloc(const char *, nn + 1); -+ dst = typeCalloc(char *, nn + 1); - rewind(fp); - } - } -@@ -401,10 +416,10 @@ - break; - } - if (pass == 1) -- dst = typeCalloc(const char *, nn + 1); -+ dst = typeCalloc(char *, nn + 1); - } - } -- if (showsummary) { -+ if (showsummary && (dst != 0)) { - fprintf(log_fp, "Entries that will be compiled:\n"); - for (n = 0; dst[n] != 0; n++) - fprintf(log_fp, "%u:%s\n", n + 1, dst[n]); -@@ -413,7 +428,7 @@ - } - - static bool --matches(const char **needle, const char *haystack) -+matches(char **needle, const char *haystack) - /* does entry in needle list match |-separated field in haystack? */ - { - bool code = FALSE; -@@ -468,7 +483,7 @@ - bool limited = TRUE; - char *tversion = (char *) NULL; - const char *source_file = "terminfo"; -- const char **namelst = 0; -+ char **namelst = 0; - char *outdir = (char *) NULL; - bool check_only = FALSE; - bool suppress_untranslatable = FALSE; -@@ -784,6 +799,9 @@ - else - fprintf(log_fp, "No entries written\n"); - } -+#if NO_LEAKS -+ free_namelist(namelst); -+#endif - cleanup(); - ExitProgram(EXIT_SUCCESS); - } -diff -Naur ncurses-5.6.orig/tack/ansi.c ncurses-5.6/tack/ansi.c ---- ncurses-5.6.orig/tack/ansi.c 2005-09-17 19:49:16.000000000 +0000 -+++ ncurses-5.6/tack/ansi.c 2007-05-05 08:11:08.000000000 +0000 -@@ -309,6 +309,8 @@ - put_crlf(); - for (i = 0; rqss[i].text; i++) { - ptext(rqss[i].text); -+ if (rqss[i].expect == 0) -+ continue; - j = strlen(rqss[i].text) + strlen(rqss[i].expect); - putchp(' '); - for (j++; j < 40; j++) -@@ -600,10 +602,11 @@ - i = read_reports(); - if (i != 'r' && i != 'R') { - *ch = i; -- return; -+ break; - } - } while (i); - -+ /* VT320, VT420, etc. */ - if (terminal_class >= 63) { - do { - i = request_cfss(); -@@ -841,7 +844,7 @@ - bank[j] = ch; - if (ch < ' ' || ch > '/') - break; -- if (j + 1 >= (int) sizeof(bank)) -+ if (j + 2 >= (int) sizeof(bank)) - break; - } - if (j == 1) -diff -Naur ncurses-5.6.orig/tack/output.c ncurses-5.6/tack/output.c ---- ncurses-5.6.orig/tack/output.c 2006-11-26 00:16:49.000000000 +0000 -+++ ncurses-5.6/tack/output.c 2007-05-05 08:11:08.000000000 +0000 -@@ -740,7 +740,9 @@ - /* ignore control S, but tell me about it */ - while (ch == 023 || ch == 021) { - ch = getchp(STRIP_PARITY); -- if (i < (int) sizeof(cc)) -+ if (ch == EOF) -+ break; -+ if (i + 1 < (int) sizeof(cc)) - cc[++i] = ch; - } - put_str("\nThe terminal sent a ^S -"); -@@ -778,7 +780,7 @@ - - for (i = 0; i < length - 1; ) { - ch = getchp(STRIP_PARITY); -- if (ch == '\r' || ch == '\n') { -+ if (ch == '\r' || ch == '\n' || ch == EOF) { - break; - } - if (ch == '\b' || ch == 127) { -diff -Naur ncurses-5.6.orig/test/bs.c ncurses-5.6/test/bs.c ---- ncurses-5.6.orig/test/bs.c 2006-05-20 15:38:52.000000000 +0000 -+++ ncurses-5.6/test/bs.c 2007-05-05 08:11:08.000000000 +0000 -@@ -459,7 +459,7 @@ - do { - c = getch(); - } while -- (!strchr("hjklrR", c) || c == FF); -+ (!(strchr("hjklrR", c) || c == FF)); - - if (c == FF) { - (void) clearok(stdscr, TRUE); -diff -Naur ncurses-5.6.orig/test/cardfile.c ncurses-5.6/test/cardfile.c ---- ncurses-5.6.orig/test/cardfile.c 2006-12-10 00:30:09.000000000 +0000 -+++ ncurses-5.6/test/cardfile.c 2007-05-05 08:11:08.000000000 +0000 -@@ -136,13 +136,15 @@ - if ((offset = strlen(card->content)) != 0) { - total += 1 + offset; - card->content = (char *) realloc(card->content, total + 1); -- strcpy(card->content + offset++, " "); -+ if (card->content) -+ strcpy(card->content + offset++, " "); - } else { - if (card->content != 0) - free(card->content); - card->content = (char *) malloc(total + 1); - } -- strcpy(card->content + offset, content); -+ if (card->content) -+ strcpy(card->content + offset, content); - } - } - -diff -Naur ncurses-5.6.orig/test/demo_defkey.c ncurses-5.6/test/demo_defkey.c ---- ncurses-5.6.orig/test/demo_defkey.c 2006-04-01 19:08:03.000000000 +0000 -+++ ncurses-5.6/test/demo_defkey.c 2007-05-05 08:11:08.000000000 +0000 -@@ -143,13 +143,12 @@ - code_name); - } - log_last_line(win); -+ - if (vis_string != 0) { - free(vis_string); - vis_string = 0; - } - -- if (vis_string != 0) -- free(vis_string); - vis_string = visible(new_string); - if ((rc = key_defined(new_string)) > 0) { - wprintw(win, "%s was bound to %s\n", vis_string, keyname(rc));