NetBSD-Users archive

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

Re: can not download IMAP messages with isync/mbsync



On Mon, 7 Nov 2022, RVP wrote:

I've not been able to reproduce this at all even with 3 servers (2
providers and 1 local [dovecot +COMPRESS]) on 9.3_STABLE/amd64.


OK. Once I had QEMU + NetBSD-ARMv7 running, it turned out to be an easy
issue to diagnose. Turn out, on ARM, strnlen(3) is written in assembly
and this always returns `maxlen' for any value of `maxlen' > ~1GB. I
don't know any ARM assembly, so I haven't chased this any further.

The fix is either:

a) Configure isync-1.4.4 to _not_ use the system strnlen(). It will
   then use its own implementation which seems to work fine.

```
$ env ac_cv_func_strnlen=no ./configure ...
$ make
$ make install
```

OR

b) Apply this patch:

```
diff -urN isync-1.4.4.orig/src/drv_imap.c isync-1.4.4/src/drv_imap.c
--- isync-1.4.4.orig/src/drv_imap.c	2021-12-03 10:56:16.000000000 +0000
+++ isync-1.4.4/src/drv_imap.c	2022-11-14 06:58:25.037251216 +0000
@@ -541,7 +541,7 @@
 				add_seg( s, l );
 			if (!c)
 				break;
-			uint maxlen = UINT_MAX;
+			uint maxlen = sizeof(buf);
 			c = *++fmt;
 			if (c == '\\') {
 				c = *++fmt;
```

This restricts `maxlen' to the size of the buffer we're using. (The amt.
actually written will of course be smaller--the code takes care of that.)

-RVP



Home | Main Index | Thread Index | Old Index