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

DNS повторяет усечённые ответы, а Win64 allocator соблюдает ABI

DNS-клиент теперь повторяет любой усечённый UDP-ответ по TCP и безопаснее отвергает повреждённые сжатые имена; текст записей TXT и HINFO декодируется по формату с префиксом длины. Пользователи FPC Win64 получают двухэтапное исправление: mormot.core.fpcx64mm больше не меняет stack pointer вокруг вызовов, а lock routine, способная вызвать fault под эмуляцией Windows ARM, заменена. Новый wrapper TCachedValues пока не готов к применению, потому что ветви сравнения в Exists в этой ревизии перепутаны.

Коротко

  • DnsQuery повторяет ответ TC=1 по TCP, даже если UDP-пакет не содержит answers или несёт код ошибки.
  • DnsParseString отвергает forward, self и reserved compression pointers; TXT и HINFO теперь следуют RFC-кодированию с префиксом длины.
  • mormot.core.fpcx64mm на FPC Win64 больше не использует push/pop вокруг ABI-чувствительных вызовов; берите build 2.4.16790, а не 2.4.16784.
  • TCachedValues стал публичным, но TCachedValues.Exists в этой ревизии всегда даёт miss с default comparator и игнорирует переданный CustomCompare.

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

Пользователям FPC_X64MM на FPC Win64 и приложениям с mormot.net.dns следует перейти на build 2.4.16790. Не останавливайтесь на build 2.4.16784 до замены оставшихся Win64 push/pop или на build 2.4.16786 до поддержки TC=1 с кодом ошибки. Не применяйте TCachedValues.Exists до исправления выбора comparator.

Сборка2.4.16776 → 2.4.16790
Коммиты10
Строки+445 -176
Чтение3 мин

9 из 9 записей · 10 коммитов в апстриме

Сюжеты
# Запись Категория Модули
1 Высокий Win64 allocator assembly переносит сохранение состояния в FPC-managed locals mormot.core.fpcx64mm переписывает MSWINDOWS-пути _GetMem, _ReallocMem и _AllocMem, сохраняя non-volatile registers и временные значения в declared locals вместо push/pop вокруг calls. mormot.core.os также удаляет специальный x86-64 assembler TRWLock.ReadOnlyLock и использует Pascal LockedExc/SpinAndWait после наблюдавшегося GPF под Windows ARM PRISM. Исправления mormot.core.fpcx64mm+1 3aca6e26+109-66

core: fixed fpcx64mm on Win64 ABI

Влияние

FPC Win64 с FPC_X64MM больше не изменяет rsp вокруг ABI-чувствительных вложенных calls в основных allocation paths, снижая риск crash или corruption. Windows ARM при выполнении x86-64 через PRISM избегает наблюдавшегося general-protection fault в TRWLock; другие платформы сохраняют свои пути.

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

2 Высокий Оставшиеся вызовы Win64 allocator больше не сохраняют регистры через push/pop mormot.core.fpcx64mm добавляет MSWINDOWS local save slots в PrefetchMediumBlock, FreeMediumBlock и _FreeMem. Non-volatile registers, размер medium block и return value сохраняются в compiler-owned frame без изменения rsp вокруг вложенных calls; путь System V сохраняет push/pop. Исправления mormot.core.fpcx64mm 4af05f7b+48-12

core: (hopefully) one last fpcx64mm pass for Win64 ABI fixes

Влияние

Это завершает исправление Win64 ABI для allocation/free paths, где alignment и shadow space контролирует FPC. Службы с FPC_X64MM на Win64 избегают оставшегося риска call sites; POSIX/Linux assembly сохраняет быстрый путь без frame.

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

3 Высокий Сжатые DNS-имена отвергают циклы, forward pointers и reserved labels DnsParseString в mormot.net.dns отдельно вычисляет каждый 14-bit compression offset и отвергает offset не раньше pointer position либо за границей ответа. Метод сохраняет только первую return position и до копирования отвергает reserved label forms %01xxxxxx и %10xxxxxx. Исправления mormot.net.dns ddb63463+15-10

net: fixed DnsParseString() decoding against RFC 1035

Влияние

Повреждённый или злонамеренный DNS-ответ больше не удерживает parser в бесконечной self/forward compression chain, а выходящий за границу pointer отклоняется до доступа. Корректная обратная компрессия RFC 1035 продолжает работать.

Публичный API

  • DnsParseStringbehaviour-changed — Недопустимые forward, self, reserved и out-of-range encoding теперь возвращают ноль.

Модули

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

