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

Числовой parsing усилен, а DHCP setup избавлен от висячего указателя

Числовое преобразование теперь отвергает неверные десятичные формы, переполнение экспоненты и значения вне границ signed или Currency вместо wraparound или принятия некорректного JSON. TDhcpProcess.Setup больше не хранит указатель во время изменения массива scope, что могло вызвать GPF или deadlock. Преобразования даты и времени получили несколько целочисленных API, добавлены исходный Keccak-256 и Microsoft TimeSpan, а изменение сигнатуры ToNcsaShort требует проверки исходного кода.

Коротко

  • Берите финальный head поверх build 2.4.16828: исправление числовой корректности было слито сверху без нового увеличения номера build.
  • GetInteger, GetExtended и GetNumericVariantFromJson теперь отвергают overflow и неверный синтаксис decimal или exponent вместо wraparound и неоднозначных значений.
  • TDhcpProcess.Setup копирует каждый scope до того, как PrepareScope может изменить базовый массив, устраняя подтверждённый путь к GPF или deadlock.
  • Вызывающий код, передающий обычный ShortString в TSynSystemTime.ToNcsaShort, должен заменить этот var-аргумент на TShort23 или использовать локальный TShort23.
  • Слой даты и времени получил целочисленные helpers для Gregorian, Unix milliseconds, Julian day, HTTP date и Microsoft TimeSpan, а LDAP умеет декодировать atsTimeSpan.
  • mormot.crypt.core теперь поддерживает исходный padding Keccak-256, применяемый в протоколах вроде Ethereum и отличающийся от SHA3-256.

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

Production-системам, разбирающим недоверенный числовой JSON или перенастраивающим DHCP scope, следует взять финальную ревизию 692bbbf21960be5fdf89921673a34f928fadddfc, которая всё ещё сообщает build 2.4.16828. Найдите вызовы ToNcsaShort: var-выход типа обычного ShortString нужно заменить на TShort23 или передавать через локальный TShort23. Данные superseded_by не отмечают промежуточную build для исключения.

Сборка2.4.16805 → 2.4.16828
Коммиты23
Строки+1112 -387
Чтение5 мин

21 из 21 записей · 23 коммитов в апстриме

Сюжеты
# Запись Категория Модули
1 Высокий ToNcsaShort теперь требует выходную переменную точного типа TShort23 mormot.core.datetime добавляет TSynSystemTime.AppendTime и AppendInterval для компактного форматирования времени и duration. Публичный var-параметр ToNcsaShort изменён с ShortString на TShort23 в соответствии с фиксированной максимальной длиной вывода. Несовместимые изменения mormot.core.base+1 5b281032+32-5

core: new TSynSystemTime.AppendTime/AppendInterval methods

Влияние

Поскольку var-параметры Pascal требуют точного типа, вызовы Delphi или FPC с переменной обычного типа ShortString могут перестать компилироваться. Код, уже использующий TShort23, совместим.

Требуется миграция

Найдите ToNcsaShort. Объявите каждую выходную переменную как TShort23 либо вызывайте через локальный TShort23 и затем копируйте в более широкий ShortString.

Публичный API

  • TSynSystemTime.AppendTimeadded — Добавляет hh:mm:ss с необязательными milliseconds.
  • TSynSystemTime.AppendIntervaladded — Форматирует дни и поля времени TSynSystemTime.
  • TSynSystemTime.ToNcsaShortsignature-changed — Тип var-выхода изменён с ShortString на TShort23.

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

2 Высокий Неверные и переполненные числа больше не проходят JSON parsing mormot.core.base ограничивает накопление цифр GetInteger и signed-границы PtrInt. mormot.core.text отвергает повторную десятичную точку и overflow экспоненты в GetExtended. mormot.core.variants соблюдает грамматику JSON-чисел и границы Int64/Currency, повышая значение до varDouble только при AllowVarDouble. Исправления mormot.core.base+2 d48f4634+222-25

core: fix numeric conversion overflow and malformed decimal input

Влияние

Backends, разбирающие недоверенный числовой текст, больше не получают wrapped integers, принятые неверные decimal и ошибочные Currency variants. JSON-числа с ведущим нулём, пустые экспоненты и значения вне signed-границ теперь завершаются ошибкой вместо тихого coercion.

Публичный API

  • GetIntegerbehaviour-changed — Overflow теперь устанавливает err вместо wraparound.
  • GetExtendedbehaviour-changed — Неверные decimals и overflow экспоненты теперь устанавливают err.
  • GetNumericVariantFromJsonbehaviour-changed — Теперь соблюдаются грамматика JSON и границы signed/Currency.

