mORMot2 DailyЕжедневный обзор коммитов апстрима

TLS-проверка, безопасное форматирование и мобильная сеть Delphi готовы

Пользователям OpenSSL следует взять всю transport-последовательность: перекрёстные socket retries, проверку hostname по умолчанию и очистку error queue в OpenSSL 1.x/3.x. В одной build регрессия FormatAdder могла писать через неверный адрес при пустом результате. Delphi Android/iOS получают System.Net HTTP backends, Delphi ARMv7 становится рабочим, а TXmlParser принимает простые DOCTYPE без загрузки DTD entities.

Коротко

  • Переходите на build 2.4.17065 в 743a53fd4cb3af700463b0d143581ce17c6c8b31.
  • OpenSSL clients проверяют ServerAddress при пустом HostNamesCsv; OpenSSL 1.x/3.x очищает старые ошибки перед connect, accept, read и write.
  • Избегайте 2.4.17025–2.4.17063 с незавершёнными OpenSSL retries и 2.4.17047 с overflow-путём FormatAdder для пустого вывода.
  • Delphi Android/iOS могут использовать TDelphiNetHttp, TRestHttpClientDelphiNet и TSqlDBDelphiNetConnectionProperties через TLS операционной системы.
  • Delphi Android ARMv7 получает ABI stubs, выравнивание packed fields при JSON и variadic-call support.
  • TXmlParser по умолчанию игнорирует простой внешний DOCTYPE; для строгого отказа используйте xpoRejectDocType, internal subsets не поддерживаются.

Рекомендации по обновлению

Переходите на build 2.4.17065. Для OpenSSL проверьте DNS/IP при пустом HostNamesCsv, отклонение сертификатов и WANT-переходы SSL_read/SSL_write под OpenSSL 1.1/3.x. Проверьте прямые вызовы UniqueRawUtf8ZeroToTilde: теперь функция возвращает PUtf8Char и заменяет все control bytes ниже #32, а не только #0. Строгим XML-потребителям нужен xpoRejectDocType. На каждой Delphi mobile цели проверьте System.Net redirects, compression, proxy и certificate callbacks.

Сборка2.4.17024 → 2.4.17065
Коммиты34
Строки+2648 -805
Чтение5 мин

24 из 24 записей · 34 коммитов в апстриме

Сюжеты
# Запись Категория Модули
1 Критический OpenSSL client проверяет ServerAddress без списка hostnames TOpenSslNetTls.AfterConnection передаёт ServerAddress в SSL_set1_host при пустом Context.HostNamesCsv. Явные CSV names используют SSL_set1_host для первого и SSL_add1_host для остальных; partial wildcards запрещены. Безопасность mormot.lib.openssl11 c2012a28+8-9

lib: fixed TOpenSslNetTls.AfterConnection hostname verification

Влияние

Ранее OpenSSL client с проверкой сертификата, но без HostNamesCsv проверял chain без expected hostname. Теперь сертификат другого host отклоняется.

Публичный API

  • TOpenSslNetTls.AfterConnectionbehaviour-changed — Пустой HostNamesCsv теперь означает проверку ServerAddress, а не пропуск hostname verification.

Arnaud Bouchez · 16:28 UTC · открыть коммит на GitHub →

2 Высокий OpenSSL read/write повторяют противоположное socket-направление TOpenSslNetTls.Receive ждёт при SSL_ERROR_WANT_WRITE от SSL_read, а Send — при SSL_ERROR_WANT_READ от SSL_write. WaitRetry ждёт нужные TNetEvents по 100 мс и выдаёт timeout через пять секунд. Исправления mormot.lib.openssl11 c52d3378+55-28

lib: fixed TOpenSslNetTls.Receive/Send socket level retry

Влияние

Renegotiation и TLS-переходы на async sockets больше не завершаются сразу ошибкой, когда OpenSSL нужна противоположная сеть.

Arnaud Bouchez · 07:11 UTC · открыть коммит на GitHub →

3 Высокий Retries OpenSSL 1.x/3.x начинаются с чистой error queue ERR_clear_error добавлен в dynamic/static libcrypto surfaces. CheckProc, Receive и Send вызывают его перед SSL_connect, SSL_accept, SSL_read или SSL_write, как требуется до OpenSSL 3.x. Исправления mormot.lib.openssl11+1 b999062f+24-12

lib: fixed TOpenSslNetTls error reset for OpenSSL < 4.x

Влияние

