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

Исправлены принадлежность DHCP REQUEST и parsing коротких чисел

DHCP server теперь точнее соблюдает состояние client и правила выбора server: NAK frames очищены, запросы к другому server игнорируются, а устаревшие static address отклоняются. Последующее исправление не позволяет принимать malformed address option за реальное значение IPv4. Кроме того, GetExtended больше не читает четыре байта из некорректного ввода длиной один или два символа, поэтому сервисам, разбирающим недоверенный числовой текст, следует взять этот выпуск.

Коротко

  • Переходите на build 2.4.16861; builds 2.4.16857–2.4.16859 могут принять malformed DHCP options 50 или 54 за реальные адреса.
  • GetExtended теперь отклоняет короткие некорректные tokens до четырёхбайтовой проверки NAN/INF, предотвращая возможное чтение за пределами переданного текста.
  • DHCP REQUEST, чей server-identifier указывает на другой server, игнорируется и учитывается новой метрикой dsmDroppedOtherServer.
  • Client, явно запросивший адрес, который больше не совпадает с его static reservation, теперь получает NAK вместо renewal ACK.
  • DHCPNAK frames исключают lease, network, boot и rule options, сохраняют chaddr пакета и передаются broadcast при отсутствии relay.
  • DhcpIP4 теперь возвращает ноль для отсутствующих или malformed четырёхбайтовых options, завершая новые проверки REQUEST без ложных NAK или drop.

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

Берите build 2.4.16861 целиком, если используете TDhcpServer или передаёте недоверенный текст в GetExtended. Не останавливайтесь на builds 2.4.16857–2.4.16859: новые решения по DHCP options 50/54 зависят от нулевого результата DhcpIP4 для malformed данных, что исправлено в 16860. После обновления проверьте трафик DHCP REQUEST/NAK, перенос static reservation и сохранённые числовые ordinal TDhcpScopeMetric.

Сборка2.4.16851 → 2.4.16861
Коммиты7
Строки+192 -28
Чтение3 мин

6 из 6 записей · 7 коммитов в апстриме

Сюжеты
# Запись Категория Модули
1 Высокий Перенесённая static reservation отклоняет старый адрес из запроса client Когда TDhcpProcess.LockedResponse находит lease lsStatic, option 50 теперь читается в State.Ip4. Для REQUEST SELECTING или INIT-REBOOT с явным ненулевым адресом, отличным от зарезервированного p^.IP4, возвращается DoError(State, dsmNak) вместо увеличения dsmLeaseRenewed и подтверждения lease. Исправления mormot.net.dhcp 2d2627f7+17-3

net: NAK requested address is not the one reserved

Влияние

После переноса static reservation администратором client со старым адресом получает указание заново начать получение адреса вместо ACK при несогласованном состоянии. REQUEST без option 50 и RENEWING через ciaddr намеренно сохраняют прежнее поведение.

Модули

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

2 Высокий Malformed DHCP address options больше не считаются значениями IPv4 DhcpIP4 в mormot.net.dhcp инициализирует результат TNetIP4 нулём вместо offset option. Ноль заменяется только при наличии option и byte длины, равном SizeOf(TNetIP4). Regression tests передают трёхбайтовые payload options 50 и 54 и требуют обычной обработки ACK. Исправления mormot.net.dhcp a86688a9+16-3

net: fixed DhcpIP4()

Влияние

Malformed requested-address больше не вызывает ложный NAK конфликта static reservation, а malformed server-identifier больше не заставляет server отбрасывать REQUEST как адресованный другому server. Корректные четырёхбайтовые и отсутствующие options сохраняют прежний смысл на Delphi и FPC.

Публичный API

  • DhcpIP4behaviour-changed — Отсутствующие или не четырёхбайтовые options возвращают ноль вместо offset buffer, принятого за IPv4.

Модули

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

3 Высокий DHCP REQUEST к другому server теперь игнорируется TDhcpProcess.LockedResponse в mormot.net.dhcp читает option 54 через DhcpIP4 до обработки любого lease dmtRequest. Если ненулевой server identifier отличается от TDhcpScope.ServerIdentifier, метод выходит через DoError с новой метрикой dsmDroppedOtherServer и отдельной trace-причиной. Исправления mormot.net.dhcp 6a6f94d3+15-2

net: new DHCP dsmDroppedOtherServer for REQUEST

Влияние

В сети с несколькими DHCP server этот server больше не отправляет ACK или NAK client в состоянии SELECTING, выбравшему другой server. Новый enum member сдвигает числовые ordinal последующих TDhcpScopeMetric, поэтому код и хранилища с raw metric ordinal или bit positions set требуют проверки.

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

Проверьте trace REQUEST для нескольких server и найдите сохранённые значения Ord(TDhcpScopeMetric) или числовые masks TDhcpScopeMetrics.

Публичный API

  • TDhcpScopeMetric.dsmDroppedOtherServeradded — Считает REQUEST packets, чей server-identifier выбирает другой DHCP server.

Модули

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

4 Высокий Короткий некорректный числовой текст больше не вызывает чтение четырёх байт В реализации GetExtended вне WIN32DELPHI в mormot.core.text путь для нецифрового ввода теперь проверяет P[1] и P[2] на NUL до чтения PCardinal(P)^ для распознавания NAN или INF. Некорректные tokens длиной один или два символа сразу переходят в существующий путь ошибки. Исправления mormot.core.text 0a750051+5-2

core: avoid potential read overflow in GetExtended()

Влияние

Сервисы на FPC и Delphi вне Win32 при разборе короткого некорректного buffer избегают возможного чтения за пределами переданного NUL-terminated текста, которое могло затронуть недоступную память. Допустимые числа и публичная signature не изменены; Delphi Win32 сохраняет отдельный x87 assembly parser.

Модули

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

5 Низкий Regression tests DHCP покрывают переходы состояний REQUEST test.net.proto добавляет случаи совпадающих и перенесённых static reservation, NAK для INIT-REBOOT и SELECTING, RENEWING через ciaddr, OFFER после NAK и static или dynamic REQUEST, выбирающих другой server. test.core.base также добавляет regression assertion GetExtended('0.0'). Тесты a0347464+73-3

tests: cover latest DHCP fixes

Влияние

Изменений прикладного кода и публичного API нет. Матрица тестов фиксирует, какие состояния DHCP client следует игнорировать, подтверждать ACK, отклонять NAK или предлагать reservation, снижая риск регрессии для server builds Delphi и FPC.

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

6 Низкий Тесты malformed DHCP options возвращены в защищённое тело теста test.net.proto переносит keyword finally ниже assertions для malformed options 50 и 54. Эти assertions теперь выполняются в теле try, а server.Free и settings.Free остаются в блоке finally и выполняются даже при exception в проверке. Тесты d3ed9070+4-3

tests: fixed typo on previous commit

Влияние

Изменений прикладного кода и публичного API нет. Ошибка assertion для malformed option больше не пропускает очистку тестовых ресурсов, поэтому regression suite сообщает сбой с более безопасной очисткой на Delphi и FPC.

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