Проблема 2008 года :)
Date: 03/03/08
(Code WTF) Keywords: no keywords
Я хуею и плачу, плачу и хуею
В проекте которым я теперь рулю. Нам достался клиентский софт. Написанный одной нехорошей конторой (не буду раскрывать имен).
В пятницу мне звонят с утра и говорят "не работает"
с ошибкой "29.02.1990 не правильная дата"
Разработчики говнокода посоветовали поменять время на серверах баз данных.
И Вы думаете я им поверил, хрен им не дождутся.
Беглый анализ исходников клиента показал наличие кода.
DPD_N:=COPY(DATETOSTR(DATE),1,6)+INTTOSTR(STRTOINT(COPY(DATETOSTR(DATE),7,4))-18);
IF STRTODATE(DR)<DPD THEN
BEGIN
|
_Winnie C++ Colorizer |
блиять это какже нужно не любить собственную профессию. чтобы так обращаться с датами.
дальше интереснее :)
оказалось что переданные нам исходники не соответствуют тому что чтоит в продуктиве :(
причем клиент собранный из наших исходников будучи собранными просто не запускался.
пришлось корректировки вносить напрямую в их бинарник.
убрал проверку "IF STRTODATE(DR) " проверил, положили в систему обновления, клиенты обновились.
Работают.
через два часа еще звонок
ошибка при печати решения о выдаче, анализ кода показал
decodedate(dbedit46.Field.AsDateTime,Year,month,day);
vdestdo_:=Datetostr(encodedate(Year+5,Month,Day));
|
_Winnie C++ Colorizer |
блиять сказал я опять и пристальнее присмотревшись к исходникам нашел еще с десяток мест такого кода
что бы заставить это работать пришлось дописать чуток кода для encodedate
который бы выполнял коррекцию 29.02.xxxx на 28.02.xxxx
nop - дополнительные потому что изначально проверка правила дату на 31.03.xxxx если год не високосный
.0064A7CC: 663DD807 cmp ax,007D8
.0064A7D0: 7415 je .00064A7E7
.0064A7D2: 6683FA02 cmp dx,002
.0064A7D6: 750F jne .00064A7E7
.0064A7D8: 6683F91D cmp cx,01D
.0064A7DC: 7509 jne .00064A7E7
.0064A7DE: 66B91C00 mov cx,0001C
.0064A7E2: 90 nop
.0064A7E3: 90 nop
.0064A7E4: 90 nop
.0064A7E5: 90 nop
.0064A7E6: 90 nop
.0064A7E7: 55 push ebp
.0064A7E8: 8BEC mov ebp,esp
.0064A7EA: 81C4F4FFFFFF add esp,0FFFFFFF4
.0064A7F0: E9D50ADCFF jmp .00040B2CA |
_Winnie C++ Colorizer |
такое вот классическое решение проблемы хххх года :))
Source: http://community.livejournal.com/code_wtf/123719.html