Старые per-thread OpenSSL errors больше не загрязняют retry handshake/I/O, предотвращая ложный fatal и неверную диагностику на OpenSSL 1.1/3.x.

Публичный API

  • ERR_clear_erroradded — Функция сброса error queue libcrypto доступна через dynamic и static OpenSSL bindings.

Arnaud Bouchez · 16:44 UTC · открыть коммит на GitHub →

4 Высокий FormatAdder больше не пишет через пустое состояние formatter FormatAdder вызывает Dest.Add и WriteAll только при ненулевом TFormatUtf8.size. Пустой format/arguments больше не входят в WriteAll без initialized blocks. Исправления mormot.core.text 57b8cb89+5-4

core: fixed FormatAdder() potential buffer overflow

Влияние

Регрессия одной build могла читать uninitialized formatter entries и копировать через destination нулевого append, вызывая buffer overrun или crash. Guard устраняет путь.

Публичный API

  • FormatAdderbehaviour-changed — При результате в ноль bytes destination не выделяется и запись не выполняется.

Модули

Arnaud Bouchez · 14:22 UTC · открыть коммит на GitHub →

5 Высокий Delphi Android ARMv7 получает рабочие interface calls и packed JSON ARM object предоставляет armfakestub, armcallmethod и 128 VMT thunks для Delphi LLVM. ABI помещает by-reference result в R0, Self в R1; JSON использует aligned copy для packed float/Int64, а DispInvoke соблюдает AAPCS32 va_list alignment. Компилятор и платформы mormot.core.interfaces+4 7cda59c1+348-33

all: make the Delphi Android 32-bit (ARMv7) target work

Влияние

Delphi Android 32-bit может выполнять interface SOA/mock calls, сериализовать packed numbers без ARM alignment fault и правильно передавать 64-bit variadic values. Desktop пути Delphi/FPC не меняются.

Stefan Diestelmann · 09:21 UTC · открыть коммит на GitHub →

6 Средний Stack traces TSynLog начинаются с application caller LockAndPrepareWrite принимает skip для AppendCallerShort. Форматированные, text и RTTI wrappers пропускают свой frame, прямые Log/Enter сохраняют depth; форматированный Enter больше не перенаправляется через EnterLocal. Исправления mormot.core.log e0a83a37+32-19

core: fixed TSynLog stack trace

Влияние

LevelStackTrace указывает на application call site вместо внутренних wrappers TSynLog, улучшая атрибуцию логов.

Стоит взглянуть

Если tooling разбирает точные stack positions, сравните LevelStackTrace после обновления до 2.4.17046 или новее.

Модули

Arnaud Bouchez · 10:50 UTC · открыть коммит на GitHub →

7 Средний Headers TSynLog единообразно готовятся под удерживаемым lock LockAndPrepareWrite/LockAndPrepareEnter получают instance и вызывают LogHeader после writer lock. Дубли удалены, а UnicodeString Log overload передаёт aInstance вместо неверного Instance. Исправления mormot.core.log efb51396+19-25

core: some TSynLog fixes and optimization

Влияние

Log headers и object attribution согласованы для raw, text, RTTI и Enter; UnicodeString logs больше не рискуют связать неверный instance.

Модули

Arnaud Bouchez · 12:32 UTC · открыть коммит на GitHub →

8 Средний SQL-логи сохраняют placeholders после лимита размера TSqlDBStatement.ComputeSqlWithInlinedParams исправляет maxAllowed на maxSize-W.TextLength. После исчерпания бюджета значения заменяются '?' до конца SQL; getters допускают self=nil, exception logging проверяет SQL level напрямую. Исправления mormot.db.sql d080dbe2+22-17

db: fixed TSqlDBStatement logging process

Влияние

Ограниченный diagnostic SQL больше не получает underflow остатка и не теряет хвост запроса, сохраняя структуру без чрезмерных значений.

Стоит взглянуть

Если эксплуатация зависит от SQL failure logs, сравните вывод LoggedSqlMaxSize после обновления.

Модули

Arnaud Bouchez · 07:45 UTC · открыть коммит на GitHub →

9 Средний XML Save/Restore сохраняют допустимость DOCTYPE TXmlParser.Save сохраняет fStackLen[0] в свободном byte QWord, а Restore восстанавливает его. Состояние prolog/root сохраняется вместе с Kind, Depth и cursor. Исправления mormot.core.fmt adb58c1a+26-6

