mORMot2 DailyLecture quotidienne des commits upstream

Le parsing numérique est renforcé et DHCP élimine un pointeur pendant

La conversion numérique rejette maintenant les décimaux mal formés, les exposants en dépassement et les valeurs hors des limites signed ou Currency, au lieu de boucler ou d’accepter un JSON invalide. TDhcpProcess.Setup ne conserve plus un pointeur lors d’une mutation du tableau des scopes qui pouvait provoquer un GPF ou un deadlock. Les conversions de date et d’heure gagnent plusieurs API fondées sur les entiers, le Keccak-256 original et Microsoft TimeSpan arrivent, et une modification de signature de ToNcsaShort exige une revue du code source.

En bref

  • Prenez la révision de tête finale sur la build 2.4.16828 : la correction numérique a été fusionnée au-dessus sans nouvelle incrémentation du numéro de build.
  • GetInteger, GetExtended et GetNumericVariantFromJson rejettent désormais les dépassements et la syntaxe décimale ou exponentielle invalide au lieu de produire des valeurs bouclées ou ambiguës.
  • TDhcpProcess.Setup copie chaque scope avant que PrepareScope puisse modifier le tableau sous-jacent, supprimant un chemin documenté vers un GPF ou un deadlock.
  • Les appelants qui passent un ShortString générique à TSynSystemTime.ToNcsaShort doivent utiliser TShort23 pour cet argument var ou un local TShort23.
  • La couche date/heure ajoute des helpers entiers pour Gregorian, Unix millisecond, Julian day, HTTP date et Microsoft TimeSpan, tandis que LDAP peut décoder atsTimeSpan.
  • mormot.crypt.core prend maintenant en charge le padding Keccak-256 original utilisé par des protocoles comme Ethereum, distinct de SHA3-256.

Conseil de mise à jour

Les utilisateurs en production qui analysent du JSON numérique non fiable ou reconfigurent des scopes DHCP doivent prendre la révision finale 692bbbf21960be5fdf89921673a34f928fadddfc, qui annonce toujours la build 2.4.16828. Recherchez les appels à ToNcsaShort : toute sortie var déclarée comme ShortString générique doit devenir TShort23 ou passer par un local TShort23. Aucune donnée superseded_by ne désigne une build intermédiaire à éviter.

Build2.4.16805 → 2.4.16828
Commits23
Lignes+1112 -387
Lecture6 min

21 sur 21 entrées · 23 commits upstream

Sujets
# Entrée Catégorie Unités
1 Élevée ToNcsaShort exige maintenant une variable de sortie TShort23 exacte mormot.core.datetime ajoute TSynSystemTime.AppendTime et AppendInterval pour le formatage compact des heures et durées. Le paramètre var public de ToNcsaShort passe de ShortString à TShort23, conformément à sa taille de sortie maximale fixe. Ruptures mormot.core.base+1 5b281032+32-5

core: new TSynSystemTime.AppendTime/AppendInterval methods

Impact

Comme les paramètres var Pascal exigent un type exact, les appelants Delphi ou FPC qui passent une variable déclarée ShortString générique peuvent ne plus compiler. Ceux qui utilisent déjà TShort23 restent compatibles.

Migration nécessaire

Recherchez ToNcsaShort. Déclarez chaque variable de sortie en TShort23, ou appelez via un local TShort23 puis copiez-le ensuite dans un ShortString plus large.

API publique

  • TSynSystemTime.AppendTimeadded — Ajoute hh:mm:ss avec des millisecondes optionnelles.
  • TSynSystemTime.AppendIntervaladded — Formate les jours et les champs horaires de TSynSystemTime.
  • TSynSystemTime.ToNcsaShortsignature-changed — Le type de sortie var passe de ShortString à TShort23.

Arnaud Bouchez · 07:48 UTC · voir le commit sur GitHub →

2 Élevée Les nombres mal formés ou en dépassement ne passent plus le parsing JSON mormot.core.base borne l’accumulation des chiffres de GetInteger et les limites signed PtrInt. mormot.core.text rejette les points décimaux répétés et le dépassement d’exposant dans GetExtended. mormot.core.variants impose la grammaire des nombres JSON et les bornes Int64/Currency, avec promotion en varDouble seulement si AllowVarDouble l’autorise. Correctifs mormot.core.base+2 d48f4634+222-25