Mike · 13:45 UTC · открыть коммит на GitHub →

3 Высокий Обновление DHCP scope больше не обращается к перемещённому хранилищу TDhcpProcess.Setup теперь копирует каждый старый scope в новый массив до вызова PrepareScope. PrepareScope может изменить базовый массив, поэтому прежний порядок оставлял исходный pointer висячим ещё до копирования. Исправления mormot.net.dhcp 1cd2f994+5-5

net: fixed GPF or deadlock in TDhcpProcess.Setup()

Влияние

Работающий DHCP service при повторном применении или изменении scope configuration избегает подтверждённого пути к GPF или deadlock. Это касается backend Delphi и FPC с mormot.net.dhcp.

Модули

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

4 Средний Gregorian encoding стал публичным, а TryEncode перешёл на var mormot.core.datetime публикует EncodeGregorian для проверенного преобразования года, месяца и дня. TryEncodeDate и TryEncodeTime переписаны с целочисленными проверками, а их целевой параметр изменён с out на var. Несовместимые изменения mormot.core.datetime 20876cb4+83-65

core: new EncodeGregorian() low-level computation function

Влияние

Обычные прямые вызовы остаются source-compatible, но procedure variables, wrappers или overrides, требующие точной сигнатуры out, могут перестать компилироваться в Delphi или FPC. Неверные поля по-прежнему возвращают false.

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

Публичный API

  • EncodeGregorianadded — Проверяет год 1..9999, месяц и день, затем возвращает внутренний номер дня Gregorian.
  • TryEncodeDatesignature-changed — Целевой параметр изменён с out на var.
  • TryEncodeTimesignature-changed — Целевой параметр изменён с out на var.

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

5 Средний Отрицательные Unix timestamps получили безопасное целочисленное преобразование TSynSystemTime.FromUnixTime и FromUnixMsTime теперь делят epoch на дни и остаток, переносят отрицательный остаток в предыдущий день и вызывают FromJulianDay вместе с FromSec или FromMS. Исправления mormot.core.datetime 91739dd8+32-12

core: rewritten TSynSystemTime.FromUnixTime/FromUnixMsTime

Влияние

Значения до 1970 года и timestamps в миллисекундах избегают округления TDateTime и явно обрабатывают отрицательный остаток в Delphi и FPC. Обычные положительные timestamps сохраняют публичный результат.

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

6 Средний Исходный Keccak-256 добавлен к семейству SHA-3 mormot.crypt.core добавляет KECCAK_256 в конец TSha3Algo без сдвига существующих ordinals и вводит Keccak256Full и Keccak256. Реализация использует исходный padding Keccak и vectors для пустого ввода, abc и границ rate. Новые возможности mormot.crypt.core c2bc1bf0+70-5

crypt: support original Keccak-256

Влияние

Backends Delphi и FPC могут вычислять совместимый с протоколами Keccak-256, не путая его со стандартизованным SHA3-256. Существующие значения TSha3Algo сохраняют числовое представление.

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

Публичный API

  • TSha3Algo.KECCAK_256added — Исходный padding Keccak-256 и 256-bit output.
  • Keccak256Fulladded — Хеширует buffer в THash256.
  • Keccak256added — Возвращает lowercase hexadecimal Keccak-256 для RawByteString.

Модули

Mike · 13:26 UTC · открыть коммит на GitHub →

7 Средний TSynSystemTime умеет напрямую декодировать Julian day mormot.core.datetime добавляет TSynSystemTime.FromJulianDay и переводит FromDate на новое целочисленное разложение Gregorian вместо преобразования TDateTime. Новые возможности mormot.core.datetime f8fe89b2+46-21

core: new TSynSystemTime.FromJulianDay method

Влияние

Код Delphi и FPC с готовым Julian day может заполнить TSynSystemTime без floating-point преобразования. Интерфейс существующих вызовов FromDate не меняется.

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

Публичный API

  • TSynSystemTime.FromJulianDayadded — Заполняет поля даты по номеру Julian day.

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

8 Средний Microsoft TimeSpan ticks преобразуются в структурированные и текстовые интервалы mormot.core.datetime добавляет TimeSpanAppendShort, TimeSpanToTextVar, TimeSpanToText и TSynSystemTime.FromTimeSpan. Signed Microsoft ticks по 100 ns делятся на дни и поля времени и выводятся с точностью до миллисекунд. Новые возможности mormot.core.datetime 1219fff2+48-2

