Hello list,

I am another person who has encountered this bug.  I also have some new
findings.  E.g. that this assertion can be hit even on v1.5.0!

I wanted to do a git bisect, but the build process fails if I specify a
checkout instead of a release tarball (even for v1.5.1).  It's probably
an issue with how isync is packaged by GNU Guix, but I don't really know
how to debug it.  And I don't have the time right now to set up a build
environment manually, the traditional way.

Moreover, I checked that applying a revert of the commit 1e0b661d on top
of v1.5.1 restores the v1.5.0 behaviour.  This narrows down the recent
increased prevalence of this bug to that tiny change.

Also, here's an anonymized version of the rc file I was using:

#+BEGIN_EXAMPLE
IMAPAccount [...]
Host [...]
User [...]
PassCmd "pass show [...] | head -n1"
TLSType IMAPS
CertificateFile /etc/ssl/certs/ca-certificates.crt

IMAPStore remote
Account [...]

MaildirStore local
SubFolders Verbatim
Path ~/[...]/maildir/
Inbox ~/[...]/maildir/local-inbox

Channel synchronizer
Far :remote:
Near :local:
Sync Pull
Create Near
Remove None
Expunge None
ExpungeSolo None
CopyArrivalDate yes
SyncState *
#+END_EXAMPLE

* an already-downloaded maildir prevents the crash

