ncurses 6.1 - patch 20200118
[ncurses.git] / ncurses / tinfo / comp_scan.c
index 36674c4bb6b6e4555215bdb1afdcad3b56a12fed..b2072577a49989c50d5922e2dbf51659a6e85d3a 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
- * Copyright (c) 1998-2013,2016 Free Software Foundation, Inc.              *
+ * Copyright (c) 1998-2016,2017 Free Software Foundation, Inc.              *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
@@ -50,7 +50,7 @@
 #include <ctype.h>
 #include <tic.h>
 
-MODULE_ID("$Id: comp_scan.c,v 1.103 2016/05/28 23:22:52 tom Exp $")
+MODULE_ID("$Id: comp_scan.c,v 1.108 2017/08/25 22:57:21 tom Exp $")
 
 /*
  * Maximum length of string capability we'll accept before raising an error.
@@ -168,6 +168,8 @@ next_char(void)
        if (result != 0) {
            FreeAndNull(result);
            FreeAndNull(pushname);
+           bufptr = 0;
+           bufstart = 0;
            allocated = 0;
        }
        /*
@@ -222,6 +224,8 @@ next_char(void)
                }
                if ((bufptr = bufstart) != 0) {
                    used = strlen(bufptr);
+                   if (used == 0)
+                       return (EOF);
                    while (iswhite(*bufptr)) {
                        if (*bufptr == '\t') {
                            _nc_curr_col = (_nc_curr_col | 7) + 1;
@@ -668,7 +672,15 @@ _nc_get_token(bool silent)
                    if (numchk == numbuf)
                        _nc_warning("no value given for `%s'", tok_buf);
                    if ((*numchk != '\0') || (ch != separator))
-                       _nc_warning("Missing separator");
+                       _nc_warning("Missing separator for `%s'", tok_buf);
+                   if (number < 0)
+                       _nc_warning("value of `%s' cannot be negative", tok_buf);
+                   if (number > MAX_OF_TYPE(NCURSES_INT2)) {
+                       _nc_warning("limiting value of `%s' from %#lx to %#x",
+                                   tok_buf,
+                                   number, MAX_OF_TYPE(NCURSES_INT2));
+                       number = MAX_OF_TYPE(NCURSES_INT2);
+                   }
                }
                _nc_curr_token.tk_name = tok_buf;
                _nc_curr_token.tk_valnumber = (int) number;
@@ -809,8 +821,6 @@ _nc_trans_string(char *ptr, char *last)
            }
            if (c == '?' && (_nc_syntax != SYN_TERMCAP)) {
                *(ptr++) = '\177';
-               if (_nc_tracing)
-                   _nc_warning("Allow ^? as synonym for \\177");
            } else {
                if ((c &= 037) == 0)
                    c = 128;
@@ -823,8 +833,6 @@ _nc_trans_string(char *ptr, char *last)
            if (c == EOF)
                _nc_err_abort(MSG_NO_INPUTS);
 
-#define isoctal(c) ((c) >= '0' && (c) <= '7')
-
            if (isoctal(c) || (strict_bsd && isdigit(c))) {
                number = c - '0';
                for (i = 0; i < 2; i++) {