imap/2376: IMAP fails on platforms with non-C99 vsnprintf(3)
>Number: 2376
>Notify-List:
>Category: imap
>Synopsis: IMAP fails on platforms with non-C99 vsnprintf(3)
>Confidential: no
>Severity: serious
>Priority: low
>Responsible: mutt-dev
>State: open
>Keywords:
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Sun Jul 23 04:22:26 +0200 2006
>Originator: Holger Weiss
>Release: 1.5.12
>Organization:
Freie Universitaet Berlin
>Environment:
IRIX64 6.5.28f
>Description:
When using IMAP on IRIX (and possibly other platforms), Mutt 1.5.12 hangs
forever while "Fetching message headers...". This happens because longer IMAP
commands are truncated to 127 characters prior to sending them; whereupon Mutt
will wait forever for the server response to the incomplete command.
The truncation occurs because, in order to calculate the necessary size of the
buffer holding the IMAP command, mutt_buffer_printf() relies on vsnprintf(3)
returning the number of characters which _would_ have been written to a
sufficiently sized buffer, see muttlib.c:1438. However, (at least) on IRIX,
vsnprintf(3) returns the actual length of the output string, which leads to
mutt_buffer_printf() not recognizing that the size of the buffer in question
would have to be increased. Instead, the IMAP command is truncated to fit into
the (default) buffer size of 128.
Apart from that, the [v]snprintf(3) replacement functions provided in
snprintf.c return the length of the actual output string just as the IRIX
implementation does, so without modification, they cannot be used either.
Of course, the [v]snprintf(3) problem might also arise elsewhere in the code, I
haven't checked.
>How-To-Repeat:
Try to use IMAP on IRIX.
>Fix:
The attached patch fixes the return value of the replacement functions in
snprintf.c and changes configure.in so that the replacements are used if the
system's [v]snprintf(3) implementation doesn't return the correct length (or if
it doesn't truncate the output appropriately, which happened on Solaris 7 IIRC).
>Add-To-Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="c99_vsnprintf.diff"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="c99_vsnprintf.diff"
SW5kZXg6IGNvbmZpZ3VyZS5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9yb2Vzc2xlci9j
dnMvbXV0dC9jb25maWd1cmUuaW4sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDMuNTIKZGlmZiAtdSAt
cjMuNTIgY29uZmlndXJlLmluCi0tLSBjb25maWd1cmUuaW4JMTkgSnVsIDIwMDYgMjM6Mjk6NTQg
LTAwMDAJMy41MgorKysgY29uZmlndXJlLmluCTIzIEp1bCAyMDA2IDAxOjU3OjQ2IC0wMDAwCkBA
IC0zMzcsMTEgKzMzNyw2MCBAQAogICAgICAgICBBQ19DSEVDS19IRUFERVJTKGdldG9wdC5oKQog
ZmkKIAotbXV0dF9jdl9zbnByaW50Zj1ubwogU05QUklOVEZPQkpTPSIiCi1BQ19DSEVDS19GVU5D
UyhzbnByaW50ZiwgLCBbbXV0dF9jdl9zbnByaW50Zj15ZXNdKQotQUNfQ0hFQ0tfRlVOQ1ModnNu
cHJpbnRmLCAsIFttdXR0X2N2X3NucHJpbnRmPXllc10pCi1pZiB0ZXN0ICRtdXR0X2N2X3NucHJp
bnRmID0geWVzOyB0aGVuCitBQ19DSEVDS19GVU5DKHNucHJpbnRmLCBbbXV0dF9jdl9mdW5jX3Nu
cHJpbnRmPXllc10sIFttdXR0X2N2X2Z1bmNfc25wcmludGY9bm9dKQorQUNfQ0hFQ0tfRlVOQyh2
c25wcmludGYsIFttdXR0X2N2X2Z1bmNfdnNucHJpbnRmPXllc10sIFttdXR0X2N2X2Z1bmNfdnNu
cHJpbnRmPW5vXSkKK2lmIHRlc3QgJG11dHRfY3ZfZnVuY19zbnByaW50ZiA9IHllczsgdGhlbgor
QUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgeW91ciBzeXN0ZW0ncyBzbnByaW50ZiBpcyBDOTkgY29t
cGxpYW50XSwKKyAgICAgICAgW211dHRfY3ZfYzk5X3NucHJpbnRmXSwKKyAgICAgICAgQUNfVFJZ
X1JVTihbCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludCBtYWluKCkKK3sKK2NoYW5nZXF1b3RlKCwg
KWRubAorICBjaGFyIGJ1Zls4XTsKKyAgaW50IGxlbiA9IHNucHJpbnRmKGJ1ZiwgNCwgIjEyMzQ1
NjciKTsKKyAgcmV0dXJuIChsZW4gIT0gNyB8fCBidWZbM10gIT0gJ1wwJyk7CitjaGFuZ2VxdW90
ZShbLCBdKWRubAorfQorICAgICAgICBdLCBtdXR0X2N2X2M5OV9zbnByaW50Zj15ZXMsIG11dHRf
Y3ZfYzk5X3NucHJpbnRmPW5vLCBtdXR0X2N2X2M5OV9zbnByaW50Zj1ubykpCitlbHNlCisgICAg
ICAgIG11dHRfY3ZfYzk5X3NucHJpbnRmPW5vCitmaQoraWYgdGVzdCAkbXV0dF9jdl9mdW5jX3Zz
bnByaW50ZiA9IHllczsgdGhlbgorQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgeW91ciBzeXN0ZW0n
cyB2c25wcmludGYgaXMgQzk5IGNvbXBsaWFudF0sCisgICAgICAgIFttdXR0X2N2X2M5OV92c25w
cmludGZdLAorICAgICAgICBBQ19UUllfUlVOKFsKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNs
dWRlIDxzdGRpby5oPgoraW50IGZvbyhjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKK2NoYW5nZXF1
b3RlKCwgKWRubAorICBjaGFyIGJ1Zls4XTsKKyAgaW50IGxlbjsKKyAgdmFfbGlzdCBhcDsKKyAg
dmFfc3RhcnQoYXAsIGZtdCk7CisgIGxlbiA9IHZzbnByaW50ZihidWYsIDQsIGZtdCwgYXApOwor
ICB2YV9lbmQoYXApOworICByZXR1cm4gKGxlbiAhPSA3IHx8IGJ1ZlszXSAhPSAnXDAnKTsKK2No
YW5nZXF1b3RlKFssIF0pZG5sCit9CisKK2ludCBtYWluKCkKK3sKKyAgcmV0dXJuIGZvbygiJXMi
LCAiMTIzNDU2NyIpOworfQorICAgICAgICBdLCBtdXR0X2N2X2M5OV92c25wcmludGY9eWVzLCBt
dXR0X2N2X2M5OV92c25wcmludGY9bm8sIG11dHRfY3ZfYzk5X3ZzbnByaW50Zj1ubykpCitlbHNl
CisgICAgICAgIG11dHRfY3ZfYzk5X3ZzbnByaW50Zj1ubworZmkKK2lmIHRlc3QgJG11dHRfY3Zf
Yzk5X3NucHJpbnRmID0geWVzOyB0aGVuCisgICAgICAgIEFDX0RFRklORShIQVZFX1NOUFJJTlRG
LCAxLCBbIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgQzk5IGNvbXBsaWFudCBzbnByaW50ZiBm
dW5jdGlvbi4gXSkKK2ZpCitpZiB0ZXN0ICRtdXR0X2N2X2M5OV92c25wcmludGYgPSB5ZXM7IHRo
ZW4KKyAgICAgICAgQUNfREVGSU5FKEhBVkVfVlNOUFJJTlRGLCAxLCBbIERlZmluZSB0byAxIGlm
IHlvdSBoYXZlIGEgQzk5IGNvbXBsaWFudCB2c25wcmludGYgZnVuY3Rpb24uIF0pCitmaQoraWYg
dGVzdCAkbXV0dF9jdl9jOTlfc25wcmludGYgPSBubyAtbyAkbXV0dF9jdl9jOTlfdnNucHJpbnRm
ID0gbm87IHRoZW4KICAgICAgICAgQUNfTElCT0JKKHNucHJpbnRmKQogZmkKIApJbmRleDogc25w
cmludGYuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9yb2Vzc2xlci9jdnMvbXV0dC9zbnBy
aW50Zi5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAzLjIKZGlmZiAtdSAtcjMuMiBzbnByaW50Zi5j
Ci0tLSBzbnByaW50Zi5jCTMgRmViIDIwMDUgMTc6MDE6NDQgLTAwMDAJMy4yCisrKyBzbnByaW50
Zi5jCTIzIEp1bCAyMDA2IDAxOjU3OjQ2IC0wMDAwCkBAIC0zOCw2ICszOCwxMyBAQAogICogICAg
bWlzc2luZy4gIFNvbWUgc3lzdGVtcyBvbmx5IGhhdmUgc25wcmludGYoKSBidXQgbm90IHZzbnBy
aW50ZigpLCBzbwogICogICAgdGhlIGNvZGUgaXMgbm93IGJyb2tlbiBkb3duIHVuZGVyIEhBVkVf
U05QUklOVEYgYW5kIEhBVkVfVlNOUFJJTlRGLgogICoKKyAqICBIb2xnZXIgV2Vpc3MgPGhvbGdl
ckB6ZWRhdC5mdS1iZXJsaW4uZGU+IDA3LzIzLzA2IGZvciBtdXR0IDEuNS4xMworICogICAgQSBD
OTkgY29tcGxpYW50IFt2XXNucHJpbnRmKCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3Rl
cnMgdGhhdAorICogICAgd291bGQgaGF2ZSBiZWVuIHdyaXR0ZW4gdG8gYSBzdWZmaWNpZW50bHkg
c2l6ZWQgYnVmZmVyIChleGNsdWRpbmcKKyAqICAgIHRoZSAnXDAnKS4gIE11dHQgbm93IHJlbGll
cyBvbiB0aGlzIGJlaGF2aW91ciwgYnV0IHRoZSBvcmlnaW5hbAorICogICAgY29kZSBzaW1wbHkg
cmV0dXJuZWQgdGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0aW5nIG91dHB1dCBzdHJpbmcsIHNvCisg
KiAgICB0aGF0J3MgYmVlbiBmaXhlZC4KKyAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpZiBIQVZFX0NPTkZJR19I
CkBAIC03OSw3ICs4Niw3IEBACiAvKmludCBzbnByaW50ZiAoY2hhciAqc3RyLCBzaXplX3QgY291
bnQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsqLwogLyppbnQgdnNucHJpbnRmIChjaGFyICpzdHIs
IHNpemVfdCBjb3VudCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZyk7Ki8KIAotc3RhdGlj
IHZvaWQgZG9wciAoY2hhciAqYnVmZmVyLCBzaXplX3QgbWF4bGVuLCBjb25zdCBjaGFyICpmb3Jt
YXQsIAorc3RhdGljIGludCBkb3ByIChjaGFyICpidWZmZXIsIHNpemVfdCBtYXhsZW4sIGNvbnN0
IGNoYXIgKmZvcm1hdCwgCiAgICAgICAgICAgICAgICAgICB2YV9saXN0IGFyZ3MpOwogc3RhdGlj
IHZvaWQgZm10c3RyIChjaGFyICpidWZmZXIsIHNpemVfdCAqY3Vycmxlbiwgc2l6ZV90IG1heGxl
biwKIAkJICAgIGNoYXIgKnZhbHVlLCBpbnQgZmxhZ3MsIGludCBtaW4sIGludCBtYXgpOwpAQCAt
MTIxLDcgKzEyOCw3IEBACiAjdW5kZWYgTUFYCiAjZGVmaW5lIE1BWChwLHEpICgocCA+PSBxKSA/
IHAgOiBxKQogCi1zdGF0aWMgdm9pZCBkb3ByIChjaGFyICpidWZmZXIsIHNpemVfdCBtYXhsZW4s
IGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQorc3RhdGljIGludCBkb3ByIChjaGFy
ICpidWZmZXIsIHNpemVfdCBtYXhsZW4sIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdz
KQogewogICBjaGFyIGNoOwogICBsb25nIHZhbHVlOwpAQCAtMTQxLDcgKzE0OCw3IEBACiAKICAg
d2hpbGUgKHN0YXRlICE9IERQX1NfRE9ORSkKICAgewotICAgIGlmICgoY2ggPT0gJ1wwJykgfHwg
KGN1cnJsZW4gPj0gbWF4bGVuKSkgCisgICAgaWYgKGNoID09ICdcMCcpCiAgICAgICBzdGF0ZSA9
IERQX1NfRE9ORTsKIAogICAgIHN3aXRjaChzdGF0ZSkgCkBAIC0zMTcsOCArMzI0LDYgQEAKIAli
cmVhazsKICAgICAgIGNhc2UgJ3MnOgogCXN0cnZhbHVlID0gdmFfYXJnIChhcmdzLCBjaGFyICop
OwotCWlmIChtYXggPCAwKSAKLQkgIG1heCA9IG1heGxlbjsgLyogaWUsIG5vIG1heCAqLwogCWZt
dHN0ciAoYnVmZmVyLCAmY3VycmxlbiwgbWF4bGVuLCBzdHJ2YWx1ZSwgZmxhZ3MsIG1pbiwgbWF4
KTsKIAlicmVhazsKICAgICAgIGNhc2UgJ3AnOgpAQCAtMzcyLDYgKzM3Nyw4IEBACiAgICAgYnVm
ZmVyW2N1cnJsZW5dID0gJ1wwJzsKICAgZWxzZSAKICAgICBidWZmZXJbbWF4bGVuIC0gMV0gPSAn
XDAnOworCisgIHJldHVybiAoaW50KWN1cnJsZW47CiB9CiAKIHN0YXRpYyB2b2lkIGZtdHN0ciAo
Y2hhciAqYnVmZmVyLCBzaXplX3QgKmN1cnJsZW4sIHNpemVfdCBtYXhsZW4sCkBAIC0zOTIsMTgg
KzM5OSwxOCBAQAogICBpZiAoZmxhZ3MgJiBEUF9GX01JTlVTKSAKICAgICBwYWRsZW4gPSAtcGFk
bGVuOyAvKiBMZWZ0IEp1c3RpZnkgKi8KIAotICB3aGlsZSAoKHBhZGxlbiA+IDApICYmIChjbnQg
PCBtYXgpKSAKKyAgd2hpbGUgKChwYWRsZW4gPiAwKSAmJiAobWF4ID09IC0xIHx8IGNudCA8IG1h
eCkpIAogICB7CiAgICAgZG9wcl9vdXRjaCAoYnVmZmVyLCBjdXJybGVuLCBtYXhsZW4sICcgJyk7
CiAgICAgLS1wYWRsZW47CiAgICAgKytjbnQ7CiAgIH0KLSAgd2hpbGUgKCp2YWx1ZSAmJiAoY250
IDwgbWF4KSkgCisgIHdoaWxlICgqdmFsdWUgJiYgKG1heCA9PSAtMSB8fCBjbnQgPCBtYXgpKSAK
ICAgewogICAgIGRvcHJfb3V0Y2ggKGJ1ZmZlciwgY3VycmxlbiwgbWF4bGVuLCAqdmFsdWUrKyk7
CiAgICAgKytjbnQ7CiAgIH0KLSAgd2hpbGUgKChwYWRsZW4gPCAwKSAmJiAoY250IDwgbWF4KSkg
CisgIHdoaWxlICgocGFkbGVuIDwgMCkgJiYgKG1heCA9PSAtMSB8fCBjbnQgPCBtYXgpKSAKICAg
ewogICAgIGRvcHJfb3V0Y2ggKGJ1ZmZlciwgY3VycmxlbiwgbWF4bGVuLCAnICcpOwogICAgICsr
cGFkbGVuOwpAQCAtNjc3LDcgKzY4NCw4IEBACiBzdGF0aWMgdm9pZCBkb3ByX291dGNoIChjaGFy
ICpidWZmZXIsIHNpemVfdCAqY3Vycmxlbiwgc2l6ZV90IG1heGxlbiwgY2hhciBjKQogewogICBp
ZiAoKmN1cnJsZW4gPCBtYXhsZW4pCi0gICAgYnVmZmVyWygqY3VycmxlbikrK10gPSBjOworICAg
IGJ1ZmZlclsqY3Vycmxlbl0gPSBjOworICAoKmN1cnJsZW4pKys7CiB9CiAjZW5kaWYgLyogIWRl
ZmluZWQoSEFWRV9TTlBSSU5URikgfHwgIWRlZmluZWQoSEFWRV9WU05QUklOVEYpICovCiAKQEAg
LTY4NSw4ICs2OTMsNyBAQAogaW50IHZzbnByaW50ZiAoY2hhciAqc3RyLCBzaXplX3QgY291bnQs
IGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQogewogICBzdHJbMF0gPSAwOwotICBkb3By
KHN0ciwgY291bnQsIGZtdCwgYXJncyk7Ci0gIHJldHVybihzdHJsZW4oc3RyKSk7CisgIHJldHVy
bihkb3ByKHN0ciwgY291bnQsIGZtdCwgYXJncykpOwogfQogI2VuZGlmIC8qICFIQVZFX1ZTTlBS
SU5URiAqLwogCkBAIC03MDMsMTUgKzcxMCwxNiBAQAogICBzaXplX3QgY291bnQ7CiAgIGNoYXIg
KmZtdDsKICNlbmRpZgorICBpbnQgbGVuOwogICBWQV9MT0NBTF9ERUNMOwogICAgIAogICBWQV9T
VEFSVCAoZm10KTsKICAgVkFfU0hJRlQgKHN0ciwgY2hhciAqKTsKICAgVkFfU0hJRlQgKGNvdW50
LCBzaXplX3QgKTsKICAgVkFfU0hJRlQgKGZtdCwgY2hhciAqKTsKLSAgKHZvaWQpIHZzbnByaW50
ZihzdHIsIGNvdW50LCBmbXQsIGFwKTsKKyAgbGVuID0gdnNucHJpbnRmKHN0ciwgY291bnQsIGZt
dCwgYXApOwogICBWQV9FTkQ7Ci0gIHJldHVybihzdHJsZW4oc3RyKSk7CisgIHJldHVybihsZW4p
OwogfQogCiAjaWZkZWYgVEVTVF9TTlBSSU5URgo=