#+BEGIN_EXAMPLE
me@host$ guix shell isync [email protected]=isync-1.5.1.tar.gz
me@guix$ rm -r maildir/*
[...]
removed directory 'maildir/local-inbox'
me@guix$ mbsync --config rc-file synchronizer
Maildir notice: no UIDVALIDITY in $PWD/maildir/local-inbox, creating new.
Channels: 1    Boxes: 1    Far: +0 *0 #0 -0    Near: +440 *0 #0 -0
me@guix$ mbsync --config rc-file --dry-run synchronizer
Channels: 1    Boxes: 1    Far: +0 *0 #0 -0    Near: +0 *0 #0 -0
#+END_EXAMPLE

* silent in v1.5.0; present in v1.5.1

#+BEGIN_EXAMPLE
me@host$ guix shell isync [email protected]=isync-1.5.0.tar.gz
me@guix$ rm -r maildir/*
[...]
removed directory 'maildir/local-inbox'
me@guix$ mbsync --config rc-file --dry-run synchronizer
Maildir notice: no UIDVALIDITY in $PWD/maildir/local-inbox, creating new.
Processed 1 box(es) in 1 channel(s),
would pull 440 new message(s) and 0 flag update(s).
#+END_EXAMPLE

(this was not in fact a dry run – it populated the maildir with a lot of files)

#+BEGIN_EXAMPLE
me@host$ guix shell isync [email protected]=isync-1.5.1.tar.gz
me@guix$ rm -r maildir/*
[...]
removed directory 'maildir/local-inbox'
me@guix$ mbsync --config rc-file --dry-run synchronizer
Maildir notice: no UIDVALIDITY in $PWD/maildir/local-inbox, creating new.
mbsync: drv_maildir.c:1680: maildir_find_new_msgs: Assertion `DFlags & 
FAKEDUMBSTORE' failed.
zsh: IOT instruction (core dumped)  mbsync --config rc-file --dry-run 
synchronizer
#+END_EXAMPLE

* v1.5.1 + revert seems to "fix" it

#+BEGIN_EXAMPLE
me@host$ guix shell isync [email protected]=./revert.diff
me@guix$ rm -r maildir/*
[...]
removed directory 'maildir/local-inbox'
me@guix$ mbsync --config rc-file --dry-run synchronizer
Maildir notice: no UIDVALIDITY in $PWD/maildir/local-inbox, creating new.
Channels: 1    Boxes: 1    Far: +0 *0 #0 -0    Near: +440 *0 #0 -0
#+END_EXAMPLE

(unsurprisingly, this is not a dry run – it populates the maildir; it doesn't 
crash)

* v1.5.1 + revert + =--debug= uncovers it again

#+BEGIN_EXAMPLE
me@host$ guix shell isync [email protected]=./revert.diff
me@guix$ rm -r maildir/*
[...]
removed directory 'maildir/local-inbox'
me@guix$ mbsync --config rc-file --dry-run --debug synchronizer 
1>crash-huh.stdout 2>crash-huh.stderr
zsh: IOT instruction (core dumped)  mbsync --config rc-file --dry-run --debug 
synchronizer > crash-huh.stdout 2>
#+END_EXAMPLE

(+seems to be a dry run;+ it crashes and does not populate the maildir)

* v1.5.0 is also affected

#+BEGIN_EXAMPLE
me@host$ [email protected]=isync-1.5.0.tar.gz
me@guix$ rm -r maildir/*
[...]
removed directory 'maildir/local-inbox'
me@guix$ mbsync --config rc-file --dry-run --debug synchronizer 
1>crash-huh-too.stdout 2>crash-huh-too.stderr
zsh: IOT instruction (core dumped)  mbsync --config rc-file --dry-run --debug 
synchronizer > crash-huh-too.stdout
#+END_EXAMPLE

(just like above)

** diff between =crash-huh.*= and =crash-huh-too.*= – not much to see here

#+BEGIN_EXAMPLE
--- crash-huh.stderr    2026-05-01 22:46:31.738887271 +0200
+++ crash-huh-too.stderr        2026-05-02 00:19:32.139762496 +0200
@@ -1 +1 @@
-mbsync: drv_maildir.c:1680: maildir_find_new_msgs: Assertion `DFlags & 
FAKEDUMBSTORE' failed.
+mbsync: drv_maildir.c:1674: maildir_find_new_msgs: Assertion `DFlags & 
FAKEDUMBSTORE' failed.
#+END_EXAMPLE

#+BEGIN_EXAMPLE
--- crash-huh.stdout    2026-05-01 22:46:31.738887271 +0200
+++ crash-huh-too.stdout        2026-05-02 00:19:32.139762496 +0200
@@ -1,4 +1,4 @@
-isync 1.5.1 called with: '--config' 'rc-file' '--dry-run' '--debug' 
'synchronizer'
+isync 1.5.0 called with: '--config' 'rc-file' '--dry-run' '--debug' 
'synchronizer'
 Reading configuration file ./rc-file
 merge ops (in Channel 'synchronizer'):
   common: XOP_PULL
@@ -47,7 +47,7 @@
 Opening near side box INBOX...
 N: [ 4] Enter open_box
 Maildir notice: no UIDVALIDITY in $PWD/maildir/local-inbox, creating new.
-N: [ 4] Callback enter open_box, sts=0, uidvalidity=1777668391
+N: [ 4] Callback enter open_box, sts=0, uidvalidity=1777673971
 N: [ 4] Callback leave open_box
 N: [ 4] Leave open_box
 F: [ 1] Callback leave connect_store
@@ -963,7 +963,7 @@
   uid=4540  flags=S    size=0      tuid=?
 far side: 440 messages, 0 recent
 matching messages on far side against sync records
--> log: | 1 1777668391 (new UIDVALIDITYs)
+-> log: | 1 1777673971 (new UIDVALIDITYs)
 Synchronizing...
 F: Called get_supported_flags, ret=0xff
 N: Called get_supported_flags, ret=0xff
@@ -1414,446 +1414,446 @@
 propagating new messages
 N: Called get_uidnext, ret=0
 -> log: F 1 0 (save UIDNEXT of near side)
[...]
 N: Called get_memory_usage, ret=0
 F: [ 7] Enter fetch_msg [DRY], uid=257, want_flags=no, want_date=yes
 F: [ 7] Callback enter fetch_msg, sts=0, flags=, date=-1, size=0
#+END_EXAMPLE

* doesn't happen unless I use =--dry-run=

#+BEGIN_EXAMPLE
me@host$ guix shell isync [email protected]=isync-1.5.1.tar.gz
me@guix$ rm -r maildir/*
[...]
removed directory 'maildir/local-inbox'
me@guix$ mbsync --config rc-file synchronizer
Maildir notice: no UIDVALIDITY in $PWD/maildir/local-inbox, creating new.
Channels: 1    Boxes: 1    Far: +0 *0 #0 -0    Near: +440 *0 #0 -0
#+END_EXAMPLE

Curiously, this seemed to be much slower than the buggy not-so-dry runs.
Either this actually does more work or maybe the server is starting to
rate-limit me.

* here's how the =crash.std*= files were gathered

#+BEGIN_EXAMPLE
me@host$ guix shell isync [email protected]=isync-1.5.1.tar.gz
me@guix$ rm -r maildir/*
[...]
removed directory 'maildir/local-inbox'
me@guix$ mbsync --config rc-file --dry-run --debug synchronizer 1>crash.stdout 
2>crash.stderr
zsh: IOT instruction (core dumped)  mbsync --config rc-file --dry-run --debug 
synchronizer > crash.stdout 2>
#+END_EXAMPLE

If anyone has an idea how to obtain =--debug= logs *without the crash*
that differ the least for these, I'm all ears.

Cheers,
Piotr Masłowski


_______________________________________________
isync-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/isync-devel

Reply via email to