Fix bug in recent styled_format change

Problem reported by Kaushal Modi in:
http://lists.gnu.org/archive/html/emacs-devel/2017-10/msg00141.html
* src/editfns.c (styled_format): Fix bug where USE_SAFE_ALLOCA was
not always followed by SAFE_FREE.  This bug was introduced in my
patch 2017-09-26T23:31:57Z!eggert@cs.ucla.edu entitled "Avoid some
unnecessary copying in Fformat etc."
This commit is contained in:
Paul Eggert 2017-10-06 10:32:46 -07:00
parent fa92f0c447
commit 9226cf3254

View file

@ -4179,6 +4179,7 @@ styled_format (ptrdiff_t nargs, Lisp_Object *args, bool message)
multibyte character of the previous string. This flag tells if we multibyte character of the previous string. This flag tells if we
must consider such a situation or not. */ must consider such a situation or not. */
bool maybe_combine_byte; bool maybe_combine_byte;
Lisp_Object val;
bool arg_intervals = false; bool arg_intervals = false;
USE_SAFE_ALLOCA; USE_SAFE_ALLOCA;
sa_avail -= sizeof initial_buffer; sa_avail -= sizeof initial_buffer;
@ -4417,7 +4418,10 @@ styled_format (ptrdiff_t nargs, Lisp_Object *args, bool message)
{ {
if (format == end && format - format_start == 2 if (format == end && format - format_start == 2
&& ! string_intervals (args[0])) && ! string_intervals (args[0]))
return arg; {
val = arg;
goto return_val;
}
/* handle case (precision[n] >= 0) */ /* handle case (precision[n] >= 0) */
@ -4862,11 +4866,14 @@ styled_format (ptrdiff_t nargs, Lisp_Object *args, bool message)
emacs_abort (); emacs_abort ();
if (! new_result) if (! new_result)
return args[0]; {
val = args[0];
goto return_val;
}
if (maybe_combine_byte) if (maybe_combine_byte)
nchars = multibyte_chars_in_text ((unsigned char *) buf, p - buf); nchars = multibyte_chars_in_text ((unsigned char *) buf, p - buf);
Lisp_Object val = make_specified_string (buf, nchars, p - buf, multibyte); val = make_specified_string (buf, nchars, p - buf, multibyte);
/* If the format string has text properties, or any of the string /* If the format string has text properties, or any of the string
arguments has text properties, set up text properties of the arguments has text properties, set up text properties of the
@ -4964,6 +4971,7 @@ styled_format (ptrdiff_t nargs, Lisp_Object *args, bool message)
} }
} }
return_val:
/* If we allocated BUF or INFO with malloc, free it too. */ /* If we allocated BUF or INFO with malloc, free it too. */
SAFE_FREE (); SAFE_FREE ();