core: fix numeric conversion overflow and malformed decimal input

Impact

Les backends qui analysent du texte numérique non fiable ne reçoivent plus d’entiers bouclés, de décimaux mal formés acceptés ni de variants Currency incorrects. Les nombres JSON avec zéro initial, les exposants vides et les valeurs hors bornes signed échouent maintenant au lieu d’être convertis silencieusement.

API publique

  • GetIntegerbehaviour-changed — Le dépassement positionne maintenant err au lieu de boucler.
  • GetExtendedbehaviour-changed — Les décimaux mal formés et les exposants en dépassement positionnent maintenant err.
  • GetNumericVariantFromJsonbehaviour-changed — La grammaire JSON et les bornes signed/Currency sont maintenant imposées.

Mike · 13:45 UTC · voir le commit sur GitHub →

3 Élevée Les mises à jour de scope DHCP ne déréférencent plus un stockage réalloué TDhcpProcess.Setup copie maintenant chaque ancien scope dans le nouveau tableau avant d’appeler PrepareScope. PrepareScope peut modifier le tableau sous-jacent ; l’ancien ordre laissait donc le pointeur source pendant avant sa copie. Correctifs mormot.net.dhcp 1cd2f994+5-5

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

Impact

Un service DHCP actif qui réapplique ou modifie la configuration des scopes évite le chemin documenté vers un GPF ou un deadlock. Cela concerne les backends Delphi et FPC utilisant mormot.net.dhcp.

Arnaud Bouchez · 12:37 UTC · voir le commit sur GitHub →

4 Moyenne L’encodage Gregorian devient public et TryEncode passe à var mormot.core.datetime publie EncodeGregorian pour convertir une année, un mois et un jour validés. TryEncodeDate et TryEncodeTime sont réécrits avec des contrôles entiers, et leur paramètre destination passe de out à var. Ruptures mormot.core.datetime 20876cb4+83-65

core: new EncodeGregorian() low-level computation function

Impact

Les appels directs ordinaires restent compatibles au niveau source, mais les variables de procédure, wrappers ou overrides qui exigent exactement la signature out peuvent ne plus compiler sous Delphi ou FPC. Les champs invalides retournent toujours false.

À regarder

API publique

  • EncodeGregorianadded — Valide l’année 1..9999, le mois et le jour, puis retourne le numéro de jour Gregorian interne.
  • TryEncodeDatesignature-changed — Le paramètre destination passe de out à var.
  • TryEncodeTimesignature-changed — Le paramètre destination passe de out à var.

Arnaud Bouchez · 17:18 UTC · voir le commit sur GitHub →

5 Moyenne Les timestamps Unix négatifs obtiennent une conversion entière sûre TSynSystemTime.FromUnixTime et FromUnixMsTime séparent maintenant l’epoch en jour et reste, replacent les restes négatifs dans le jour précédent, puis appellent FromJulianDay avec FromSec ou FromMS. Correctifs mormot.core.datetime 91739dd8+32-12

core: rewritten TSynSystemTime.FromUnixTime/FromUnixMsTime

Impact

Les valeurs antérieures à 1970 et les timestamps en millisecondes évitent l’arrondi TDateTime et reçoivent un traitement explicite des restes négatifs sous Delphi et FPC. Les timestamps positifs ordinaires gardent le même résultat public.

Arnaud Bouchez · 17:23 UTC · voir le commit sur GitHub →

6 Moyenne Le Keccak-256 original rejoint la famille SHA-3 mormot.crypt.core ajoute KECCAK_256 à la fin de TSha3Algo sans déplacer les ordinaux existants, ainsi que Keccak256Full et Keccak256. L’implémentation utilise le padding Keccak original avec des vecteurs pour l’entrée vide, abc et les limites de rate. Nouveautés mormot.crypt.core c2bc1bf0+70-5

crypt: support original Keccak-256

Impact

Les backends Delphi et FPC peuvent calculer un Keccak-256 compatible avec les protocoles sans le confondre avec SHA3-256 standardisé. Les valeurs TSha3Algo existantes conservent leur représentation numérique.

