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:
parent
fa92f0c447
commit
9226cf3254
1 changed files with 11 additions and 3 deletions
|
@ -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 ();
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue