Требует действийможет затронуть работающую системуRaw payload содержит 24 non-merge commits и 10 merge commits; каждый non-merge commit покрыт. Маркеров superseded_by нет. Диапазоны исключения основаны на прямых последующих fix тех же routines в этом payload. Version bookkeeping files не учитывались.
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.
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 отклоняется.
Рекомендуется обновиться
Обновите OpenSSL clients и проверьте DNS/IP endpoints; задайте HostNamesCsv явно, если identity сертификата отличается от ServerAddress.
Публичный API
TOpenSslNetTls.AfterConnectionbehaviour-changed — Пустой HostNamesCsv теперь означает проверку ServerAddress, а не пропуск hostname verification.
Модули
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 нужна противоположная сеть.
Рекомендуется обновиться
Обновитесь до 2.4.17064 или новее и проверьте двустороннюю TLS-нагрузку; не берите этот retry без последующей очистки error queue.
Модули
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.
Рекомендуется обновиться
Пользователям OpenSSL 1.1/3.x следует взять build 2.4.17064 или новее и проверить async connect, accept, read и write failures.
Публичный API
ERR_clear_erroradded — Функция сброса error queue libcrypto доступна через dynamic и static OpenSSL bindings.
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 устраняет путь.
Рекомендуется обновиться
Не выпускайте build 2.4.17047; используйте 2.4.17048 или новее везде, где доступен FormatAdder.
Публичный API
FormatAdderbehaviour-changed — При результате в ноль bytes destination не выделяется и запись не выполняется.
Модули
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 не меняются.
Рекомендуется обновиться
Командам Delphi ARMv7 следует пересобрать и проверить interfaces, variants и packed-record JSON на реальном 32-bit Android.
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 или новее.
Модули
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.
Рекомендуется обновиться
Если присутствует pre-render sequence TSynLog, берите build 2.4.17046 или новее.
Модули
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 после обновления.
Модули
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.
Рекомендуется обновиться
Используйте build 2.4.17062 или новее, если TXmlParser Save/Restore работает с DOCTYPE.
Модули
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.
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.
Модули
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.
Модули
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.
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.
Модули
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 не меняется.
Рекомендуется обновиться
Проектам Delphi Darwin с Mach linker error следует пересобраться на этой версии или новее.
Модули
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; диагностика компактна и однострочна.
Модули
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 остаётся согласованным для последующей очистки.
Модули
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 вместо форматирования каждого вызова.
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.
Модули
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.
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 формы покрыты тестами.
Модули
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-диагностику.
23
Низкий
Тест неудачного statement использует silent exception class
Тест внешней БД #606 теперь выбрасывает и ждёт ESynLogSilent вместо ESqlDBException, чтобы IDE не показывала намеренную ошибку как шум.
Тесты
00a2da4f+4-4
tests: simplified #606 test when run in IDE
Влияние
Меняется только удобство теста; database exceptions приложения не затронуты.
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 не затронуты.