core: DOCTYPE should be properly supported after Save/Restore

Влияние

Speculative parsing вокруг prolog DOCTYPE можно восстановить и повторить без ложного решения, что декларация идёт после root.

Модули

Arnaud Bouchez · 16:03 UTC · открыть коммит на GitHub →

10 Средний TDelphiNetHttp встраивает transport Delphi System.Net TDelphiNetHttp теперь напрямую владеет THTTPClient в mormot.net.client; временный unit mormot.lib.nethttp удалён. Он отображает timeouts, proxy, headers, auth, redirects, streams, ответы и certificate callback, избегая двойной распаковки gzip/deflate на iOS. Новые возможности mormot.defines+1 4964dc05+139-252

net: TDelphiNetHttp as a single class, no new unit

Влияние

Delphi Android/iOS может выполнять HTTP/HTTPS через TLS платформы без libcurl/OpenSSL. Класс не реализует progress events загрузки.

Стоит взглянуть

Мобильным Delphi-проектам следует проверить proxy, redirect, compressed responses и certificate errors на каждой версии OS.

Публичный API

  • TDelphiNetHttpadded — При USEDELPHINETHTTP доступна публичная реализация THttpRequest на Delphi System.Net.HttpClient.

Stefan Diestelmann · 08:51 UTC · открыть коммит на GitHub →

11 Средний TXmlParser по умолчанию принимает простые DOCTYPE TXmlParser распознаёт <!DOCTYPE name ...> в prolog и пропускает до '>', учитывая quotes. DOCTYPE после root, internal subsets, nested '<' и custom entities отклоняются; xpoRejectDocType возвращает полный отказ. Новые возможности mormot.core.fmt 22056546+128-11

core: TXmlParser ignore simple DOCTYPE by default

Влияние

SVG/XML с внешним SYSTEM/PUBLIC может разбираться без загрузки DTD. Строгие callers, зависевшие от xpeUnsupportedMarkup, должны включить xpoRejectDocType.

Стоит взглянуть

Добавьте xpoRejectDocType там, где политика требует отклонять любой DOCTYPE, а не безопасно игнорировать простой.

Публичный API

  • xpoRejectDocTypeadded — Новый TXmlParserOption возвращает прежнее поведение с отказом для любого DOCTYPE.

Модули

Arnaud Bouchez · 15:36 UTC · открыть коммит на GitHub →

12 Средний REST HTTPS по умолчанию использует Delphi System.Net на mobile targets TRestHttpClientDelphiNet связывает TRestHttpClientRequest с TDelphiNetHttp. Без USELIBCURL и с USEDELPHINETHTTP alias TRestHttpsClient указывает на новый class вместо socket client. Новые возможности mormot.rest.http.client ad2fbdba+43-8

rest: HTTP/HTTPS RESTful JSON default mORMot Client class with Delphi System.Net

Влияние

Существующий код TRestHttpsClient на Delphi Android/iOS получает HTTPS через TLS OS без смены имени class.

Стоит взглянуть

Проверьте, что mobile builds связывают TRestHttpsClient с нужным backend, и протестируйте auth/certificate policy.

Публичный API

  • TRestHttpClientDelphiNetadded — Условно доступен публичный REST client class на Delphi System.Net.HttpClient.
  • TRestHttpsClientbehaviour-changed — При USEDELPHINETHTTP без USELIBCURL alias теперь выбирает TRestHttpClientDelphiNet.

Arnaud Bouchez · 14:48 UTC · открыть коммит на GitHub →

13 Средний Удалённый SQL proxy получает backend Delphi System.Net mormot.db.proxy добавляет TSqlDBDelphiNetConnectionProperties под USEDELPHINETHTTP. Constructor создаёт TDelphiNetHttp, класс регистрируется для definition-based construction. Новые возможности mormot.db.proxy+1 d9d710d1+39-5

db: introducing TSqlDBDelphiNetConnectionProperties

Влияние

Delphi mobile clients могут обращаться к удалённому mormot.db.sql по HTTP/HTTPS через сетевой stack OS.

Стоит взглянуть

Проектам с этим backend следует проверить authentication и remote statements на целевой mobile OS.

Публичный API

  • TSqlDBDelphiNetConnectionPropertiesadded — При USEDELPHINETHTTP доступен публичный HTTP SQL-proxy connection class на TDelphiNetHttp.

Arnaud Bouchez · 14:44 UTC · открыть коммит на GitHub →