À regarder

API publique

  • TSha3Algo.KECCAK_256added — Padding Keccak-256 original et sortie de 256 bits.
  • Keccak256Fulladded — Hash un buffer dans THash256.
  • Keccak256added — Retourne le Keccak-256 hexadécimal en minuscules d’un RawByteString.

Mike · 13:26 UTC · voir le commit sur GitHub →

7 Moyenne TSynSystemTime peut décoder directement un jour julien mormot.core.datetime ajoute TSynSystemTime.FromJulianDay et fait passer FromDate par la nouvelle décomposition entière Gregorian au lieu d’une conversion TDateTime. Nouveautés mormot.core.datetime f8fe89b2+46-21

core: new TSynSystemTime.FromJulianDay method

Impact

Le code Delphi et FPC qui possède déjà un jour julien peut remplir TSynSystemTime sans conversion flottante. L’interface des appels FromDate existants reste inchangée.

À regarder

API publique

  • TSynSystemTime.FromJulianDayadded — Remplit les champs de date depuis un numéro de jour julien.

Arnaud Bouchez · 17:14 UTC · voir le commit sur GitHub →

8 Moyenne Les ticks Microsoft TimeSpan deviennent des intervalles structurés et textuels mormot.core.datetime ajoute TimeSpanAppendShort, TimeSpanToTextVar, TimeSpanToText et TSynSystemTime.FromTimeSpan. Les ticks Microsoft signed de 100 ns sont répartis en jours et champs horaires, puis rendus à la précision de la milliseconde. Nouveautés mormot.core.datetime 1219fff2+48-2

core: Microsoft TimeSpan 100 ns ticks decoding support

Impact

Les backends Delphi et FPC peuvent décoder les durées d’annuaire ou .NET sans arithmétique personnalisée. La précision inférieure à la milliseconde n’est volontairement pas présente dans le résultat rendu.

À regarder

API publique

  • TimeSpanAppendShortadded — Ajoute un Microsoft TimeSpan formaté.
  • TimeSpanToTextVaradded — Écrit l’intervalle dans un variant texte.
  • TimeSpanToTextadded — Retourne l’intervalle formaté en RawUtf8.
  • TSynSystemTime.FromTimeSpanadded — Décode les ticks signed de 100 ns en jours et champs horaires.

Arnaud Bouchez · 07:49 UTC · voir le commit sur GitHub →

9 Moyenne TSynSystemTime peut émettre directement des millisecondes Unix mormot.core.datetime ajoute TSynSystemTime.ToUnixMsTime et réécrit ToUnixTime autour de EncodeGregorian avec une arithmétique entière des jours et heures, sans conversion TDateTime. Nouveautés mormot.core.datetime c5731496+15-7

core: new TSynSystemTime.ToUnixTime/ToUnixMSTime methods

Impact

Les backends peuvent obtenir un epoch en millisecondes sans intermédiaire flottant. Les appelants de ToUnixTime gardent la même signature avec la nouvelle implémentation entière.

À regarder

API publique

  • TSynSystemTime.ToUnixMsTimeadded — Retourne les millisecondes depuis l’epoch Unix.
  • TSynSystemTime.ToUnixTimebehaviour-changed — Utilise maintenant l’arithmétique entière Gregorian.

Arnaud Bouchez · 17:20 UTC · voir le commit sur GitHub →

10 Moyenne LDAP peut rendre les attributs Microsoft TimeSpan mormot.net.ldap ajoute atsTimeSpan à TLdapAttributeTypeStorage. Le décodage d’attribut lit la valeur signed en ticks de 100 ns et la transmet à TimeSpanToTextVar pour produire un intervalle lisible. Nouveautés mormot.net.ldap 22e8328a+9-2

net: introducing atsTimeSpan LDP attribute decoding

Impact

Les backends LDAP peuvent convertir les attributs de durée Microsoft en texte au lieu de laisser leur représentation 64 bits en ticks opaque. Les modes de stockage existants conservent leurs ordinaux car le nouveau membre est ajouté à la fin.

À regarder

