mORMot2 DailyLecture quotidienne des commits upstream

DNS retente les réponses tronquées et l’allocation Win64 respecte l’ABI

Les clients DNS retentent maintenant toute réponse UDP tronquée via TCP et rejettent plus sûrement les noms compressés malformés ; le texte des enregistrements TXT et HINFO est décodé selon son format réseau préfixé par la longueur. Les utilisateurs FPC Win64 reçoivent une réparation en deux commits qui supprime les manipulations du pointeur de pile autour des appels dans mormot.core.fpcx64mm et remplace une routine de verrouillage pouvant provoquer une faute sous l’émulation Windows ARM. Le nouveau wrapper TCachedValues n’est pas prêt à l’emploi, car les branches de comparaison de Exists sont inversées dans cette révision.

En bref

  • DnsQuery retente maintenant via TCP les réponses TC=1 même si le paquet UDP ne contient aucune réponse ou porte un code d’erreur.
  • DnsParseString rejette les pointeurs de compression vers l’avant, vers soi-même et réservés ; TXT et HINFO suivent désormais leur encodage RFC préfixé par la longueur.
  • Sous FPC Win64, mormot.core.fpcx64mm n’utilise plus push/pop autour des appels sensibles à l’ABI ; prenez la build 2.4.16790 plutôt que de vous arrêter à 2.4.16784.
  • TCachedValues devient public, mais TCachedValues.Exists échoue toujours avec le comparateur par défaut et ignore CustomCompare lorsqu’il est fourni dans cette révision.

Conseil de mise à jour

Les utilisateurs FPC Win64 de FPC_X64MM et les applications dépendant de mormot.net.dns devraient passer à la build 2.4.16790. Ne vous arrêtez pas à la build 2.4.16784, avant la conversion des derniers sites push/pop Win64, ni à la build 2.4.16786, avant que le fallback TC=1 accepte les paquets tronqués avec code d’erreur. N’adoptez pas TCachedValues.Exists avant la correction de la sélection du comparateur.

Build2.4.16776 → 2.4.16790
Commits10
Lignes+445 -176
Lecture5 min

9 sur 9 entrées · 10 commits upstream

Sujets
# Entrée Catégorie Unités
1 Élevée L’assembleur de l’allocator Win64 confie la préservation de pile aux variables locales FPC mormot.core.fpcx64mm réécrit les chemins MSWINDOWS de _GetMem, _ReallocMem et _AllocMem afin de sauvegarder registres non volatils et valeurs temporaires dans des variables locales déclarées plutôt qu’avec push/pop autour des appels. mormot.core.os supprime aussi l’assembleur x86-64 dédié de TRWLock.ReadOnlyLock et utilise l’implémentation Pascal LockedExc/SpinAndWait après l’observation d’un GPF sous Windows ARM PRISM. Correctifs mormot.core.fpcx64mm+1 3aca6e26+109-66

core: fixed fpcx64mm on Win64 ABI

Impact

Le code FPC Win64 utilisant FPC_X64MM ne modifie plus rsp autour des appels imbriqués sensibles à l’ABI dans ses principaux chemins d’allocation, ce qui réduit le risque de crash ou corruption. Les systèmes Windows ARM exécutant du x86-64 via PRISM évitent le GPF observé dans TRWLock ; les autres plateformes conservent leurs chemins.

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

2 Élevée Les derniers appels de l’allocator Win64 cessent de préserver les registres avec push et pop mormot.core.fpcx64mm ajoute des emplacements locaux MSWINDOWS à PrefetchMediumBlock, FreeMediumBlock et _FreeMem. Les registres non volatils, la taille du bloc medium et la valeur de retour sont stockés dans le frame géré par le compilateur au lieu de modifier rsp autour des appels imbriqués ; le chemin System V conserve push/pop. Correctifs mormot.core.fpcx64mm 4af05f7b+48-12

core: (hopefully) one last fpcx64mm pass for Win64 ABI fixes

Impact

Cela complète la réparation ABI Win64 pour les chemins d’allocation et de libération où FPC contrôle l’alignement de pile et le shadow space. Les services utilisant FPC_X64MM sous Win64 évitent les derniers sites à risque ; l’assembleur POSIX/Linux conserve son chemin plus rapide sans frame.

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

3 Élevée Les noms DNS compressés rejettent les boucles, pointeurs vers l’avant et labels réservés DnsParseString dans mormot.net.dns calcule séparément chaque offset de compression sur 14 bits et rejette les offsets égaux ou supérieurs à la position du pointeur ou à la limite de la réponse. Il ne mémorise que la première position de retour et rejette les formes de label réservées %01xxxxxx et %10xxxxxx avant de copier les octets. Correctifs mormot.net.dns ddb63463+15-10

net: fixed DnsParseString() decoding against RFC 1035

Impact

Une réponse DNS malformée ou hostile ne peut plus maintenir le parser indéfiniment dans une chaîne de compression vers soi-même ou vers l’avant, et les pointeurs hors limites échouent avant l’accès. La compression arrière valide de RFC 1035 reste décodée.

API publique

  • DnsParseStringbehaviour-changed — Les encodages de compression vers l’avant, vers soi-même, réservés ou hors limites retournent maintenant zéro.

Arnaud Bouchez · 13:52 UTC · voir le commit sur GitHub →

