File ncurses-5.9-bsc1115929.patch of Package ncurses.28806
For bug bsc#1115929 port back null pointer checks
to catch e.g. the crash in _nc_parse_entry()
Note: do not apply check in form_driver() as ncurses 5.9
does not know about move_after_insert.
|--- form/frm_driver.c
|+++ form/frm_driver.c 2018-11-20 09:46:26.195713565 +0000
|@@ -4293,7 +4293,7 @@ form_driver(FORM *form, int c)
| if (!form)
| RETURN(E_BAD_ARGUMENT);
|
|- if (!(form->field))
|+ if (!(form->field) || !(form->current))
| RETURN(E_NOT_CONNECTED);
|
| assert(form->page);
--- ncurses/base/safe_sprintf.c
+++ ncurses/base/safe_sprintf.c 2018-11-20 09:48:24.221186714 +0000
@@ -224,7 +224,7 @@ NCURSES_SP_NAME(_nc_printf_string) (NCUR
{
char *result = 0;
- if (fmt != 0) {
+ if (SP_PARM != 0 && fmt != 0) {
#if USE_SAFE_SPRINTF
va_list ap2;
int len;
--- ncurses/tinfo/comp_parse.c
+++ ncurses/tinfo/comp_parse.c 2018-11-20 09:38:48.206001951 +0000
@@ -319,6 +319,9 @@ _nc_resolve_uses2(bool fullresolve, bool
char *lookfor = qp->uses[i].name;
long lookline = qp->uses[i].line;
+ if (lookfor == 0)
+ continue;
+
foundit = FALSE;
_nc_set_type(child);
@@ -396,7 +399,8 @@ _nc_resolve_uses2(bool fullresolve, bool
* subsequent pass.
*/
for (i = 0; i < qp->nuses; i++)
- if (qp->uses[i].link->nuses) {
+ if (qp->uses[i].link
+ && qp->uses[i].link->nuses) {
DEBUG(2, ("%s: use entry %d unresolved",
_nc_first_name(qp->tterm.term_names), i));
goto incomplete;
--- ncurses/tinfo/parse_entry.c
+++ ncurses/tinfo/parse_entry.c 2018-11-20 09:42:59.245131721 +0000
@@ -536,7 +536,8 @@ _nc_parse_entry(struct entry *entryp, in
* have picked up defaults via translation.
*/
for (i = 0; i < entryp->nuses; i++)
- if (!strchr((char *) entryp->uses[i].name, '+'))
+ if (entryp->uses[i].name != 0
+ && !strchr((char *) entryp->uses[i].name, '+'))
has_base_entry = TRUE;
postprocess_termcap(&entryp->tterm, has_base_entry);