API publique

  • TLdapAttributeTypeStorage.atsTimeSpanadded — Décode les ticks signed Microsoft TimeSpan en texte.

Arnaud Bouchez · 08:28 UTC · voir le commit sur GitHub →

11 Moyenne La conversion Unix de TTimeLogBits évite l’arithmétique TDateTime mormot.core.datetime fait passer TTimeLogBits.FromUnixTime par TSynSystemTime, dérive FromUnixMsTime à la précision de la seconde et calcule ToUnixTime avec l’arithmétique entière EncodeGregorian. Performance mormot.core.datetime f5669b62+20-19

core: enhanced TTimeLogBits conversion methods

Impact

Les backends Delphi et FPC obtiennent une conversion entière déterministe sans arrondi flottant. TTimeLogBits ne stocke toujours que des secondes entières ; les millisecondes sont donc tronquées volontairement.

Arnaud Bouchez · 17:23 UTC · voir le commit sur GitHub →

12 Moyenne Les adaptateurs de date SQL partagent les encodeurs zéro si invalide mormot.core.datetime, mormot.db.raw.odbc et mormot.db.raw.oracle remplacent les branches répétées TryEncodeDate et TryEncodeTime par EncodeDateOrZero et EncodeTimeOrZero dans les conversions ISO, SQL_TIMESTAMP_STRUCT et TOracleDate. Sous le capot mormot.core.datetime+2 d7a78957+36-73

core/db: use EncodeDateOrZero/EncodeTimeOrZero when possible

Impact

Le résultat prévu pour une entrée invalide reste zéro, mais les backends de base de données Delphi/FPC utilisent maintenant la même validation. Les appels applicatifs ODBC et Oracle ne changent pas.

Arnaud Bouchez · 17:22 UTC · voir le commit sur GitHub →

13 Faible Les encodeurs date et heure ajoutent des wrappers retournant zéro mormot.core.datetime publie EncodeDateOrZero et EncodeTimeOrZero. Chacun délègue à son équivalent TryEncode et retourne zéro lorsque les champs fournis sont invalides. Nouveautés mormot.core.datetime 1d5e8861+35-2

core: introducing EncodeDateOrZero/EncodeTimeOrZero wrappers

Impact

Les appelants Delphi et FPC peuvent remplacer une branche booléenne lorsque zéro est un sentinel invalide acceptable. Les API et comportements existants ne changent pas.

À regarder

API publique

  • EncodeDateOrZeroadded — Retourne zéro pour des champs de date invalides.
  • EncodeTimeOrZeroadded — Retourne zéro pour des champs d’heure invalides.

Arnaud Bouchez · 17:20 UTC · voir le commit sur GitHub →

14 Faible Les fragments d’heure ISO gagnent un parser de buffer réutilisable mormot.core.datetime ajoute TSynSystemTime.FromTimeBuffer pour analyser heure, minute et seconde optionnelle depuis un pointeur et une longueur. FromHttpDateBuffer le réutilise pour la partie heure. Nouveautés mormot.core.datetime e570e19e+23-10

core: new TSynSystemTime.FromTimeBuffer method

Impact

Les parsers orientés buffer peuvent remplir TSynSystemTime sans allouer de chaîne. Le parsing de date HTTP conserve son format accepté tout en partageant le helper.

À regarder

API publique

  • TSynSystemTime.FromTimeBufferadded — Analyse une heure depuis un pointeur et une longueur en octets.

Arnaud Bouchez · 17:11 UTC · voir le commit sur GitHub →

15 Faible La conversion epoch POSIX utilise le splitter Gregorian optimisé L’implémentation POSIX de EpochToSystemTime dans mormot.core.os.posix est réécrite autour de la routine entière partagée DaysToGregorian à la place de l’ancienne décomposition calendaire. Performance mormot.core.os.posix 5313e545+34-29

core: rewritten EpochToSystemTime() on POSIX

Impact

Les backends POSIX Delphi/FPC réduisent le coût de la conversion calendaire. Il n’y a ni changement de signature publique ni migration applicative.

Arnaud Bouchez · 17:08 UTC · voir le commit sur GitHub →

