Agir maintenantpeut affecter un système en productionLe payload brut contient 24 commits non-merge et 10 merges ; chaque commit non-merge est couvert. Aucun marqueur superseded_by n’est présent. Les plages à éviter reposent sur des correctifs directs des mêmes routines dans ce payload. Les fichiers de version ont été ignorés.
Vérification TLS, formatage sûr et réseau mobile Delphi arrivent ensemble
Les utilisateurs OpenSSL doivent prendre toute la séquence transport : retries socket croisés, vérification hostname par défaut et purge de la file d’erreurs sous OpenSSL 1.x/3.x. Une régression d’une build dans FormatAdder pouvait écrire via une destination invalide pour une sortie vide. Delphi Android/iOS gagnent des backends HTTP System.Net, Delphi ARMv7 devient utilisable et TXmlParser accepte les DOCTYPE simples sans charger les entités DTD.
En bref
- Visez la build 2.4.17065 au commit 743a53fd4cb3af700463b0d143581ce17c6c8b31.
- Les clients OpenSSL vérifient ServerAddress quand HostNamesCsv est vide ; OpenSSL 1.x/3.x purge les erreurs avant connect, accept, read et write.
- Évitez 2.4.17025–2.4.17063 pour la séquence OpenSSL incomplète et 2.4.17047 pour le chemin d’overflow de FormatAdder avec sortie vide.
- Delphi Android et iOS peuvent utiliser TDelphiNetHttp, TRestHttpClientDelphiNet et TSqlDBDelphiNetConnectionProperties via le TLS de l’OS.
- Delphi Android ARMv7 reçoit les stubs ABI, le JSON aligné pour les packed fields et le support des appels variadiques.
- TXmlParser ignore les DOCTYPE externes simples par défaut ; utilisez xpoRejectDocType pour les rejeter, les subsets internes restant non pris en charge.
Conseil de mise à jour
Visez la build 2.4.17065. Les déploiements OpenSSL doivent tester noms DNS et IP avec HostNamesCsv vide, certificats rejetés et transitions WANT de SSL_read/SSL_write sous OpenSSL 1.1/3.x. Auditez les appels directs à UniqueRawUtf8ZeroToTilde : la fonction renvoie maintenant PUtf8Char et remplace tous les contrôles sous #32, pas seulement #0. Les consommateurs XML stricts doivent ajouter xpoRejectDocType. Testez redirects, compression, proxies et callbacks certificat de System.Net sur chaque cible mobile Delphi.
24 sur 24 entrées · 34 commits upstream
1
Critique
Les clients OpenSSL vérifient ServerAddress sans liste de hostnames
TOpenSslNetTls.AfterConnection passe ServerAddress à SSL_set1_host quand Context.HostNamesCsv est vide. Les noms CSV explicites utilisent toujours SSL_set1_host puis SSL_add1_host ; les wildcards partiels restent interdits.
Sécurité
mormot.lib.openssl11
c2012a28+8-9
lib: fixed TOpenSslNetTls.AfterConnection hostname verification
Impact
Avant, un client OpenSSL par défaut avec contrôle certificat mais sans HostNamesCsv vérifiait la chaîne sans hostname attendu. Il rejette maintenant un certificat signé valide pour un autre host.
Mise à jour recommandée
Mettez à jour les clients OpenSSL et testez noms DNS et IP ; définissez HostNamesCsv si l’identité du certificat diffère de ServerAddress.
API publique
TOpenSslNetTls.AfterConnectionbehaviour-changed — HostNamesCsv vide signifie maintenant vérifier ServerAddress, pas ignorer le hostname.
Unités
2
Élevée
Les lectures et écritures OpenSSL réessaient la direction socket opposée
TOpenSslNetTls.Receive attend si SSL_read renvoie SSL_ERROR_WANT_WRITE, et Send attend SSL_ERROR_WANT_READ de SSL_write. WaitRetry attend les TNetEvents par tranches de 100 ms et lève une erreur après cinq secondes.
Correctifs
mormot.lib.openssl11
c52d3378+55-28
lib: fixed TOpenSslNetTls.Receive/Send socket level retry
Impact
Les renégociations et transitions TLS sur sockets async ne deviennent plus des échecs immédiats quand OpenSSL attend la direction réseau opposée.
Mise à jour recommandée
Passez à 2.4.17064 ou ultérieure et testez la charge TLS bidirectionnelle ; ne déployez pas ce retry sans le correctif ultérieur de file d’erreurs.
Unités
3
Élevée
Les retries OpenSSL 1.x et 3.x démarrent avec une file d’erreurs vide
ERR_clear_error est ajouté aux surfaces libcrypto dynamiques et statiques. CheckProc, Receive et Send l’appellent juste avant SSL_connect, SSL_accept, SSL_read ou SSL_write, comme requis jusqu’à OpenSSL 3.x.
Correctifs
mormot.lib.openssl11+1
b999062f+24-12
lib: fixed TOpenSslNetTls error reset for OpenSSL < 4.x
Impact
Les erreurs OpenSSL thread-local obsolètes ne contaminent plus un handshake ou I/O réessayé, évitant faux fatal et diagnostics trompeurs sous OpenSSL 1.1/3.x.
Mise à jour recommandée
Les utilisateurs OpenSSL 1.1/3.x doivent prendre 2.4.17064 ou plus et retester les échecs async connect, accept, read et write.
API publique
ERR_clear_erroradded — La fonction de reset de la file d’erreurs libcrypto est exposée par les bindings OpenSSL dynamiques et statiques.
4
Élevée
FormatAdder n’écrit plus avec un état de formatter vide
FormatAdder appelle Dest.Add et WriteAll seulement si TFormatUtf8.size est non nul. Un format ou des arguments vides n’entrent plus dans WriteAll sans bloc initialisé.
Correctifs
mormot.core.text
57b8cb89+5-4
core: fixed FormatAdder() potential buffer overflow
Impact
La régression d’une build pouvait lire des entrées non initialisées et copier via la destination d’un append de zéro octet, causant overflow ou crash. Le guard supprime ce chemin.
Mise à jour recommandée
Ne livrez pas la build 2.4.17047 ; utilisez 2.4.17048 ou ultérieure si FormatAdder est accessible.
API publique
FormatAdderbehaviour-changed — Un formatage de zéro octet n’alloue plus de destination et n’écrit rien.
Unités
5
Élevée
Delphi Android ARMv7 obtient des interfaces et du JSON packed fonctionnels
Un objet ARM fournit armfakestub, armcallmethod et 128 thunks VMT pour Delphi LLVM. L’ABI place les résultats by-reference dans R0 et Self dans R1, JSON copie les champs packed float/Int64 non alignés et DispInvoke suit l’alignement va_list AAPCS32.
Compilateur & plateforme
mormot.core.interfaces+4
7cda59c1+348-33
all: make the Delphi Android 32-bit (ARMv7) target work
Impact
Delphi Android 32-bit peut exécuter les appels SOA/mock par interface, sérialiser les champs numériques packed sans alignment fault et passer correctement les valeurs variadiques 64-bit. Les chemins desktop Delphi/FPC ne changent pas.
Mise à jour recommandée
Les équipes Delphi ARMv7 doivent reconstruire et tester interfaces, variants et JSON de packed records sur un appareil Android 32-bit réel.
6
Moyenne
Les stack traces TSynLog commencent chez l’appelant applicatif
LockAndPrepareWrite accepte un skip ajouté à AppendCallerShort. Les wrappers formatés, texte et RTTI sautent leur frame, tandis que Log/Enter directs gardent leur profondeur ; l’overload Enter formaté n’est plus redirigé via EnterLocal.
Correctifs
mormot.core.log
e0a83a37+32-19
core: fixed TSynLog stack trace
Impact
LevelStackTrace pointe vers l’appel applicatif au lieu des wrappers internes TSynLog, améliorant l’attribution dans les logs.
À regarder
Si un outil parse les positions exactes, comparez des lignes LevelStackTrace après passage à 2.4.17046 ou plus.
Unités
7
Moyenne
Les headers TSynLog sont préparés uniformément sous le verrou détenu
LockAndPrepareWrite et LockAndPrepareEnter reçoivent l’instance et appellent LogHeader après le verrou writer. Les appels dupliqués disparaissent et l’overload UnicodeString transmet aInstance plutôt que le mauvais identifiant Instance.
Correctifs
mormot.core.log
efb51396+19-25
core: some TSynLog fixes and optimization
Impact
Headers et attribution d’objet sont cohérents pour raw, texte, RTTI et Enter ; les logs UnicodeString n’associent plus la mauvaise instance.
Mise à jour recommandée
Prenez la build 2.4.17046 ou ultérieure si la séquence de pré-rendu TSynLog est présente.
Unités
8
Moyenne
Les logs SQL gardent les placeholders après leur limite de taille
TSqlDBStatement.ComputeSqlWithInlinedParams corrige maxAllowed en maxSize-W.TextLength. Budget épuisé, il écrit '?' pour les paramètres suivants et poursuit le SQL ; les getters tolèrent self=nil et le log d’exception teste directement le niveau SQL.
Correctifs
mormot.db.sql
d080dbe2+22-17
db: fixed TSqlDBStatement logging process
Impact
Le SQL de diagnostic borné n’underflow plus sa taille restante et ne perd plus la fin de la requête ; les logs gardent une structure utile sans valeurs démesurées.
À regarder
Si vos opérations dépendent des logs d’échec SQL, comparez la sortie de LoggedSqlMaxSize après mise à jour.
Unités
9
Moyenne
XML Save et Restore préservent si un DOCTYPE reste autorisé
TXmlParser.Save stocke fStackLen[0] dans l’octet libre du QWord sauvegardé et Restore le restitue. L’état prologue/root est préservé avec Kind, Depth et la position.
Correctifs
mormot.core.fmt
adb58c1a+26-6
core: DOCTYPE should be properly supported after Save/Restore
Impact
Un parsing spéculatif autour du DOCTYPE peut être restauré et rejoué sans considérer à tort la déclaration comme postérieure au root.
Mise à jour recommandée
Utilisez 2.4.17062 ou ultérieure si TXmlParser Save/Restore traite des documents avec DOCTYPE.
Unités
10
Moyenne
TDelphiNetHttp intègre le transport Delphi System.Net
TDelphiNetHttp possède directement THTTPClient dans mormot.net.client ; l’unité temporaire mormot.lib.nethttp disparaît. Il mappe timeouts, proxies, headers, auth, redirects, streams, réponses et certificats, sans redécompresser gzip/deflate sous iOS.
Nouveautés
mormot.defines+1
4964dc05+139-252
net: TDelphiNetHttp as a single class, no new unit
Impact
Delphi Android/iOS peut émettre HTTP/HTTPS via le TLS de la plateforme sans livrer libcurl ou OpenSSL. La classe n’implémente pas les événements de progression.
À regarder
Les projets Delphi mobiles doivent tester proxy, redirect, réponses compressées et erreurs certificat sur chaque version d’OS déployée.
API publique
TDelphiNetHttpadded — Une implémentation publique de THttpRequest basée sur Delphi System.Net.HttpClient est disponible avec USEDELPHINETHTTP.
11
Moyenne
TXmlParser accepte les déclarations DOCTYPE simples par défaut
TXmlParser reconnaît <!DOCTYPE name ...> dans le prologue et saute jusqu’au '>' en respectant les quotes. Il rejette les déclarations après root, subsets internes, markup '<' imbriqué et entités custom ; xpoRejectDocType rétablit le rejet total.
Nouveautés
mormot.core.fmt
22056546+128-11
core: TXmlParser ignore simple DOCTYPE by default
Impact
SVG et autres XML avec déclaration SYSTEM/PUBLIC externe peuvent être parsés sans charger la DTD. Les appelants stricts dépendant de xpeUnsupportedMarkup doivent choisir xpoRejectDocType.
À regarder
Ajoutez xpoRejectDocType partout où la politique exige de rejeter tout DOCTYPE au lieu d’ignorer les déclarations simples.
API publique
xpoRejectDocTypeadded — Le nouveau TXmlParserOption force l’ancien comportement qui rejetait toute déclaration DOCTYPE.
Unités
12
Moyenne
REST HTTPS choisit Delphi System.Net sur les cibles mobiles prises en charge
TRestHttpClientDelphiNet mappe TRestHttpClientRequest vers TDelphiNetHttp. Sans USELIBCURL et avec USEDELPHINETHTTP, TRestHttpsClient devient cet alias au lieu du client socket.
Nouveautés
mormot.rest.http.client
ad2fbdba+43-8
rest: HTTP/HTTPS RESTful JSON default mORMot Client class with Delphi System.Net
Impact
Le code TRestHttpsClient existant sur Delphi Android/iOS obtient HTTPS via le TLS de l’OS sans changer de nom de classe.
À regarder
Vérifiez que les builds mobiles résolvent TRestHttpsClient vers le backend prévu et testez auth et politique certificat.
API publique
TRestHttpClientDelphiNetadded — Une classe publique de client REST basée sur Delphi System.Net.HttpClient est disponible conditionnellement.TRestHttpsClientbehaviour-changed — Avec USEDELPHINETHTTP et sans USELIBCURL, l’alias sélectionne maintenant TRestHttpClientDelphiNet.
Unités
13
Moyenne
Le proxy SQL distant gagne un backend Delphi System.Net
mormot.db.proxy ajoute TSqlDBDelphiNetConnectionProperties sous USEDELPHINETHTTP. Son constructeur crée TDelphiNetHttp et la classe est enregistrée pour la construction par définition.
Nouveautés
mormot.db.proxy+1
d9d710d1+39-5
db: introducing TSqlDBDelphiNetConnectionProperties
Impact
Les clients Delphi mobiles peuvent joindre un service mormot.db.sql distant en HTTP/HTTPS via le réseau de l’OS.
À regarder
Les projets choisissant ce backend doivent tester authentification et statements distants sur l’OS mobile cible.
API publique
TSqlDBDelphiNetConnectionPropertiesadded — Une classe publique de connexion SQL proxy HTTP basée sur TDelphiNetHttp est disponible avec USEDELPHINETHTTP.
14
Moyenne
UniqueRawUtf8ZeroToTilde renvoie maintenant un texte borné et nettoyé
UniqueRawUtf8ZeroToTilde passe de procedure à function renvoyant PUtf8Char. La vue renvoyée est terminée à MaxSize et tous les octets sous #32 deviennent '~', au lieu des seuls #0.
Nouveautés
mormot.core.unicode
1f32a7e3+15-12
core: refined UniqueRawUtf8ZeroToTilde()
Impact
Les appelants peuvent ajouter une C-string bornée sans modifier la longueur managed de RawUtf8. Les logs aplatissent aussi tabs, retours ligne et contrôles.
À regarder
Recherchez les appels directs si le code dépend des caractères de contrôle ou de l’ancienne déclaration procedure.
API publique
UniqueRawUtf8ZeroToTildesignature-changed — La routine renvoie PUtf8Char et nettoie tous les octets de contrôle sous #32 sans changer la longueur allouée RawUtf8.
Unités
15
Moyenne
Delphi Darwin lie les API process Mach depuis clib
Les déclarations host_processor_info, mach_host_self, vm_deallocate et mach_task_self spécifient external clib name au lieu de traiter le symbole comme fichier de bibliothèque.
Compilateur & plateforme
mormot.core.os.posix
60e27c19+4-4
core: name the library for the mach externals on Darwin
Impact
Les builds Delphi macOS/iOS ne tombent plus au link avec file not found pour ces symboles Mach. La résolution FPC reste identique.
Mise à jour recommandée
Les projets Delphi Darwin touchés par l’erreur de link Mach doivent reconstruire avec cette révision ou ultérieure.
Unités
16
Faible
Les erreurs de contrat SOA exposent un kilo-octet de JSON nettoyé
TServiceFactoryClient.FakeContractRetrieve construit son message de réponse invalide avec Join et la vue PUtf8Char bornée de UniqueRawUtf8ZeroToTilde, limitée à 1 Ko.
Correctifs
mormot.soa.client
9dfdcc05+4-7
soa: fixed TServiceFactoryClient error message content
Impact
Les réponses SOA invalides n’ajoutent plus la fin non bornée de la managed string après un terminateur ; le diagnostic reste compact et sur une ligne.
Unités
17
Faible
Les logs de rollback batch ne modifient plus la longueur managed du JSON
TRestOrmServerBatchSend.OnError passe le PUtf8Char de UniqueRawUtf8ZeroToTilde au formatter et limite les données à SizeOf(TBuffer4K), au lieu d’insérer un terminateur dans fData puis logger la chaîne managed.
Correctifs
mormot.orm.server
c2393ce7+3-4
orm: fixed TRestOrmServerBatchSend.OnError logged content
Impact
Les diagnostics de rollback partiel sont bornés et sur une ligne, tandis que le buffer batch reste cohérent pour le nettoyage ultérieur.
Unités
18
Faible
AppendSysInfo réutilise des snapshots binaires et texte d’une seconde
RetrieveSysInfo remplit des sorties binaires/texte optionnelles sous OSSafe depuis un cache TSysInfo d’une seconde. Le rendu est gardé en TShort95 et AppendSysInfo le copie dans la capacité restante de la ShortString.
Performance
mormot.core.os+2
743a53fd+52-36
core: cache AppendSysInfo() text for 1 second
Impact
Les logs LevelSysInfo répétés dans la seconde évitent de reconstruire le texte CPU/load/mémoire et réutilisent le même snapshot. Les valeurs peuvent rester identiques une seconde par conception.
API publique
AppendSysInfobehaviour-changed — Le helper public ajoute maintenant un snapshot texte caché une seconde au lieu de reformater chaque appel.
19
Faible
L’état de formatage TSynLog passe dans un record de pré-rendu
TPreRenderFmt regroupe format, arguments, instance, longueur et buffer stack de 4 Ko. TSynLogFamily.PreRenderFmt et les chemins Enter/Log passent ce record au lieu de nombreux paramètres, avec le même fallback direct.
Sous le capot
mormot.core.log
723e8275+102-84
core: rewritten TSynLogFamily.PreRenderFmt logic
Impact
C’est une plomberie interne sans changement d’API ou de sortie voulu, mais elle ouvre la séquence complétée par les correctifs suivants.
Unités
20
Faible
Les wrappers TFormatUtf8 et TSynLog sont simplifiés en interne
TFormatUtf8 suit last/max directement et utilise un helper WriteAll partagé ; TSynLog remplace LogFmt par AddPreRenderFmt. Les commentaires SQLite documentent la limite de pré-rendu de 4 Ko. Aucun changement fonctionnel n’était voulu.
Sous le capot
mormot.core.log+2
b47efdb5+78-72
core: some refactoring with no functional change
Impact
Le refactor est interne, mais son cas FormatAdder à sortie vide est corrigé immédiatement au commit suivant ; ne restez pas sur 2.4.17047.
21
Faible
Le scan DOCTYPE est simplifié sans élargir le markup accepté
ParseDocType centralise les contrôles root, option, nom et limites, puis scanne quotes et markup interdit en une boucle. Les tests ajoutent un commentaire avant DOCTYPE.
Sous le capot
mormot.core.fmt
3d2c0c85+36-49
core: simplified TXmlParser.ParseDocType for #614
Impact
Aucun changement public voulu au-delà de la feature précédente ; les formes acceptées et rejetées restent testées.
Unités
22
Faible
Le test DNS réel affiche timing et détails de réponse brute
Le test yahoo.com utilise maintenant DnsQuery, vérifie les compteurs raw/parsé et affiche durée, taille, rcode et troncature.
Tests
e4ebd6dc+29-13
tests: enhanced "dig yahoo.com" test with console output
Impact
Le framework ne change pas ; les échecs de tests réseau donnent un diagnostic DNS plus exploitable.
23
Faible
Le test de statement en échec utilise une exception silencieuse
Le test de base externe #606 lève et attend ESynLogSilent au lieu de ESqlDBException afin d’éviter le bruit d’exception volontaire dans l’IDE.
Tests
00a2da4f+4-4
tests: simplified #606 test when run in IDE
Impact
Seule l’ergonomie du test change ; les exceptions de base en application sont inchangées.
24
Faible
Les titres du log viewer affichent la plateforme et des lignes plus serrées
TMainLogView ajoute OS_TEXT et CPU_ARCH_TEXT au titre et ajuste le calcul de hauteur des lignes. Une correction d’indentation JSON est incluse.
Entretien
mormot.tools.logview
b123f603+7-6
tools: minor TMainLogView tweaks
Impact
Seule la présentation du log viewer desktop change ; le logging et la sérialisation JSON restent identiques.