14 Средний UniqueRawUtf8ZeroToTilde теперь возвращает ограниченный очищенный текст UniqueRawUtf8ZeroToTilde меняется с procedure на function, возвращающую PUtf8Char. View обрывается на MaxSize, а все bytes ниже #32 заменяются '~', не только #0. Новые возможности mormot.core.unicode 1f32a7e3+15-12

core: refined UniqueRawUtf8ZeroToTilde()

Влияние

Callers могут добавлять ограниченную C-string без изменения managed length RawUtf8. Логи также заменяют tabs, переводы строк и прочие controls.

Стоит взглянуть

Найдите прямые вызовы, если код зависит от control chars или старого объявления procedure.

Публичный API

  • UniqueRawUtf8ZeroToTildesignature-changed — Routine теперь возвращает PUtf8Char и очищает все control bytes ниже #32, сохраняя allocation length RawUtf8.

Arnaud Bouchez · 09:59 UTC · открыть коммит на GitHub →

15 Средний Delphi Darwin линкует Mach process API из clib Объявления host_processor_info, mach_host_self, vm_deallocate и mach_task_self теперь используют external clib name, а не имя symbol как файл библиотеки. Компилятор и платформы mormot.core.os.posix 60e27c19+4-4

core: name the library for the mach externals on Darwin

Влияние

Delphi macOS/iOS builds больше не падают при link с file not found для Mach symbols; разрешение FPC не меняется.

Stefan Diestelmann · 07:56 UTC · открыть коммит на GitHub →

16 Низкий Ошибки SOA contract показывают только килобайт очищенного JSON TServiceFactoryClient.FakeContractRetrieve строит сообщение о неверном ответе через Join и ограниченный PUtf8Char от UniqueRawUtf8ZeroToTilde, максимум 1 KB. Исправления mormot.soa.client 9dfdcc05+4-7

soa: fixed TServiceFactoryClient error message content

Влияние

Неверные SOA responses больше не добавляют неограниченный хвост managed string после terminator; диагностика компактна и однострочна.

Модули

Arnaud Bouchez · 10:00 UTC · открыть коммит на GitHub →

17 Низкий Логи batch rollback больше не меняют managed length JSON TRestOrmServerBatchSend.OnError передаёт PUtf8Char от UniqueRawUtf8ZeroToTilde в formatter и ограничивает данные SizeOf(TBuffer4K), не вставляя terminator в fData перед логированием managed string. Исправления mormot.orm.server c2393ce7+3-4

orm: fixed TRestOrmServerBatchSend.OnError logged content

Влияние

Диагностика partial rollback ограничена одной строкой, а batch buffer остаётся согласованным для последующей очистки.

Модули

Arnaud Bouchez · 09:59 UTC · открыть коммит на GitHub →

18 Низкий AppendSysInfo переиспользует секундные binary/text snapshots RetrieveSysInfo заполняет optional binary/text outputs под OSSafe из секундного TSysInfo cache. Текст хранится в TShort95, а AppendSysInfo копирует его в остаток ShortString. Производительность mormot.core.os+2 743a53fd+52-36

core: cache AppendSysInfo() text for 1 second

Влияние

Повторный LevelSysInfo в течение секунды не перестраивает CPU/load/memory text и использует тот же snapshot. Значения могут не меняться до секунды.

Публичный API

  • AppendSysInfobehaviour-changed — Публичный helper теперь добавляет секундный cached text snapshot вместо форматирования каждого вызова.

Arnaud · 21:24 UTC · открыть коммит на GitHub →

19 Низкий Состояние форматирования TSynLog переходит в pre-render record TPreRenderFmt объединяет format, arguments, instance, length и stack buffer 4 KB. TSynLogFamily.PreRenderFmt и форматированные Enter/Log передают record вместо множества параметров, сохраняя direct-rendering fallback. Внутреннее устройство mormot.core.log 723e8275+102-84

core: rewritten TSynLogFamily.PreRenderFmt logic

Влияние

Это внутренняя plumbing без ожидаемого изменения API/вывода, но она начинает последовательность последующих fixes.

Модули

Arnaud Bouchez · 10:01 UTC · открыть коммит на GitHub →

20 Низкий Wrappers TFormatUtf8 и TSynLog упрощены внутри TFormatUtf8 напрямую хранит last/max и использует общий WriteAll; TSynLog заменяет LogFmt на AddPreRenderFmt. Комментарии SQLite фиксируют лимит pre-render 4 KB. Функциональных изменений не планировалось. Внутреннее устройство mormot.core.log+2 b47efdb5+78-72

