From 90532f02fdde568772852dc53be37d36855ef391 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 22 Jun 2011 23:45:38 -0700 Subject: [PATCH] * 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. --- src/ChangeLog | 4 ++++ src/minibuf.c | 14 ++++++-------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index c3eaaa4ff2..1be34fdbfe 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,9 @@ 2011-06-23 Paul Eggert + * 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): diff --git a/src/minibuf.c b/src/minibuf.c index ca2f22df9e..2b5e94ad35 100644 --- a/src/minibuf.c +++ b/src/minibuf.c @@ -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); } -- 2.20.1