О проценте ненатуралов среди программистов

А знаете, почему я еще на работе?

Есть некий сайт (Linux, Apache, MySQL, PHP, извините), в базу которого, среди прочего, пишутся ip-адреса. Внезапно понадобилось посмотреть один из адресов и внезапно обнаружилось, что вместо адресов в базе какая-то удивительная поебень — вот, скажем, 127.255.255.255 вместо ожидаемого белого IP.

Выяснил, что IP пишется в базу MySQL, каковой MySQL ожидает получить INT(11). Да, получает свой INT(11). Оочень странного содержания.

Полез, отплевываясь от омерзения, в шевелящийся от багов говнокод, написанный косоруким похапешником на аутсорсе. Выяснил, что адрес конвертируется похапенью при помощи специальной хуйни™ ip2long().

Выяснил, что специальная хуйня™ ip2long() ведет себя совершенно по-разному в 32- и 64-битных системах. И что, думаете, автор этого поделия предполагал, что оно будет запускаться в x64? Нет, разумеется, с чего бы.

И вот так у них всё.


Комментарии:

О проценте ненатуралов среди программистов: 16 комментариев

  1. 1) А почему INT(11)? Из 32 бит никак больше 10 десятичных знаков не получается..

    2) Аффтар по ссылке несёт какую-то хуйню. Во-первых, IP-адреса для ip2long должны быть в кавычках, ибо строки. Во-вторых, знаковое целое, состоящее из всех единиц (255.255.255.255) — это ни разу не -2147483648, а вовсе даже -1. А беззнаковое — 4294967295, а не 4294967296. Оно тупо не может быть чётным, потому что заканчивается двоичной единицей.
    А 127.127.127.127 aka 7F7F7F7F — это 2139062143, а не 2147483648.

    3) специальная хуйня действительно ведёт себя по-разному, но я так понимаю, вопрос не в ней самой, а в обратном преобразовании из целого числа в IP. И если использовать другую специальную хуйню — long2ip(), то она нормально преобразует эти числа в исходные IP-адреса.

    Более того, и 32-, и 64-битовая версии нормально преобразуют и -1, и 4294967295 в 255.255.255.255.

  2. а почему не функцией mysql это сделано, интересно?
    ну и про unsigned int забывать не надо для таких случаев.

    1. Этот вопрос сводится к «Почему похапешники на аутсорсе такие косорукие?». )

        1. то есть нанять ещё одного косорукого аутсорсера, и потом пытаться понять кто из них более косорук? клёвая идея.

          1. (вот черт, открыл походный ноут и обнаружил неотправленный комментарий)

            а ничо, что code review и тестирование нужно проводить независимо от того, в штате программисты или на аутсорсе?

          2. (вот черт, открыл походный ноут и обнаружил неотправленный комментарий)

            а ничо, что code review и тестирование нужно проводить независимо от того, в штате программисты или на аутсорсе?

        2. то есть нанять ещё одного косорукого аутсорсера, и потом пытаться понять кто из них более косорук? клёвая идея.

    2. Этот вопрос сводится к «Почему похапешники на аутсорсе такие косорукие?». )

Комментарии запрещены.