4 Высокий Пустой усечённый UDP-ответ теперь запускает повтор DNS по TCP DnsQuery в mormot.net.dns сначала принимает UDP-ответ при корректных header, источнике, transaction ID и response flag, затем проверяет Truncation до требований размера body и ненулевого AnswerCount. Поэтому TC=1 переключает на существующий TCP path даже без answers. Исправления mormot.net.dns 7c79f344+12-9

net: fixed DNS responses with TC=1

Влияние

Resolvers наподобие текущих версий Samba, возвращающие по UDP только усечённый header, больше не вызывают ложную ошибку DNS. Клиент следует RFC 2181 и получает полный ответ по TCP.

Модули

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

5 Средний Записи TXT и HINFO правильно декодируют поля character-string mormot.net.dns добавляет bounded helper DnsParseCharString. DnsParseData объединяет все length-prefixed строки TXT RDATA, декодирует ровно две строки HINFO как CPU и OS и очищает Text при выходе компонента за границу записи. В остальных units исправлена только орфография комментариев или LDAP error string. Исправления mormot.core.text+2 55352bf1+51-7

net: properly decode TXT/HINFO DNS fields content

Влияние

Ответ TXT больше не выдаёт байты длины как текст и не разбирается как сжатое доменное имя. HINFO возвращает пару CPU и OS, а повреждённая длина завершается ошибкой без чтения следующей записи.

Публичный API

  • DnsParseDatabehaviour-changed — RDATA TXT и HINFO теперь декодируются как DNS character-string.

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

6 Средний DNS header flags и TCP fallback принимают корректное поведение сервера TDnsHeader.GetZ теперь читает Flags2, где находятся биты Z. DnsQuery проверяет TC до отклонения кода ошибки, поэтому любой усечённый UDP-ответ может запустить TCP, и больше не требует RecursionAvailable в финальном TCP-ответе. Исправления mormot.net.dns f2d633a0+7-8

net: some other fixes to our DNS parser

Влияние

Авторитетные или нерекурсивные DNS-серверы могут отвечать по TCP без RA, а усечённый UDP-пакет с кодом ошибки всё равно получает обязательный TCP retry. Проверка Z теперь читает правильный байт header.

Модули

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

7 Средний Новый thread-safe кэш пока неправильно ищет значения mormot.core.unicode добавляет публичный record/object TCachedValues с TLightLock, отсортированным TRawUtf8DynArray, сбросом окна через GetTickSec shr TixShr и методами Reset, Exists и Add. В Exists ветвь Assigned(CustomCompare) вызывает default overload, а ветвь nil передаёт nil в custom-comparison overload. Новые возможности mormot.core.unicode 047555ca+64-2

core: new TCachedValues thread-safe wrapper

Влияние

При default CustomCompare=nil TCachedValues.Exists вызывает overload, который сразу возвращает not found из-за отсутствия comparator. При custom comparator Add сортирует с ним, но Exists ищет default case-sensitive comparator. Новым пользователям нельзя полагаться на Exists в build 2.4.16790.

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

Не применяйте TCachedValues.Exists в этой ревизии; дождитесь исправления либо локально поменяйте ветви comparator и добавьте тесты default/custom comparisons.

Публичный API

  • TCachedValuesadded — Публичный time-windowed sorted RawUtf8 cache с Reset, Exists и Add; Exists дефектен в этой ревизии.

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

8 Низкий Файлы сетевых regression tests остаются рядом с test executable TNetworkProtocols.Setup создаёт temp-каталог рядом с executable, и тесты OpenAPI, Kerberos keytab, DHCP lease и HTTP body-download используют его вместо system temp или WorkDir. Sequence suffix также предотвращает конфликты имён body-download. Тесты 73b7ed6a+57-27

tests: network protocols won't use system temp folder

Влияние

Тесты избегают проблем прав system temp, а фоновые тесты больше не видят временные файлы друг друга в WorkDir. Runtime фреймворка и пути приложений не меняются.

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

9 Низкий Тесты PDF-шрифтов принимают известные hashes дополнительных конфигураций Windows TTestUiPdf.FontEmbeddingAndHashValidation заменяет две таблицы hash по версии OS на пять допустимых hashes через IntegerScanExists. Тест также использует явную переменную TPdfDocument, сообщает имя шрифта и hex hash и выполняет второй проход только при доступном ANSI_CHARSET replacement. Тесты 5ee01b27+28-29

test: refined TTestUiPdf.FontEmbeddingAndHashValidation

Влияние

PDF regression tests допускают известные различия embedding из-за установленных системных шрифтов, а не дефекта фреймворка. Код генерации PDF и output приложения не меняются.

Arnaud Bouchez · 08:39 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