emacs-diffs
[Top][All Lists]
Advanced

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

master c2cd8e6: Fix byte-counting error in ‘format’


From: Paul Eggert
Subject: master c2cd8e6: Fix byte-counting error in ‘format’
Date: Thu, 14 Nov 2019 17:44:46 -0500 (EST)

branch: master
commit c2cd8e6265b78a5f0be3335ea6d8868e80814db0
Author: Paul Eggert <address@hidden>
Commit: Paul Eggert <address@hidden>

    Fix byte-counting error in ‘format’
    
    Problem reported by Paul Pogonyshev (Bug#38191).
    * src/editfns.c (styled_format): When checking for adjacent
    %-sequences, use byte position rather than character position.
    * test/src/editfns-tests.el (format-properties): Test for fix.
---
 src/editfns.c             | 6 +++---
 test/src/editfns-tests.el | 4 ++++
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/editfns.c b/src/editfns.c
index 1b33f39..8fc866d 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -3143,7 +3143,7 @@ styled_format (ptrdiff_t nargs, Lisp_Object *args, bool 
message)
     /* The start and end bytepos in the output string.  */
     ptrdiff_t start, end;
 
-    /* The start of the spec in the format string.  */
+    /* The start bytepos of the spec in the format string.  */
     ptrdiff_t fbeg;
 
     /* Whether the argument is a string with intervals.  */
@@ -3954,7 +3954,7 @@ styled_format (ptrdiff_t nargs, Lisp_Object *args, bool 
message)
                    {
                      position++;
                      if (fieldn < nspec
-                         && position > info[fieldn].fbeg
+                         && bytepos >= info[fieldn].fbeg
                          && translated == info[fieldn].start)
                        {
                          translated += info[fieldn].end - info[fieldn].start;
@@ -3976,7 +3976,7 @@ styled_format (ptrdiff_t nargs, Lisp_Object *args, bool 
message)
                    {
                      position++;
                      if (fieldn < nspec
-                         && position > info[fieldn].fbeg
+                         && bytepos >= info[fieldn].fbeg
                          && translated == info[fieldn].start)
                        {
                          translated += info[fieldn].end - info[fieldn].start;
diff --git a/test/src/editfns-tests.el b/test/src/editfns-tests.el
index a106080..238fb40 100644
--- a/test/src/editfns-tests.el
+++ b/test/src/editfns-tests.el
@@ -90,6 +90,10 @@
                                    (propertize "45" 'face 'italic)))
            #("012345    "
              0 2 (face bold) 2 4 (face underline) 4 10 (face italic))))
+  ;; Bug #38191
+  (should (ert-equal-including-properties
+           (format (propertize "‘foo’ %s bar" 'face 'bold) "xxx")
+           #("‘foo’ xxx bar" 0 13 (face bold))))
   ;; Bug #32404
   (should (ert-equal-including-properties
            (format (concat (propertize "%s" 'face 'bold)



reply via email to

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