Bug 21684 - ошибка в strfmon()
Summary: ошибка в strfmon()
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: glibc-core (show other bugs)
Version: unstable
Hardware: all Linux
: P3 normal
Assignee: placeholder@altlinux.org
QA Contact: qa-sisyphus
URL: http://sourceware.org/bugzilla/show_b...
Keywords:
Depends on:
Blocks:
 
Reported: 2009-09-23 14:39 MSD by stalker
Modified: 2010-05-27 04:46 MSD (History)
7 users (show)

See Also:


Attachments
Примерный патч для glibc-2.3.5 (972 bytes, patch)
2009-09-23 19:10 MSD, Damir Shayhutdinov
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description stalker 2009-09-23 14:39:36 MSD
На 4.0 успешно  срабатывает тесткейз (см ниже) на ошибку по поводу strfmon в glibc. На 32 битных хостах получается просто сегфолт..а вот на 64 битном куда серьёзнее - съедается вся доступная память. Аналогичные симптомы в 4.1 и в p5.


==
#include <stdio.h>
#include <monetary.h>
void main(void)
{
        double p = 1;
        char str[20];
        strfmon(str, sizeof(str), "%.1073741821i", p);
}

или оно же на php
php -r 'money_format("%.1073741821i",1);'
Comment 1 Dmitry V. Levin 2009-09-23 15:10:04 MSD
Апстрим не торопится это исправлять.

История может предствлять реальную угрозу только в том случае, когда строка формата, передаваемая функции strfmon, является непроверенным вводом.  Последнее плохо в любом случае.
Comment 2 stalker 2009-09-23 16:10:02 MSD
То что  php не показатель понятно.Но тем не менее сегодня 2 ovz-контейнера ушли в даун... там как раз используется money_format. Отключить использование функции не могу..ибо оно нужно.
Comment 3 Damir Shayhutdinov 2009-09-23 19:10:54 MSD
Created attachment 3931 [details]
Примерный патч для glibc-2.3.5

Вот с таким патчем у меня на glibc-2.3.5 (своя собственная embedded-версия) не падает.
Хотя конечно, правильнее было бы патчить __printf_fp, чтобы он не писал куда не надо.
Comment 4 Dmitry V. Levin 2010-05-27 04:46:02 MSD
По крайней мере в glibc >= 2.10.1-alt2 это уже исправлено.
В 5.1/p5 сейчас находится glibc-2.10.1-alt7.