* minibuf.c (read_minibuf_noninteractive): Use ptrdiff_t, not int,

for sizes.  Check for string overflow more accurately.
Simplify newline removal at end; this suppresses a GCC 4.6.0 warning.
This commit is contained in:
Paul Eggert 2011-06-22 23:45:38 -07:00
parent 6d84508d18
commit 90532f02fd
2 changed files with 10 additions and 8 deletions

View file

@ -1,5 +1,9 @@
2011-06-23 Paul Eggert <eggert@cs.ucla.edu>
* minibuf.c (read_minibuf_noninteractive): Use ptrdiff_t, not int,
for sizes. Check for string overflow more accurately.
Simplify newline removal at end; this suppresses a GCC 4.6.0 warning.
* macros.c: Integer and buffer overflow fixes.
* keyboard.h (struct keyboard.kbd_macro_bufsize):
* macros.c (Fstart_kbd_macro, store_kbd_macro_char):

View file

@ -237,7 +237,7 @@ read_minibuf_noninteractive (Lisp_Object map, Lisp_Object initial,
Lisp_Object defalt,
int allow_props, int inherit_input_method)
{
size_t size, len;
ptrdiff_t size, len;
char *line, *s;
Lisp_Object val;
@ -247,12 +247,12 @@ read_minibuf_noninteractive (Lisp_Object map, Lisp_Object initial,
val = Qnil;
size = 100;
len = 0;
line = (char *) xmalloc (size * sizeof *line);
line = (char *) xmalloc (size);
while ((s = fgets (line + len, size - len, stdin)) != NULL
&& (len = strlen (line),
len == size - 1 && line[len - 1] != '\n'))
{
if ((size_t) -1 / 2 < size)
if (STRING_BYTES_BOUND / 2 < size)
memory_full (SIZE_MAX);
size *= 2;
line = (char *) xrealloc (line, size);
@ -260,11 +260,9 @@ read_minibuf_noninteractive (Lisp_Object map, Lisp_Object initial,
if (s)
{
len = strlen (line);
if (len > 0 && line[len - 1] == '\n')
line[--len] = '\0';
char *nl = strchr (line, '\n');
if (nl)
*nl = '\0';
val = build_string (line);
xfree (line);
}