4 Élevée Une réponse UDP tronquée et vide déclenche maintenant quand même une relance DNS en TCP DnsQuery dans mormot.net.dns accepte d’abord une réponse UDP dès que son header, sa source, son identifiant de transaction et son flag de réponse sont valides, puis inspecte Truncation avant d’exiger un corps plus long que la requête ou un AnswerCount non nul. Un header TC=1 passe donc au chemin TCP existant même sans réponse. Correctifs mormot.net.dns 7c79f344+12-9

net: fixed DNS responses with TC=1

Impact

Les résolveurs tels que les versions actuelles de Samba qui renvoient seulement un header tronqué via UDP ne provoquent plus un faux échec DNS. Le client suit RFC 2181 et récupère la réponse complète via TCP.

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

5 Moyenne Les enregistrements TXT et HINFO décodent maintenant leurs champs character-string mormot.net.dns ajoute le helper borné DnsParseCharString. DnsParseData concatène toutes les chaînes préfixées par leur longueur dans le RDATA TXT, décode exactement deux chaînes HINFO pour CPU et OS, et vide Text lorsqu’un composant dépasse la limite de l’enregistrement. Les autres unités touchées corrigent seulement l’orthographe de commentaires ou d’un message d’erreur LDAP. Correctifs mormot.core.text+2 55352bf1+51-7

net: properly decode TXT/HINFO DNS fields content

Impact

Les réponses TXT n’exposent plus leurs octets de longueur comme du texte et ne sont plus traitées comme un nom de domaine compressé. HINFO retourne la paire CPU et OS attendue, et les longueurs malformées échouent sans lire l’enregistrement suivant.

API publique

  • DnsParseDatabehaviour-changed — Les RDATA TXT et HINFO utilisent maintenant le décodage DNS character-string.

Arnaud Bouchez · 13:53 UTC · voir le commit sur GitHub →

6 Moyenne Les flags DNS et le fallback TCP acceptent le comportement valide des serveurs TDnsHeader.GetZ lit maintenant Flags2, où se trouvent les bits Z. DnsQuery vérifie TC avant de rejeter un code de réponse non réussi, afin que toute réponse UDP tronquée puisse déclencher TCP, et n’exige plus RecursionAvailable dans la réponse TCP finale. Correctifs mormot.net.dns f2d633a0+7-8

net: some other fixes to our DNS parser

Impact

Les serveurs DNS autoritatifs ou non récursifs peuvent répondre via TCP sans poser RA, et les paquets UDP tronqués avec code d’erreur reçoivent quand même la relance TCP obligatoire. L’inspection de Z lit maintenant le bon octet du header.

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

7 Moyenne Le nouveau cache thread-safe ne retrouve pas encore correctement ses valeurs mormot.core.unicode ajoute le record/object public TCachedValues avec protection TLightLock, un TRawUtf8DynArray trié, une remise à zéro temporelle via GetTickSec shr TixShr, et les méthodes Reset, Exists et Add. Dans Exists, la branche Assigned(CustomCompare) appelle la surcharge de comparaison par défaut, tandis que la branche nil passe nil à la surcharge de comparaison personnalisée. Nouveautés mormot.core.unicode 047555ca+64-2

core: new TCachedValues thread-safe wrapper

Impact

Avec CustomCompare à nil par défaut, TCachedValues.Exists appelle une surcharge qui retourne immédiatement « introuvable » faute de comparateur. Avec un comparateur personnalisé, Add trie avec celui-ci mais Exists cherche avec le comparateur sensible à la casse par défaut. Les nouveaux appelants ne peuvent donc pas se fier à Exists dans la build 2.4.16790.

À regarder

N’adoptez pas TCachedValues.Exists à cette révision ; attendez une correction ou inversez localement ses branches de comparateur et ajoutez des tests pour les comparaisons par défaut et personnalisées.

API publique

  • TCachedValuesadded — Cache public RawUtf8 trié et fenêtré dans le temps avec Reset, Exists et Add ; Exists est défectueux dans cette révision.

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

8 Faible Les fichiers de régression réseau restent près de l’exécutable de test TNetworkProtocols.Setup crée un répertoire temp près de l’exécutable, puis les tests OpenAPI, keytab Kerberos, bail DHCP et téléchargement HTTP l’utilisent au lieu du dossier temporaire système ou de WorkDir. Un suffixe de séquence évite aussi les collisions de noms pour les téléchargements. Tests 73b7ed6a+57-27

tests: network protocols won't use system temp folder

Impact

Les tests évitent les permissions du dossier temporaire système et les tests en arrière-plan ne voient plus les fichiers transitoires des autres dans WorkDir. Le runtime du framework et les emplacements applicatifs ne changent pas.

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

9 Faible Les tests de polices PDF acceptent les hash connus de davantage de configurations Windows TTestUiPdf.FontEmbeddingAndHashValidation remplace deux tables de hash dépendantes de la version OS par cinq hash acceptés via IntegerScanExists. Le test utilise aussi une variable TPdfDocument explicite, affiche le nom de police avec le hash hexadécimal et conserve le second passage seulement si le remplacement ANSI_CHARSET est disponible. Tests 5ee01b27+28-29

test: refined TTestUiPdf.FontEmbeddingAndHashValidation

Impact

Les tests de régression PDF tolèrent des différences connues d’incorporation liées aux polices installées plutôt qu’à un défaut du framework. Le code de génération PDF et la sortie applicative ne changent pas.

Arnaud Bouchez · 08:39 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