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 или просто не сойдется
сравнение.

Ответить