Agir maintenantpeut affecter un système en productionLe payload brut ne contient aucun marqueur superseded_by. Les commits de merge sont exclus des entrées comme demandé. La branche de correction numérique a été créée quand son fichier de commit contenait encore 16812, puis fusionnée après la build 16828 ; le head final reste donc étiqueté 2.4.16828.
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.
21 sur 21 entrées · 23 commits upstream
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.
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.
Mise à jour recommandée
Passez au head final et exécutez les tests du parser sur les entiers limites, les bornes Currency et les entrées décimales ou exponentielles mal formées provenant de clients externes.
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.
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.
Mise à jour recommandée
Mettez à niveau les services DHCP qui appellent Setup après le démarrage, puis testez le rechargement des scopes et l’arrêt sous charge.
Unités
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.
Unités
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.
Unités
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.
Unités
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.
Unités
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.
Unités
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.
Unités
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.
Unités
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.
Unités
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.
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.
Unités
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.
Unités
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.
Unités
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.
Unités
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.
Unités
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.
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.
Unités
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.
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.