emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] emacs-26 9226cf3: Fix bug in recent styled_format change


From: Paul Eggert
Subject: [Emacs-diffs] emacs-26 9226cf3: Fix bug in recent styled_format change
Date: Fri, 6 Oct 2017 13:33:58 -0400 (EDT)

branch: emacs-26
commit 9226cf325421a168b42bd27abf5e171e877b48b9
Author: Paul Eggert <address@hidden>
Commit: Paul Eggert <address@hidden>

    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:address@hidden entitled "Avoid some
    unnecessary copying in Fformat etc."
---
 src/editfns.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/editfns.c b/src/editfns.c
index d88a913..e65bd34 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -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
      must consider such a situation or not.  */
   bool maybe_combine_byte;
+  Lisp_Object val;
   bool arg_intervals = false;
   USE_SAFE_ALLOCA;
   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
                  && ! string_intervals (args[0]))
-               return arg;
+               {
+                 val = arg;
+                 goto return_val;
+               }
 
              /* handle case (precision[n] >= 0) */
 
@@ -4862,11 +4866,14 @@ styled_format (ptrdiff_t nargs, Lisp_Object *args, bool 
message)
     emacs_abort ();
 
   if (! new_result)
-    return args[0];
+    {
+      val = args[0];
+      goto return_val;
+    }
 
   if (maybe_combine_byte)
     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
      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.  */
   SAFE_FREE ();
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]