Mercurial > emacs
changeset 110482:99986de658d5
src/w32.c (get_emacs_configuration_options): Fix buffer overrun.
author | Juanma Barranquero <lekktu@gmail.com> |
---|---|
date | Wed, 22 Sep 2010 19:31:21 +0200 |
parents | c845917f5ca3 |
children | 2892adf3a65b |
files | src/ChangeLog src/w32.c |
diffstat | 2 files changed, 35 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ChangeLog Wed Sep 22 19:26:02 2010 +0200 +++ b/src/ChangeLog Wed Sep 22 19:31:21 2010 +0200 @@ -1,3 +1,8 @@ +2010-09-22 Juanma Barranquero <lekktu@gmail.com> + Eli Zaretskii <eliz@gnu.org> + + * w32.c (get_emacs_configuration_options): Fix buffer overrun. + 2010-09-22 Eli Zaretskii <eliz@gnu.org> * minibuf.c (Fminibuffer_contents)
--- a/src/w32.c Wed Sep 22 19:26:02 2010 +0200 +++ b/src/w32.c Wed Sep 22 19:31:21 2010 +0200 @@ -1925,7 +1925,25 @@ char * get_emacs_configuration_options (void) { - static char options_buffer[256]; + static char *options_buffer; + char cv[32]; /* Enough for COMPILER_VERSION. */ + char *options[] = { + cv, /* To be filled later. */ +#ifdef EMACSDEBUG + " --no-opt", +#endif + /* configure.bat already sets USER_CFLAGS and USER_LDFLAGS + with a starting space to save work here. */ +#ifdef USER_CFLAGS + " --cflags", USER_CFLAGS, +#endif +#ifdef USER_LDFLAGS + " --ldflags", USER_LDFLAGS, +#endif + NULL + }; + size_t size = 0; + int i; /* Work out the effective configure options for this build. */ #ifdef _MSC_VER @@ -1938,18 +1956,17 @@ #endif #endif - sprintf (options_buffer, COMPILER_VERSION); -#ifdef EMACSDEBUG - strcat (options_buffer, " --no-opt"); -#endif -#ifdef USER_CFLAGS - strcat (options_buffer, " --cflags"); - strcat (options_buffer, USER_CFLAGS); -#endif -#ifdef USER_LDFLAGS - strcat (options_buffer, " --ldflags"); - strcat (options_buffer, USER_LDFLAGS); -#endif + if (_snprintf (cv, sizeof (cv), COMPILER_VERSION) < 0) + return "Error: not enough space for compiler version"; + + for (i = 0; options[i]; i++) + size += strlen (options[i]); + + options_buffer = xmalloc (size + 1); + + for (i = 0; options[i]; i++) + strcat (options_buffer, options[i]); + return options_buffer; }