История изменений
Исправление
no-dashi,
(текущая версия)
:
Накатываем патч на glibc, ломается флеш. Значит это плохой патч, даже если он проходит тесты.
Это значит, что плохой флэш.
Я написал функцию «константа» вот такого вида
double mathconst(char ** e) {
if (strcasecmp(e,"zero")==0) return 0;
if (strcasecmp(e,"e")==0) return 2.7182;
return 3.1416;
}
и задокументировал её так «возвращает значение затребованной константы, аргумент - имя константы, можеьт быть pi, e или zero»
Программистка Адобася Долбакова решила использовать эту функцию для вычисления длины окружности:
double clen(double rad) {
return 2*mathconst("pie")*rad;
}
Теперь я решил улучшить свою функцию, и переписал её:
double mathconst(char ** e) {
if (strcasecmp(e,"zero")==0) return 0;
if (strcasecmp(e,"e")==0) return 2.7182;
if (strcasecmp(e,"pi")==0) return 3.1416;
return -1;
}
Так вот - то, что у Адобаси Долбаковой сломалась её программа - проблема Адобаси Долбаковой. Потому, что воспользовалась UB.
Если malloc выделял память с выравнивание на 32 байта, то можно сделать malloc(16) и записать туда 24 байта. А в следующей версии malloc изменят, и он будет выделять память с выравниванием на 8 байт. И кривая программа сломается или начнет крушить данные. Это не проблема автора malloc, это проблема быдлокодера чья программа нарушает правила.
Так что не надо перекладывать проблемы адобов на разработчиков glibc, потмоу что адобы должны были начать рвать волосы на своей жопе и выпустить апдейтнутую версию своего быдлокода как только баг был найден.
Исходная версия
no-dashi,
:
Накатываем патч на glibc, ломается флеш. Значит это плохой патч, даже если он проходит тесты.
Это значит, что плохой флэш.
Я написал функцию «константа» вот такого вида
double mathconst(char ** e) {
if (strcasecmp(e,"zero")==0) return 0;
if (strcasecmp(e,"e")==0) return 2.7182;
return 3.1416;
}
и задокументировал её так «возвращает значение затребованной константы, аргумент - имя константы, можеьт быть pi, e или zero»
Программистка Адобася Долбакова решила использовать эту функцию для вычисления длины окружности:
double clen(double rad) {
return 2*mathconst("pie")*rad;
}
Теперь я решил улучшить свою функцию, и переписал её:
double mathconst(char ** e) {
if (strcasecmp(e,"zero")==0) return 0;
if (strcasecmp(e,"e")==0) return 2.7182;
if (strcasecmp(e,"e")==0) return 3.1416;
return -1;
}
Так вот - то, что у Адобаси Долбаковой сломалась её программа - проблема Адобаси Долбаковой. Потому, что воспользовалась UB.
Если malloc выделял память с выравнивание на 32 байта, то можно сделать malloc(16) и записать туда 24 байта. А в следующей версии malloc изменят, и он будет выделять память с выравниванием на 8 байт. И кривая программа сломается или начнет крушить данные. Это не проблема автора malloc, это проблема быдлокодера чья программа нарушает правила.
Так что не надо перекладывать проблемы адобов на разработчиков glibc, потмоу что адобы должны были начать рвать волосы на своей жопе и выпустить апдейтнутую версию своего быдлокода как только баг был найден.