Вы здесь
Ошибка в реализации 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.