Требует действийможет затронуть работающую системуВ исходном payload нет отметок superseded_by. Два исключаемых окна основаны на последовательных diffs, которые явно завершают предыдущие изменения Win64 ABI и DNS TC=1. В этой ревизии TCachedValues нигде не используется вне объявления и реализации, поэтому дефект Exists затрагивает только новых пользователей.
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.
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; другие платформы сохраняют свои пути.
Рекомендуется обновиться
Развёртывания FPC_X64MM Win64 должны взять это вместе с 4af05f7 и пересобраться на build 2.4.16785 или новее, не останавливаясь на 2.4.16784.
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.
Рекомендуется обновиться
Для FPC_X64MM на Win64 используйте build 2.4.16785 или новее; пересоберите и выполните stress tests allocation, reallocation и free.
Модули
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 продолжает работать.
Рекомендуется обновиться
Обновите службы, разбирающие ответы внешних DNS resolvers, и добавьте malformed compression-pointer cases в protocol tests.
Публичный API
DnsParseStringbehaviour-changed — Недопустимые forward, self, reserved и out-of-range encoding теперь возвращают ноль.
Модули
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.
Рекомендуется обновиться
Обновите пользователей mormot.net.dns с пропавшими ответами Samba или других resolvers и используйте build 2.4.16790 с последующими TC checks.
Модули
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, а повреждённая длина завершается ошибкой без чтения следующей записи.
Рекомендуется обновиться
Обновите код, читающий TXT или HINFO через DnsParseData, и проверьте downstream parser, который мог компенсировать прежний неправильный текст.
Публичный API
DnsParseDatabehaviour-changed — RDATA TXT и HINFO теперь декодируются как DNS character-string.
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.
Рекомендуется обновиться
Для обработки TC=1 берите как минимум build 2.4.16787, лучше итог редакции с последующими parser fixes.
Модули
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 дефектен в этой ревизии.
Модули
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 фреймворка и пути приложений не меняются.
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 приложения не меняются.