Требует действийможет затронуть работающую системуВ исходном payload нет отметок superseded_by. Merge commits не включены в entries согласно правилам. Ветка числового исправления была создана, когда её commit-файл ещё содержал 16812, а затем слита после build 16828, поэтому финальный head репозитория остаётся с меткой 2.4.16828.
Числовой 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 для исключения.
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.
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.
Рекомендуется обновиться
Обновитесь до финального head и запустите parser-тесты для граничных integers, пределов Currency и неверных decimal или exponent inputs от внешних клиентов.
Публичный API
GetIntegerbehaviour-changed — Overflow теперь устанавливает err вместо wraparound.GetExtendedbehaviour-changed — Неверные decimals и overflow экспоненты теперь устанавливают err.GetNumericVariantFromJsonbehaviour-changed — Теперь соблюдаются грамматика JSON и границы signed/Currency.
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.
Рекомендуется обновиться
Обновите DHCP services, вызывающие Setup после запуска, затем проверьте live reload scope и shutdown под нагрузкой.
Модули
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.
Модули
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 сохраняют публичный результат.
Модули
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.
Модули
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.
Модули
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 в дни и поля времени.
Модули
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.
Модули
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 в текст.
Модули
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 намеренно отбрасываются.
Модули
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 не меняются.
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 — Возвращает ноль при неверных полях времени.
Модули
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 и длины в байтах.
Модули
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 уменьшают стоимость календарного преобразования. Публичные сигнатуры не меняются, миграция приложения не нужна.
Модули
16
Низкий
Проверка високосного года перешла на целочисленную арифметику без деления
mormot.core.datetime переписывает IsLeapYear через inline целочисленные сравнения и reciprocal arithmetic вместо деления по модулю, сохраняя Gregorian правило.
Производительность
mormot.core.datetime
8d552e6b+26-30
core: rewritten IsLeapYear()
Влияние
Изменений прикладного кода нет. Повторные календарные преобразования дешевле в Delphi и FPC при тех же результатах проверки.
Модули
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.
Модули
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.
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.
Модули
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 для путей преобразования из этого набора.
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 или хранимые данные; это только очистка исходников.