Running dovecot -c /dev/null -n results in:
2.4.2 (0962ed2104): /dev/null
Pigeonhole version 2.4.2 (767418c3)
Program received signal SIGSEGV, Segmentation fault. 0x00007ffff7c0f3a6 in str_to_uint () at ../lib/strnum.c:76
for a user. And the issue seems to be const unsigned char ** vs const char * mismatch:
int str_to_uintmax(const char *str, uintmax_t *num_r) { const char *endp = NULL; uintmax_t n; int ret = str_parse_uintmax(str, &n, &endp); if ((ret != 0) || (*endp != '\0')) /* <--- reading via 'const char *' return -1; *num_r = n; return 0; }
vs
int str_parse_data_uintmax(const unsigned char *data, size_t size, uintmax_t *num_r, const unsigned char **endp_r) { const unsigned char *p = data, *pend = data + size; uintmax_t n = 0;
if (p >= pend || *p < '0' || *p > '9')
return -1;
do {
if (n >= ((uintmax_t)-1 / 10)) {
if (n > (uintmax_t)-1 / 10)
return -1;
if ((uintmax_t)(*p - '0') > ((uintmax_t)-1 % 10))
return -1;
}
n = n * 10 + (*p - '0');
p++;
} while (p < pend && *p >= '0' && *p <= '9');
if (endp_r != NULL)
*endp_r = p; /* <--- writing via 'const unsigned char *'
*num_r = n;
return 0;
}
We don't know enough to choose which one would be preferable so that the interfaces match. It needs an informed decision as it shows up in a bunch of other places as well.
More details at: https://bugs.gentoo.org/971191
Thank you
Eray
participants (1)
-
Eray Aslan