Re: Проблема с нулевым байтом в ngx_crypt()
Maxim Dounin
mdounin на mdounin.ru
Пн Ноя 29 18:22:23 MSK 2010
Hello!
On Mon, Nov 29, 2010 at 11:17:46AM +0300, Laletin Michail wrote:
> src/os/unix/ngx_user.c
>
> 81 if (value) {
> 82 len = ngx_strlen(value);
> 83
> 84 *encrypted = ngx_pnalloc(pool, len);
> 85 if (*encrypted) {
> 86 ngx_memcpy(*encrypted, value, len + 1);
> 87 }
>
> Под строку encrypted выделяется место без учёта нулевого байта на
> конце (len байт).
> А копируется len + 1 байт.
>
> У меня из-за этого строка encrypted вылезает за пределы ngx_pool_s в
> которой для неё
> зарезервировано место и затирает один байт в следующей ngx_pool_s,
> повреждая d.last.
> В конечном итоге это приводит к полному затиранию d.last d.end и потом
> segmentation violation.
Nice catch, спасибо.
To Igor: обрати внимание, там ошибка в обоих случаях -
#if (NGX_HAVE_GNU_CRYPT_R) и #else.
Maxim Dounin
Подробная информация о списке рассылки nginx-ru