beldmit: (Программизм)
[personal profile] beldmit
Пару недель назад мне прислали багрепорт на open engine — открытую реализацию алгоритмов ГОСТа для OpenSSL. Это меня с одной стороны обрадовало — приятно, когда твоим кодом пользуются — а с другой огорчило: год назад всё работало. Правда, это было ещё до релиза версии 1.1.0...

Вскрытие показало, что в Makefile отсутствовала директива -Werror, из-за чего выдавались только предупреждения в тех местах, где API поменялось. Исправление сборки само по себе не изменило ситуацию, пришлось лезть в дебаггер.

Две ошибки я устранил быстро, и заработал TLS с 2001-м годом. А с 2012-м ситуация не исправилась.

Несколько вечеров я провёл, долбясь головой об стенку и изучая каждый diff за год, благо их немного. Потом удалось воспроизвести ошибку не на TLS, где отлаживать приходилось с двух концов, а на smime. И на пятый день индеец Зоркий Глаз заметил, что полностью изменена была система сборки, и в CMake-овских правилах не было проверок на endianess. По нелепому стечению обстоятельств затрагивало это только два алгоритма, которые я заподозрить не успел. После исправления всё заработало. Так что этот хвост не будет меня беспокоить в новогоднюю ночь.

Date: 2016-12-19 08:44 am (UTC)
From: [identity profile] tasic.livejournal.com
У меня товарищ, по работе, где он сейчас работает, занят работой с кодом, который был написан для систем с байтом, состоящим из 9 бит. Развлекается от души...

Date: 2016-12-19 08:50 am (UTC)
From: [identity profile] beldmit.livejournal.com
А девятый бит - чётность?
Но блин, это ж при портировании проще переписать с нуля.

Date: 2016-12-19 08:59 am (UTC)
From: [identity profile] tasic.livejournal.com
Я подробно не расспрашивал -- редко видимся последнее время, так что было о чем поговорить. Но насколько я понял, не четность. Бывает максимальное значение байта 511. Он не то, чтобы портирует, но сопровождает портированное раньше и иногда приходится "допортировать" какие-то куски. Когда им рассказывали о этом коде, то была фраза приблизительно такая "А если видим в коде #ifdef <не_помню_какая_система_с_9_битами>, то этот участок просто пропускаем до #endif". Но насколько я понял его слова, иногда туда таки приходится лазить. Там какой-то очень древний код, берущий свое начало чуть ли не в bell labs.
Edited Date: 2016-12-19 09:00 am (UTC)

Profile

beldmit: (Default)
beldmit

June 2017

S M T W T F S
    123
45678910
111213141516 17
18192021 222324
252627282930 

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 24th, 2017 05:18 am
Powered by Dreamwidth Studios