core: Microsoft TimeSpan 100 ns ticks decoding support

Влияние

Backends Delphi и FPC могут декодировать directory или .NET duration без собственной арифметики. Точность тиков меньше миллисекунды намеренно не попадает в вывод.

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

Публичный API

  • TimeSpanAppendShortadded — Добавляет форматированный Microsoft TimeSpan.
  • TimeSpanToTextVaradded — Записывает interval в текстовый variant.
  • TimeSpanToTextadded — Возвращает форматированный interval как RawUtf8.
  • TSynSystemTime.FromTimeSpanadded — Декодирует signed ticks по 100 ns в дни и поля времени.

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

9 Средний TSynSystemTime умеет напрямую выдавать Unix milliseconds mormot.core.datetime добавляет TSynSystemTime.ToUnixMsTime и переписывает ToUnixTime через EncodeGregorian с целочисленной арифметикой дней и времени без TDateTime. Новые возможности mormot.core.datetime c5731496+15-7

core: new TSynSystemTime.ToUnixTime/ToUnixMSTime methods

Влияние

Backends могут получать epoch в миллисекундах без floating-point промежуточного значения. Сигнатура ToUnixTime не меняется, но используется новая целочисленная реализация.

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

Публичный API

  • TSynSystemTime.ToUnixMsTimeadded — Возвращает milliseconds с Unix epoch.
  • TSynSystemTime.ToUnixTimebehaviour-changed — Теперь использует целочисленную арифметику Gregorian.

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

10 Средний LDAP умеет выводить атрибуты Microsoft TimeSpan mormot.net.ldap добавляет atsTimeSpan в TLdapAttributeTypeStorage. Декодирование атрибута читает signed значение в тиках 100 ns и передаёт его в TimeSpanToTextVar для читаемого interval. Новые возможности mormot.net.ldap 22e8328a+9-2

net: introducing atsTimeSpan LDP attribute decoding

Влияние

LDAP backends могут преобразовывать Microsoft duration attributes в текст вместо непрозрачного 64-bit tick representation. Ordinals существующих режимов хранения не меняются, поскольку новый элемент добавлен в конец.

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

Публичный API

  • TLdapAttributeTypeStorage.atsTimeSpanadded — Декодирует signed Microsoft TimeSpan ticks в текст.

Модули

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

11 Средний Unix-преобразование TTimeLogBits обходится без арифметики TDateTime mormot.core.datetime проводит TTimeLogBits.FromUnixTime через TSynSystemTime, реализует FromUnixMsTime с точностью до секунды и вычисляет ToUnixTime целочисленно через EncodeGregorian. Производительность mormot.core.datetime f5669b62+20-19

core: enhanced TTimeLogBits conversion methods

Влияние

Backends Delphi и FPC получают детерминированное целочисленное преобразование без floating-point rounding. TTimeLogBits по-прежнему хранит только целые секунды, поэтому milliseconds намеренно отбрасываются.

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

12 Средний Адаптеры дат БД используют общие encoders с нулём при ошибке mormot.core.datetime, mormot.db.raw.odbc и mormot.db.raw.oracle заменяют повторяющиеся ветви TryEncodeDate и TryEncodeTime на EncodeDateOrZero и EncodeTimeOrZero в путях ISO, SQL_TIMESTAMP_STRUCT и TOracleDate. Внутреннее устройство mormot.core.datetime+2 d7a78957+36-73

core/db: use EncodeDateOrZero/EncodeTimeOrZero when possible

Влияние

Ожидаемый результат для неверного ввода остаётся нулём, но DB backends Delphi/FPC теперь используют общую реализацию проверки. Существующие вызовы ODBC и Oracle не меняются.

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

13 Низкий Encoders даты и времени получили wrappers с возвратом нуля mormot.core.datetime публикует EncodeDateOrZero и EncodeTimeOrZero. Каждая функция вызывает соответствующий TryEncode и возвращает ноль при неверных полях. Новые возможности mormot.core.datetime 1d5e8861+35-2

core: introducing EncodeDateOrZero/EncodeTimeOrZero wrappers

Влияние

Код Delphi и FPC может заменить boolean-ветвь, если ноль подходит как sentinel неверного значения. Существующие API и поведение не меняются.

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

Публичный API

  • EncodeDateOrZeroadded — Возвращает ноль при неверных полях даты.
  • EncodeTimeOrZeroadded — Возвращает ноль при неверных полях времени.

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

