| Summary: | wrong getaddrname functions behavior | ||
|---|---|---|---|
| Product: | Sisyphus | Reporter: | inger <inger> |
| Component: | glibc-core | Assignee: | Gleb F-Malinovskiy <glebfm> |
| Status: | NEW --- | QA Contact: | qa-sisyphus |
| Severity: | normal | ||
| Priority: | P2 | CC: | glebfm, ldv, php-coder |
| Version: | unstable | ||
| Hardware: | all | ||
| OS: | Linux | ||
Is it a getaddrinfo()'s to detect illegal invalid ports? |
int getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res); Параметр service -- или имя сервиса или номер сервиса. Проблема в том что при получении строки с номером порта выше 65536 функция не возвращает код ошибки а получает неопределённое поведение. В debian это известно аж с 2003: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=192876 В netbsd подобной проблемы нет: http://ftp.netbsd.org/pub/NetBSD/NetBSD-release-4-0/src/dist/bind/lib/lwres/getaddrinfo.c Мне кажется это ошибка иначе вызывающая getaddrinfo программа вынуждена будет самостоятельно заниматься конверсией из числа в строку и проверкой диапазона. Тем более что ведь на левые сервисы по имени будет возвращена ошибка, спрашивается, почему нет сообщения об ошибке для левого порта.