VM

Labels in virtual folders

Bug #1097442 reported by Uday Reddy on 2013-01-08
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
VM
Medium
Uday Reddy

Bug Description

Julian Bradfield reports (viewmail-info, 2013-01-18):

This bug happens in the 8.2.x branch.

Create a folder (say /tmp/I) containing a single message.
Visit the folder, and add the label "a" to the message.
Quit the folder.

Now do
(setq vm-virtual-folder-alist
      '(
 ("V" (("/tmp/I") (any)))))

Visit the virtual folder V.
Add the label "b" to the message.
The summary mode line will show the message as having labels "a" and
"b", as expected; but in fact the message has only the new label "b".
To see this, save the folder, quit, and re-visit the real folder (or
the virtual folder).

The thing that happened this morning was that I spent so long staring
at one line in the debugger that the flush timer fired while I was
doing so, which magically made the bug not happen.

The following patch appears to fix the bug:

*** vm-undo.el 2012/11/26 15:09:10 1.1
--- vm-undo.el 2013/01/08 08:27:02 1.2
***************
*** 597,603 ****
        (vm-set-labels-of m labels)
        (vm-set-label-string-of m nil)
        (vm-mark-for-summary-update m)
! (if (eq vm-flush-interval t)
     (vm-stuff-virtual-message-data m)
   (vm-set-stuff-flag-of m t))))))

--- 597,604 ----
        (vm-set-labels-of m labels)
        (vm-set-label-string-of m nil)
        (vm-mark-for-summary-update m)
! ;; deferring stuffing breaks labels in virtual folders
! (if t ;(eq vm-flush-interval t)
     (vm-stuff-virtual-message-data m)
   (vm-set-stuff-flag-of m t))))))

This does raise the question in my mind as to whether the other
similarly deferred uses of vm-stuff-virtual-message-data are
dangerous.

Uday Reddy (reddyuday) wrote :

Confirmed that this bug is present in the 8.2.x branch, but not the trunk.
It is either fixed in the trunk or perhaps became harder to reproduce. So,
I will have to investigate why it is happening in the 8.2.x branch.

Uday Reddy (reddyuday) wrote :

Julian Bradfield reports:

After another two hours with edebug, the real problem turns out to be
very simple (but a pig to find):

*** vm-summary.el 2012/06/13 17:49:27 1.2
--- vm-summary.el 2013/01/09 10:55:24 1.3
***************
*** 1716,1722 ****
    (or (vm-label-string-of m)
        (vm-set-label-string-of
         m
! (mapconcat 'identity (sort (vm-labels-of m) 'string-lessp) ","))
        (vm-label-string-of m)))

  (defun vm-make-folder-summary ()
--- 1716,1722 ----
    (or (vm-label-string-of m)
        (vm-set-label-string-of
         m
! (mapconcat 'identity (sort (copy-sequence (vm-labels-of m)) 'string-lessp) ","))
        (vm-label-string-of m)))

  (defun vm-make-folder-summary ()

Presumably Uday's already noticed this at some point, since trunk does
have the protective copy-sequence.

Uday Reddy (reddyuday) wrote :

Fixed in rev. 1426.

Changed in vm:
status: Triaged → Fix Committed
John Hein (xpqheqdvq4) wrote :

The copy-sequence was added in rev 1391.

Uday Reddy (reddyuday) on 2016-10-28
Changed in vm:
milestone: 8.2.2a → 8.2.1a
To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Other bug subscribers