Вы здесь

Ошибка в реализации Base64

Сегодня на сайте Дымящего оружия прочитал исправленную реализацию в Base64Encode.

Всем известная реализация Base64 на http://www.delphi3000.com/ от Daniel Wischnewski из Delphi-PRAXiS - далеко не "noname" товарищ. Исходник имеет рейтинг 9/10. Разошёлся по многим FAQ и используется в куче программ (в том числе, он использовался в EurekaLog).

Оказывается, что эта реализация вообще не работает (под этим подразумевается, что она не работает корректно, иными словами, не должна работать вообще). Конкретно: этот код содержит memory corruption bug. Ещё конкретнее: в Base64Encode, третья строка "mov EAX, EBX" - какой-такой ещё EBX? Он неопределён. Правильный вариант выглядит так: "mov EAX, InSize" (как это и сделано в Base64Decode).

Ситуацию в этом случае усложняет то, что пример написан на ассемблере, что затрудняет его чтение и анализ.

Вот корректный вариант реализации Base64, который использует только Паскаль и, более того, работает быстрее вышеуказанной ассемблерной реализации:

 

Оригинал статьи: http://www.gunsmoker.ru/2010/05/blog-post_25.html.