16 Faible Les tests d’année bissextile passent à l’arithmétique entière sans division mormot.core.datetime réécrit IsLeapYear avec des comparaisons entières inline et une arithmétique réciproque à la place des divisions modulo, tout en conservant la règle grégorienne. Performance mormot.core.datetime 8d552e6b+26-30

core: rewritten IsLeapYear()

Impact

Aucun changement du code applicatif. Les conversions calendaires répétées coûtent moins cher sous Delphi et FPC tout en rendant les mêmes décisions.

Arnaud Bouchez · 17:16 UTC · voir le commit sur GitHub →

17 Faible Les dates HTTP utilisent maintenant le chemin entier de system time mormot.core.datetime fait réutiliser FromTimeBuffer par TSynSystemTime.FromHttpDateBuffer et convertit les dates HTTP analysées avec TSynSystemTime.ToUnixTime sans intermédiaire TDateTime. Le paramètre tolocaltime vaut maintenant false par défaut. Performance mormot.core.datetime e498b9ef+12-14

core: enhanced HTTP date support

Impact

Les appels explicites conservent leur comportement. Les appelants qui omettent tolocaltime compilent avec un défaut UTC documenté, et le parsing HTTP évite la conversion de date flottante sous Delphi et FPC.

API publique

  • TSynSystemTime.FromHttpDateBuffersignature-changed — tolocaltime vaut maintenant false par défaut.

Arnaud Bouchez · 17:24 UTC · voir le commit sur GitHub →

18 Faible Le formatage d’année Delphi Win64 remplace la division par une multiplication mormot.core.base ajoute DIV100_INV et utilise une multiplication réciproque dans le chemin assembleur Delphi Win64 de YearToPChar. Les littéraux assembleur x86 et x64 existants sont regroupés autour de la même constante. Performance mormot.core.base+2 906a9037+16-10

core: optimized YearToPChar() for Delphi Win64

Impact

Seul le formatage Delphi Win64 devrait coûter moins cher ; FPC et les autres cibles conservent un code équivalent. Les appels et la sortie applicatifs ne changent pas.

API publique

  • DIV100_INVadded — Constante réciproque publique utilisée pour la division par 100.

Arnaud Bouchez · 17:07 UTC · voir le commit sur GitHub →

19 Faible Les valeurs TimeSpan positives et négatives gagnent des tests test.core.base ajoute des assertions pour la conversion Microsoft TimeSpan dans les deux sens, y compris les intervalles signed. La modification de l’unité de production précise l’échelle des ticks de 100 ns. Tests mormot.core.os d3dfb00c+27-3

tests: validate TimeSpan conversion

Impact

Aucun changement du code applicatif. Les builds Delphi et FPC gagnent une couverture du signe et du format texte introduit par le commit précédent.

Arnaud Bouchez · 07:50 UTC · voir le commit sur GitHub →

20 Faible Les cas limites de date, Unix et hash gagnent des tests de régression test.core.base ajoute des round trips pour les années bissextiles, les secondes et millisecondes Unix, ainsi que des assertions de date HTTP. test.core.crypt complète les cas limites SHA-3 et Keccak. Tests 6356fbaa+17-6

tests: cover latest date/time conversion functions

Impact

Aucun changement du code applicatif. Les builds Delphi et FPC gagnent une couverture de régression pour les chemins de conversion introduits dans ce lot.

Arnaud Bouchez · 17:25 UTC · voir le commit sur GitHub →

21 Faible Les noms et déclarations internes sont nettoyés sans changement de comportement Plusieurs déclarations core, search, thread et DHCP sont renommées, réordonnées ou clarifiées. Le diff intégré et le message du commit n’indiquent aucun changement fonctionnel ni retrait d’API publique. Entretien mormot.core.datetime+3 bebea2f9+12-12

all: some code cleaning with no functional change

Impact

Aucun impact sur le code applicatif, le comportement Delphi/FPC ou les données stockées ; il s’agit uniquement d’un nettoyage du source.

Arnaud Bouchez · 17:11 UTC · voir le commit sur GitHub →

Activité upstream commits par jour · 60 derniers jours
Commits977
Jours actifs44/60
Plus chargé2026-09-30
Pic60
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