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

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.

Сборка2.4.16790 → 2.4.16805
Коммиты17
Строки+559 -370
Чтение4 мин

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.

Публичный API

  • DnsSendQuestionbehaviour-changed — Endpoint resolver может быть IPv6, а UDP-ответ обязан совпадать по source address и port.
  • DnsQuerybehaviour-changed — Успешный ответ должен отражать запрошенные QName, QTYPE и QCLASS до принятия записей.
  • TDnsHeader.Zbehaviour-changed — Setter теперь обновляет второй байт DNS flags, где хранятся Z bits.

Модули

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

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 продолжают декодироваться.

Публичный API

  • DnsParseStringbehaviour-changed — Циклические, forward, reserved, out-of-range и слишком длинные сжатые имена теперь завершаются нулевым результатом.

Модули

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

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 останавливаться нельзя.

Модули

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

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 возвращённого вопроса.

Модули

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

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.

Публичный API

  • TCachedValues.Existsbehaviour-changed — Lookup теперь использует CustomCompare при его наличии и default comparator иначе; TixShr по умолчанию равен нулю.
  • TCachedValues.Addsignature-changed — TixShr становится необязательным с default zero, означающим cache без истечения.

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

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; обычные вызовы с переменной сохраняют синтаксис.

Модули

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

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 сохраняют поведение.

Модули

zen010101 · 17:43 UTC · открыть коммит на GitHub →

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.

Модули

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

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.

Модули

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

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 снова работает.

Модули

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

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.

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

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 не меняются.

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

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.

Модули

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

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 без изменения вызовов приложения.

Модули

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

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 или протокола.

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

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.

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