bug-gnu-emacs
[Top][All Lists]
Advanced

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

bug#67890: 28.2; nnmaildir silently deletes messages upon expiration


From: Eric Abrahamsen
Subject: bug#67890: 28.2; nnmaildir silently deletes messages upon expiration
Date: Thu, 04 Jan 2024 08:32:24 -0800
User-agent: Gnus/5.13 (Gnus v5.13)

Weird, this is in my Sent folder, but obviously never was actually sent.
I was wondering why no one responded...

Łukasz Stelmach <stlman@poczta.fm> writes:

> I believe I've found a bug leading to a data loss situation.
>
> Steps to reproduce.

Thanks for the very detailed report! Obviously the `nnmaildir--pgname'
problem needs to be fixed, but otherwise it seems like the unlinking
step is also a clear bug: we should not be deleting the message if it
wasn't successfully expired someplace, right?

I'm thinking the end of the `t` clause in the cond there should look
like this:

(when (and (stringp target)
           (not (string-equal target pgname))) ;; Move it.
  (erase-buffer)
  (nnheader-insert-file-contents nnmaildir--file)
  (let ((group-art (gnus-request-accept-article
                    target nil nil 'no-encode)))
    (if group-art
        (progn
          (when (consp group-art)
            ;; Maybe also copy: dormant forward reply save tick
            ;; (gnus-add-mark? gnus-request-set-mark?)
            (gnus-group-mark-article-read target (cdr group-art)))
          ;; Article was successfully moved, delete the original.
          (nnmaildir--unlink nnmaildir--file)
          (nnmaildir--expired-article group article))
      ;; Leave it here.
      (setq didnt (cons (nnmaildir--art-num article) didnt)))))

It looks to me like `gnus-request-accept-article` can return a
(group . article) cons, a symbol, or nil for failure. If we get a nil,
we shouldn't remove the original article.

Does that seem reasonable?

Eric





reply via email to

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