VM

Labels in virtual folders

Bug #1097442 reported by Uday Reddy
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
VM
Fix Committed
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.

Tags: 8.2 virtual
Revision history for this message
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.

Revision history for this message
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.

Revision history for this message
Uday Reddy (reddyuday) wrote :

Fixed in rev. 1426.

Changed in vm:
status: Triaged → Fix Committed
Revision history for this message
John Hein (xpqheqdvq4) wrote :

The copy-sequence was added in rev 1391.

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

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.