Re: libcrypt / glibc bug?

2016-02-04 Пенетрантность yuri . nefedov

On Thu, 4 Feb 2016, gr tertychnyi wrote:


да, валится.
указатели не проверяются на NULL ни в glibc , ни в newlib.



 Не совсем в тему, но вот только недавно встретилась лекция Тони Хо́ар

 Sir Charles Antony Richard Hoare:
 Null References: The Billion Dollar Mistake
 
http://www.infoq.com/presentations/Null-References-The-Billion-Dollar-Mistake-Tony-Hoare

 Так же любопытная статья на ту же тему:
 
https://www.lucidchart.com/techblog/2015/08/31/the-worst-mistake-of-computer-science/

Ю.

Re: libcrypt / glibc bug?

2016-02-04 Пенетрантность gr tertychnyi
да, валится.
указатели не проверяются на NULL ни в glibc , ни в newlib. 

-- 
Григорий


> On Feb 4, 2016, at 19:30, Anatoly Pugachev  wrote:
> 
> Коллеги, здравствуйте!
> 
> А у всех strcmp валится в sigserv , если ему одним из параметров дать 
> значение NULL ?
> 
> взято из configure в php-7.x :
> 
> $ cat conftest.c
> #include 
> #include 
> #include 
> int main() {
> exit (strcmp((char 
> *)crypt("rasmuslerdorf","_J9..rasm"),"_J9..rasmBYk8r9AiWNc"));
> }
> 
> $ gcc -lcrypt conftest.c
> 
> Спасибо.



Re: libcrypt / glibc bug?

2016-02-04 Пенетрантность Artem Chuprina
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 
 AP> #include 
 AP> #include 
 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 или просто не сойдется
сравнение.



Re: libcrypt / glibc bug?

2016-02-04 Пенетрантность Anatoly Pugachev
2016-02-04 20:30 GMT+03:00 Anatoly Pugachev :

> Коллеги, здравствуйте!
>
> А у всех strcmp валится в sigserv , если ему одним из параметров дать
> значение NULL ?
>
> взято из configure в php-7.x :
>
> $ cat conftest.c
> #include 
> #include 
> #include 
> int main() {
> exit (strcmp((char
> *)crypt("rasmuslerdorf","_J9..rasm"),"_J9..rasmBYk8r9AiWNc"));
> }
>
> $ gcc -lcrypt conftest.c
>
>

извините, забыл написать, у меня в sid  на sparc64 валится:
root@deb4g:/srv/1/php-7.0.2# dpkg -l libc6
ii  libc6:sparc64   2.21-7
sparc64  GNU C Library: Shared libraries

и на fc23 x86_64 тоже:
[mator@node01 ~]$ gcc -lcrypt conftest.c
[mator@node01 ~]$ ./a.out
Segmentation fault (core dumped)
[mator@node01 ~]$ rpm -q glibc
glibc-2.22-7.fc23.x86_64