Требует действийможет затронуть работающую системуВ исходном payload нет отметок superseded_by. Диапазон исключения основан на встроенных последовательных diffs, которые явно исправляют более ранние commits этой же редакции. DHCP merge оставляет mormot.commit-num.inc равным 16805, поэтому рекомендуемая ревизия новее нумерованной build без смены отображаемой версии.
DNS получил EDNS, строгую проверку ответов и IPv6 resolvers
DNS-клиент теперь объявляет EDNS UDP payload размером 1232 байта, откатывается при FORMERR, принимает port resolver и IPv6-адреса и до разбора записей проверяет отражённый вопрос и источник ответа. Реализация несколько раз исправлялась в этом наборе, поэтому пользователям DNS следует брать финальную build, а не промежуточную ревизию. TCachedValues.Exists исправлен и протестирован, а DHCP scope теперь отправляет настроенное доменное имя.
Коротко
- Для полной серии DNS переходите на 2.4.16805; builds 2.4.16794–2.4.16804 содержат промежуточные состояния cache, EDNS, parsing или validation.
- DnsQuery использует EDNS с 1232 байтами по умолчанию, запоминает fallback после FORMERR и проверяет question, type, class, source address и source port ответа.
- Определения resolver теперь принимают IPv4 со встроенным port и IPv6-адреса; DnsBuildQuestion открывает необязательный EDNS payload size.
- TCachedValues.Exists теперь выбирает правильный comparator, а Exists/Add по умолчанию используют cache window без истечения.
- TDhcpState.AddRegularOptions теперь отправляет DHCP option 15 из Scope.DomainName, сохраняя приоритет per-client rule.
Рекомендации по обновлению
Пользователям DNS следует перейти на build 2.4.16805 и взять всю серию. Не останавливайтесь на 2.4.16794–2.4.16804: последовательные commits исправляют cache expiry, EDNS FORMERR fallback, позиционирование ответа, decompression и reply matching. Пользователям TCachedValues нужно обновиться с 2.4.16790 ради исправления comparator. DHCP-серверам с Scope.DomainName нужен финальный head commit поверх 2.4.16805.
16 из 16 записей · 17 коммитов в апстриме
1
Высокий
DNS-ответ теперь должен совпадать с resolver, port и исходным вопросом
DnsSendQuestionRaw принимает IPv4 или IPv6 адрес resolver и отвергает UDP-ответы, у которых source IP или port отличается от запрошенного endpoint. DnsQuery до ParseDnsResult распаковывает и сравнивает отражённые QName, QTYPE и QCLASS, а TDnsHeader.SetZ теперь пишет Flags2 вместо Flags.
Безопасность
mormot.net.dns
a415524a+69-62
net: several DNS fixes
Влияние
Повреждённый, несовпадающий или неверно направленный ответ пропускается в пользу следующего resolver, а не разбирается как запрошенный. Приложения также могут напрямую опрашивать IPv6 DNS server.
Рекомендуется обновиться
Обновите приложения с mormot.net.dns и внешними resolvers и проверьте явную IPv6 либо нестандартный port конфигурацию.
Публичный API
DnsSendQuestionbehaviour-changed — Endpoint resolver может быть IPv6, а UDP-ответ обязан совпадать по source address и port.DnsQuerybehaviour-changed — Успешный ответ должен отражать запрошенные QName, QTYPE и QCLASS до принятия записей.TDnsHeader.Zbehaviour-changed — Setter теперь обновляет второй байт DNS flags, где хранятся Z bits.
Модули
2
Высокий
DNS decompression отвергает циклические pointer chains и длинные имена
Внутренняя DnsDecompress теперь отслеживает последний compression offset, требует движения каждого pointer назад, отвергает reserved forms и до копирования в fixed buffer применяет лимит DNS-имени 255 символов. DnsParseString использует эту bounded routine.
Безопасность
mormot.net.dns
ae18fe67+53-44
net: hardened DNS decompression logic
Влияние
Повреждённый или злонамеренный DNS packet больше не удерживает decompressor в цикле и не переполняет временный buffer имени. Корректные backward-compressed names продолжают декодироваться.
Рекомендуется обновиться
Обновите службы, разбирающие ответы недоверенных DNS servers, и сохраните malformed compression cases в protocol tests.
Публичный API
DnsParseStringbehaviour-changed — Циклические, forward, reserved, out-of-range и слишком длинные сжатые имена теперь завершаются нулевым результатом.
Модули
3
Высокий
Исправлены EDNS fallback и позиционирование записей
DnsQuery теперь откатывается к обычному RFC 1035 запросу только при FORMERR от EDNS, кэширует решение server до четырёх минут и выделяет parsing записей в ParseDnsResult. DnsBuildQuestion временно сообщает границу question body для разбора.
Исправления
mormot.net.dns
432444d3+63-52
net: several fixes to EDNS(0) support
Влияние
Исправлена начальная ветвь EDNS, которая отключала EDNS при ошибках не FORMERR и неверно входила в FORMERR fallback. Следующие commits заменяют временное предположение о body size, поэтому на этой build останавливаться нельзя.
Модули
4
Высокий
Разбор DNS-записей начинается с вопроса, возвращённого сервером
ParseDnsResult определяет позицию первой записи, распаковывая QName в ответе, а не используя длину локально построенного запроса. DnsQuery требует QuestionCount=1, а TCP принимает ответ размером с header.
Исправления
mormot.net.dns
3da23281+41-22
net: several DNS fixes
Влияние
Ответы с другим допустимым wire encoding отражённого вопроса разбираются с фактической границы. Ответы с неожиданным числом вопросов отвергаются, а не смещают parsing записей.
Публичный API
DnsQuerybehaviour-changed — Ответ должен содержать один вопрос, а parsing записей следует encoding возвращённого вопроса.
Модули
5
Высокий
TCachedValues ищет с comparator, которым отсортирован cache
TCachedValues.Exists исправляет перепутанные ветви: настроенный CustomCompare передаётся в соответствующий overload FastFindPUtf8CharSorted, а nil выбирает default overload. Exists и Add также получают default TixShr=0, где ноль означает отсутствие периодического flush.
Исправления
mormot.core.unicode
256cc2f4+13-11
core: fixed TCachedValues
Влияние
Публичный cache из 2.4.16790 теперь находит значения как с default, так и с custom comparator. Экспериментальным пользователям следует заменить дефектную build до применения Exists или duplicate suppression.
Рекомендуется обновиться
Обновите код, применивший TCachedValues из 2.4.16790, и после тестов default/custom modes удалите локальные обходы ветвей comparator.
Публичный API
TCachedValues.Existsbehaviour-changed — Lookup теперь использует CustomCompare при его наличии и default comparator иначе; TixShr по умолчанию равен нулю.TCachedValues.Addsignature-changed — TixShr становится необязательным с default zero, означающим cache без истечения.
Модули
6
Высокий
DnsQuery включает EDNS 1232 байта и исправляет DNS port по умолчанию
DnsQuery сначала отправляет вопрос с OPT через новую глобальную DnsEdnsUdpSize, по умолчанию 1232 байта и в пределах receive buffer 4KB. DnsSendQuestionRaw меняет fallback пустого Port с 389 на 53, а DnsQuery меняет Res с out на var для finalize managed fields перед повторным использованием.
Новые возможности
mormot.net.dns
fb1b5127+81-38
net: implemented EDNS(0) advertised UDP payload size
Влияние
Большинство DNS-ответов до 1232 байт остаётся на UDP, сокращая TCP fallback. Прямой DnsSendQuestion с пустым Port теперь обращается к правильному DNS service, но начальная EDNS fallback logic исправлена следующим commit.
Публичный API
DnsEdnsUdpSizeadded — Публичная глобальная переменная advertised EDNS UDP payload; default 1232, ноль отключает EDNS, значения ограничены 512..4096.DnsQuerysignature-changed — Параметр TDnsResult меняется с out на var; обычные вызовы с переменной сохраняют синтаксис.
Модули
7
Средний
DHCP scope теперь отправляет настроенное доменное имя
TDhcpState.AddRegularOptions в mormot.net.dhcp теперь вызывает AddOptionOnceU для doDomainName из Scope.DomainName. Тесты проверяют значение scope и подтверждают, что domain-name из per-client rule отправляется первым и сохраняет приоритет.
Исправления
mormot.net.dhcp
3ad9e8c1+29-0
net: DHCP server was never sending the domain-name option 15
Влияние
Клиенты с lease от TDhcpServer теперь получают DHCP option 15 из конфигурации scope. Существующие per-client domain-name overrides сохраняют поведение.
Рекомендуется обновиться
Обновите DHCP-серверы с Scope.DomainName и проверьте получение option 15 после renewal lease.
Модули
8
Средний
Запись resolver может содержать собственный port
DnsSendQuestionRaw разбирает единственное двоеточие в Address как встроенный IPv4 port, переопределяя отдельный аргумент Port до настройки TNetAddr. Префикс tcp@ удаляется до разбора, а cache key использует очищенный адрес.
Новые возможности
mormot.net.dns
c6756d1e+17-12
dns: allow 'ip:port' for DNS servers definitions
Влияние
NameServers может указывать resolver вида 127.0.0.1:5353 без смены глобального DnsPort. IPv6 literals с несколькими двоеточиями не принимаются за синтаксис встроенного port.
Стоит взглянуть
Проверьте custom resolver configuration с отдельным port: теперь его можно задавать в каждой записи NameServers.
Публичный API
DnsSendQuestionbehaviour-changed — Address принимает IPv4-адрес со встроенным значением :port.
Модули
9
Средний
DnsBuildQuestion может добавлять запись EDNS OPT
DnsBuildQuestion получает необязательный параметр EdnsUdpSize. Ненулевое значение добавляет один OPT pseudo-record, задаёт AdditionalCount, ограничивает advertised UDP size диапазоном 512..4096 и записывает нулевые extended RCODE, version, flags и option data.
Новые возможности
mormot.net.dns
cd234840+18-5
net: optional EDNS(0) support for DnsBuildQuestion()
Влияние
Низкоуровневые callers могут строить стандартные EDNS questions без ручной сборки OPT record. Существующие вызовы с тремя аргументами сохраняют classic DNS behavior, поскольку новый параметр по умолчанию равен нулю.
Стоит взглянуть
Проверьте custom DnsBuildQuestion callers, которым нужны более крупные UDP-ответы; задайте EdnsUdpSize и возьмите последующие DNS fixes.
Публичный API
DnsBuildQuestionsignature-changed — Добавлен необязательный EdnsUdpSize: cardinal = 0; при ненулевом значении формируется OPT pseudo-record.
Модули
10
Средний
DNS transport принимает raw reply до применения query policy
Реализация transport становится DnsSendQuestionRaw и принимает структурно допустимые UDP или TCP ответы независимо от RCODE и answer count. Публичный wrapper DnsSendQuestion сохраняет прежнюю success policy, а insertion в no-TCP cache теперь использует тот же TixShr=6, что и lookup.
Внутреннее устройство
mormot.net.dns
f1b7dcaf+25-20
net: fixed and refactored DnsSendQuestion()
Влияние
Высокоуровневый DnsQuery может проверять FORMERR и реализовать EDNS fallback без ослабления публичного raw-query contract. Минутное подавление servers с ошибкой TCP снова работает.
Модули
11
Средний
DNS использует общий cache wrapper для failed TCP resolvers
Специальные NoTcpSafe, NoTcpTix16 и NoTcpServers заменены на TCachedValues. TCachedValue и TCachedValues также считают TixShr=0 периодом без истечения и документируют необходимость нулевой инициализации record.
Внутреннее устройство
mormot.core.os+3
e8fd8b73+14-21
net: some DNS code simplification
Влияние
Предполагается 64-секундный cache resolvers без ответа по TCP. Этот commit вставляет с новым default TixShr=0, тогда как lookup использует 6, поэтому cache не работает до следующего refactor DnsSendQuestion, передающего 6 в Add.
Публичный API
TCachedValue.Cachebehaviour-changed — TixShr=0 теперь задаёт стабильный cache period без истечения вместо вычисления tick value.
12
Низкий
Intel/AMD search assembly сокращает registers и move operations
Несколько x86/x64 scan/search routines формируют -1 через or вместо mov. Реализация x64 FastFindPUtf8CharSorted переработана без сохранения r12/r13, с кэшированием первого байта и indexed addressing для остальных.
Производительность
mormot.core.base+1
1daae163+54-52
core: optimized Intel/AMD asm
Влияние
Частые scans и sorted RawUtf8 lookup используют меньше инструкций или saved registers на Intel/AMD. Публичное поведение и return values не меняются.
13
Низкий
16-bit byte swap формирует более простой код FPC
bswap16 в mormot.core.base теперь принимает cardinal по значению и получает младший байт через ToByte перед сдвигом и объединением со старшим байтом. Функция остаётся inline при поддержке.
Производительность
mormot.core.base
e00798bb+6-5
core: optimized bswap16() function
Влияние
FPC может сгенерировать более короткую последовательность для частого endian conversion. Результат для существующих callers не меняется.
Публичный API
bswap16signature-changed — Скалярный параметр меняется с const cardinal на cardinal; обычные вызовы сохраняют source compatibility.
Модули
14
Низкий
Linux ARP lookup использует явные константы wire order
GetRemoteMacAddress в mormot.net.sock.posix.inc заменяет повторные bswap16 на ETH_P_IP_LE, ETH_P_ARP_LE и сдвинутые ARP constants при построении и проверке raw Ethernet frames. В implementation include TRawARP нормализован в TRawArp.
Внутреннее устройство
mormot.net.sock
3b7a2a4f+17-15
net: refactored GetRemoteMacAddress() on Linux
Влияние
Linux remote-MAC discovery сохраняет layout пакета и требования привилегий. Из low-level path удалены runtime byte swaps без изменения вызовов приложения.
Модули
15
Низкий
Opcode TFTP frame записывается сразу в wire order
TTftpContext заменяет bswap16 на сдвиг константы при записи opcode OACK, ACK, DAT и ERR. Поля sequence и error-code сохраняют прежнее преобразование.
Внутреннее устройство
mormot.net.tftp.client
eee50161+6-6
net: minor TFTP logic refactoring
Влияние
Сформированные TFTP frames не меняются; это небольшое внутреннее упрощение без миграции API или протокола.
Модули
16
Низкий
Исправление cache получает прямые тесты add, lookup и reset
test.core.base инициализирует TCachedValues и проверяет missing lookup, unique insertion, duplicate rejection, successful lookup и Reset. PDF font test принимает ещё один известный platform-dependent hash.
Тесты
test.core.base+1
816a0e19+24-5
tests: enhanced coverage
Влияние
Production code не меняется. Тесты защищают исправление дефекта default comparator из предыдущего commit и расширяют допустимые варианты PDF rendering.