core: some refactoring with no functional change

Влияние

Refactor внутренний, но крайний случай FormatAdder с пустым выводом исправлен следующим commit; не оставайтесь на 2.4.17047.

Arnaud Bouchez · 14:08 UTC · открыть коммит на GitHub →

21 Низкий Сканирование DOCTYPE упрощено без расширения допустимого markup ParseDocType объединяет проверки root state, option, имени и границ, затем одним циклом сканирует quotes и запрещённый markup. Добавлен тест comment перед DOCTYPE. Внутреннее устройство mormot.core.fmt 3d2c0c85+36-49

core: simplified TXmlParser.ParseDocType for #614

Влияние

Публичное поведение сверх предыдущей feature не меняется; accepted/rejected формы покрыты тестами.

Модули

Arnaud Bouchez · 15:50 UTC · PR #614 · открыть коммит на GitHub →

22 Низкий Живой DNS-тест выводит время и детали raw response Тест yahoo.com теперь использует DnsQuery, сверяет raw/parsed header counts и печатает время, размер, rcode и truncation. Тесты e4ebd6dc+29-13

tests: enhanced "dig yahoo.com" test with console output

Влияние

Поведение framework не меняется; сбои CI или локальных тестов дают более полезную DNS-диагностику.

Arnaud Bouchez · 07:37 UTC · открыть коммит на GitHub →

23 Низкий Тест неудачного statement использует silent exception class Тест внешней БД #606 теперь выбрасывает и ждёт ESynLogSilent вместо ESqlDBException, чтобы IDE не показывала намеренную ошибку как шум. Тесты 00a2da4f+4-4

tests: simplified #606 test when run in IDE

Влияние

Меняется только удобство теста; database exceptions приложения не затронуты.

Arnaud Bouchez · 07:51 UTC · PR #606 · открыть коммит на GitHub →

24 Низкий Log viewer показывает платформу и делает строки плотнее TMainLogView добавляет OS_TEXT и CPU_ARCH_TEXT в caption и меняет расчёт высоты строк. Также исправлен JSON indent. Обслуживание mormot.tools.logview b123f603+7-6

tools: minor TMainLogView tweaks

Влияние

Меняется только desktop log viewer; framework logging и JSON serialization не затронуты.

Arnaud Bouchez · 14:42 UTC · открыть коммит на GitHub →

Активность апстрима коммитов в день · последние 60 дней
Коммиты977
Активных дней44/60
Пик активности2026-09-30
Максимум60
2026-08-15: 0 commits2026-08-16: 0 commits2026-08-17: 0 commits2026-08-18: 0 commits2026-08-19: 0 commits2026-08-20: 0 commits2026-08-21: 0 commits2026-08-22: 0 commits2026-08-23: 0 commits2026-08-24: 0 commits2026-08-25: 0 commits2026-08-26: 0 commits2026-08-27: 26 commits2026-08-28: 11 commits2026-08-29: 10 commits2026-08-30: 1 commit2026-08-31: 23 commits2026-09-01: 0 commits2026-09-02: 20 commits2026-09-03: 29 commits2026-09-04: 35 commits2026-09-05: 13 commits2026-09-06: 0 commits2026-09-07: 0 commits2026-09-08: 23 commits2026-09-09: 10 commits2026-09-10: 17 commits2026-09-11: 23 commits2026-09-12: 14 commits2026-09-13: 9 commits2026-09-14: 7 commits2026-09-15: 4 commits2026-09-16: 24 commits2026-09-17: 26 commits2026-09-18: 21 commits2026-09-19: 59 commits2026-09-20: 13 commits2026-09-21: 5 commits2026-09-22: 34 commits2026-09-23: 17 commits2026-09-24: 57 commits2026-09-25: 22 commits2026-09-26: 26 commits2026-09-27: 0 commits2026-09-28: 2 commits2026-09-29: 19 commits2026-09-30: 60 commits2026-10-01: 26 commits2026-10-02: 30 commits2026-10-03: 32 commits2026-10-04: 15 commits2026-10-05: 1 commit2026-10-06: 26 commits2026-10-07: 37 commits2026-10-08: 27 commits2026-10-09: 35 commits2026-10-10: 33 commits2026-10-11: 9 commits2026-10-12: 11 commits2026-10-13: 35 commits
2026-08-152026-10-13