mORMot2 DailyLecture quotidienne des commits upstream

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.

Build2.4.17024 → 2.4.17065
Commits34
Lignes+2648 -805
Lecture6 min

24 sur 24 entrées · 34 commits upstream

Sujets
# Entrée Catégorie Unités
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.

API publique

  • TOpenSslNetTls.AfterConnectionbehaviour-changed — HostNamesCsv vide signifie maintenant vérifier ServerAddress, pas ignorer le hostname.

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

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.

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

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.

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.

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

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.

API publique

  • FormatAdderbehaviour-changed — Un formatage de zéro octet n’alloue plus de destination et n’écrit rien.

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

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.

Stefan Diestelmann · 09:21 UTC · voir le commit sur GitHub →

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.

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

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.

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

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.

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

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.

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

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.

Stefan Diestelmann · 08:51 UTC · voir le commit sur GitHub →

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.

Arnaud Bouchez · 15:36 UTC · voir le commit sur GitHub →

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.

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

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.

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

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.

Arnaud Bouchez · 09:59 UTC · voir le commit sur GitHub →

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.

Stefan Diestelmann · 07:56 UTC · voir le commit sur GitHub →

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.

Arnaud Bouchez · 10:00 UTC · voir le commit sur GitHub →

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.

Arnaud Bouchez · 09:59 UTC · voir le commit sur GitHub →

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.

Arnaud · 21:24 UTC · voir le commit sur GitHub →

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.

Arnaud Bouchez · 10:01 UTC · voir le commit sur GitHub →

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.

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

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.

Arnaud Bouchez · 15:50 UTC · PR #614 · voir le commit sur GitHub →

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.

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

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.

Arnaud Bouchez · 07:51 UTC · PR #606 · voir le commit sur GitHub →

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.

Arnaud Bouchez · 14:42 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