14 Низкий Фрагменты времени ISO получили повторно используемый buffer parser mormot.core.datetime добавляет TSynSystemTime.FromTimeBuffer для разбора hour, minute и необязательной second из pointer и length. FromHttpDateBuffer использует его для временной части. Новые возможности mormot.core.datetime e570e19e+23-10

core: new TSynSystemTime.FromTimeBuffer method

Влияние

Buffer-oriented parsers могут заполнять TSynSystemTime без выделения строки. Существующий HTTP date parsing сохраняет принимаемый формат и использует общий helper.

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

Публичный API

  • TSynSystemTime.FromTimeBufferadded — Разбирает время из pointer и длины в байтах.

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

15 Низкий POSIX epoch conversion использует оптимизированный Gregorian splitter POSIX-реализация EpochToSystemTime в mormot.core.os.posix переписана вокруг общей целочисленной процедуры DaysToGregorian вместо прежнего календарного разложения. Производительность mormot.core.os.posix 5313e545+34-29

core: rewritten EpochToSystemTime() on POSIX

Влияние

POSIX backends Delphi/FPC уменьшают стоимость календарного преобразования. Публичные сигнатуры не меняются, миграция приложения не нужна.

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

16 Низкий Проверка високосного года перешла на целочисленную арифметику без деления mormot.core.datetime переписывает IsLeapYear через inline целочисленные сравнения и reciprocal arithmetic вместо деления по модулю, сохраняя Gregorian правило. Производительность mormot.core.datetime 8d552e6b+26-30

core: rewritten IsLeapYear()

Влияние

Изменений прикладного кода нет. Повторные календарные преобразования дешевле в Delphi и FPC при тех же результатах проверки.

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

17 Низкий HTTP dates теперь используют целочисленный путь system time mormot.core.datetime переводит TSynSystemTime.FromHttpDateBuffer на FromTimeBuffer и преобразует HTTP dates через TSynSystemTime.ToUnixTime без промежуточного TDateTime. Параметр tolocaltime теперь имеет default false. Производительность mormot.core.datetime e498b9ef+12-14

core: enhanced HTTP date support

Влияние

Существующие явные вызовы сохраняют поведение. Вызовы без tolocaltime получают документированный default UTC, а HTTP parsing избегает floating-point преобразования даты в Delphi и FPC.

Публичный API

  • TSynSystemTime.FromHttpDateBuffersignature-changed — tolocaltime теперь по умолчанию false.

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

18 Низкий Форматирование года в Delphi Win64 заменяет деление умножением mormot.core.base добавляет DIV100_INV и применяет reciprocal multiplication в assembler-пути YearToPChar для Delphi Win64. Существующие literals x86 и x64 сведены к одной константе. Производительность mormot.core.base+2 906a9037+16-10

core: optimized YearToPChar() for Delphi Win64

Влияние

Дешевле становится только форматирование Delphi Win64; FPC и другие targets сохраняют эквивалентный код. Вызовы приложения и вывод не меняются.

Публичный API

  • DIV100_INVadded — Публичная reciprocal-константа для деления на 100.

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

19 Низкий Положительные и отрицательные TimeSpan получили regression-тесты test.core.base добавляет проверки преобразования Microsoft TimeSpan в обе стороны, включая signed intervals. Изменение production unit уточняет масштаб тика 100 ns. Тесты mormot.core.os d3dfb00c+27-3

tests: validate TimeSpan conversion

Влияние

Изменений прикладного кода нет. Builds Delphi и FPC получают coverage обработки знака и текстового формата из предыдущего commit.

Модули

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

20 Низкий Граничные случаи даты, Unix и hash получили regression-тесты test.core.base добавляет round-trip тесты високосных лет, Unix seconds и milliseconds, а также проверки HTTP date. test.core.crypt расширяет граничные случаи SHA-3 и Keccak. Тесты 6356fbaa+17-6

tests: cover latest date/time conversion functions

Влияние

Изменений прикладного кода нет. Builds Delphi и FPC получают regression coverage для путей преобразования из этого набора.

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

21 Низкий Внутренние имена и объявления очищены без изменения поведения Несколько объявлений core, search, thread и DHCP переименованы, переставлены или уточнены. Встроенный diff и сообщение commit не указывают функциональных изменений или удаления публичного API. Обслуживание mormot.core.datetime+3 bebea2f9+12-12

all: some code cleaning with no functional change

Влияние

Нет влияния на прикладной код, поведение Delphi/FPC или хранимые данные; это только очистка исходников.

Arnaud Bouchez · 17:11 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