Re: libcrypt / glibc bug?
Anatoly Pugachev -> Debian рассылка @ Thu, 4 Feb 2016 20:30:02 +0300:
AP> Коллеги, здравствуйте!
AP> А у всех strcmp валится в sigserv , если ему одним из параметров дать
AP> значение NULL ?
За всех не поручусь, но исходя из логики того, как пишутся самые
низкоуровневые функции в C - да, имеет право. Самые низкоуровневые
функции не проверяют тщательно свои параметры - иначе их использование
будет состоять в основном из дублирующихся проверок.
AP> взято из configure в php-7.x :
AP> $ cat conftest.c
AP> #include <crypt.h>
AP> #include <stdlib.h>
AP> #include <string.h>
AP> int main() {
AP> exit (strcmp((char
AP> *)crypt("rasmuslerdorf","_J9..rasm"),"_J9..rasmBYk8r9AiWNc"));
AP> }
AP> $ gcc -lcrypt conftest.c
Ну, мягко говоря, употребление crypt() в приведенном коде далеко от
документированного:
salt is a two-character string chosen from the set [a-zA-Z0-9./]. This string is used to perturb the algorithm in one of 4096 different ways.
Так что, я бы сказал, crypt() тут вправе вернуть NULL со всеми
вытекающими. И тут уже неважно, sigsegv в strcmp или просто не сойдется
сравнение.
Reply to: