mORMot2 DailyLecture quotidienne des commits upstream

Le routage proxy mûrit et un piège de sous-classe WebSocket est corrigé

Cette édition étend la détection et le contournement des proxy aux clients socket et REST, puis corrige le routage des redirections, les identifiants proxy, les couches socket et la validation des URI. Elle ajoute aussi des fabriques WebSocket sensibles aux options, le build final réparant une régression de sous-classe dans leurs anciennes surcharges. Les appels directs à GetProxyForUri doivent désormais fournir un TUri au lieu d’un RawUtf8.

En bref

  • GetProxyForUri accepte désormais TUri au lieu de RawUtf8 ; ses appels directs nécessitent une migration du code source.
  • HTTP_PROXY, HTTPS_PROXY, NO_PROXY, les listes de contournement Windows et REST ProxyName alimentent désormais le routage du client socket.
  • Les redirections cross-origin, changements d’identifiants proxy et reconnexions non-TCP choisissent maintenant le bon routage et la bonne couche socket.
  • Les nouvelles surcharges THttpClientWebSockets.WebSocketsConnect acceptent TUri et THttpRequestExtendedOptions ; le build 2.4.17462 corrige le dispatch des sous-classes via les anciennes surcharges.
  • RemoveMagicFromJson retire JSON_BASE64_MAGIC au début des chaînes JSON sans modifier les chaînes ordinaires.
  • Adoptez le build 2.4.17462 et évitez de rester sur les builds 2.4.17450 à 2.4.17461.

Conseil de mise à jour

Adoptez le build final 2.4.17462. Les builds 2.4.17450–2.4.17461 contiennent la transition TUri/proxy/WebSocket avant les correctifs ultérieurs de redirection, couche socket, identifiants, parser et sous-classe. Avant compilation, recherchez les appels directs à GetProxyForUri et remplacez les arguments RawUtf8 par un TUri parsé ; testez ensuite le contournement proxy, les proxy authentifiés, les redirections cross-origin et les sous-classes WebSocket.

Build2.4.17433 → 2.4.17462
Commits27
Lignes+1070 -395
Lecture8 min

27 sur 27 entrées · 27 commits upstream

Sujets
# Entrée Catégorie Unités
1 Élevée GetProxyForUri exige désormais un TUri parsé Le paramètre public de GetProxyForUri passe de RawUtf8 à TUri. Une surcharge GetSystemProxyUri(TUri, proxy, bypass, temp) est ajoutée, tandis que le wrapper de compatibilité RawUtf8 reste disponible pour GetSystemProxyUri. Ruptures mormot.net.client+1 fb71148d+90-83

net: favor TUri input for proxy calculation

Impact

Les appels directs GetProxyForUri('https://...') ne compilent plus sous Delphi ou FPC. Les appels internes évitent un nouveau parsing et utilisent un URI normalisé unique pour les décisions proxy et bypass.

Migration nécessaire

Recherchez les appels GetProxyForUri, parsez le texte dans un TUri avec TUri.From et transmettez ce record à GetProxyForUri.

API publique

  • GetProxyForUrisignature-changed
  • GetSystemProxyUri(TUri, RawUtf8, RawUtf8, TUri)added

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

2 Élevée Les clients socket recalculent le bypass et le proxy après une redirection cross-origin THttpClientSocket ajoute SetTunnelForUri et SameTunnelForUri. OpenOptions utilise la liste ProxyByPass configurée, SameOpenOptions compare la route effective et les reconnexions cross-origin recalculent Tunnel avant OpenBind. Correctifs mormot.net.client 162838d7+28-17

net: fixed THttpClientSocket proxy support

Impact

Les règles de bypass s’appliquent maintenant à la connexion socket initiale, et une redirection vers une autre origine ne conserve plus la route directe ou proxy de la première origine.

API publique

  • THttpClientSocket proxy routingbehaviour-changed

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

3 Élevée Les redirections se reconnectent lorsque leur route proxy effective change THttpClientSocket extrait SameTunnelForUri et l’intègre à SameOpenOptions. Une redirection ferme et rouvre désormais la connexion lorsque la destination résout vers une route directe ou proxy différente, et HTTP_SCHEME accepte les records usUndefined construits par affectation de champs. Correctifs mormot.net.client+1 1b254474+24-15

net: some other proxy fixes

Impact

Une redirection ne peut plus réutiliser un socket connecté par la mauvaise route proxy, évitant d’envoyer la requête à un peer ou tunnel incompatible.

API publique

  • HTTP_SCHEMEbehaviour-changed

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

4 Élevée Les anciennes fabriques WebSocket préservent désormais la classe cliente dérivée demandée THttpClientWebSockets.LegacyWebSocketsConnect est maintenant une class function protégée et appelle WebSocketsConnect via sa classe courante. TPrivateRelay.NewServerClient utilise un cast as après TServerClient.WebSocketsConnect. Correctifs mormot.net.relay+1 754f9f1f+13-9

net: fixed THttpClientWebSockets.WebSocketsConnect legacy overloads

Impact

Les anciennes surcharges appelées sur un descendant de THttpClientWebSockets construisent désormais ce descendant. Les builds 2.4.17454–2.4.17461 pouvaient renvoyer la classe parente et faire échouer un cast relay ou omettre l’état du descendant.

API publique

  • THttpClientWebSockets.WebSocketsConnect legacy overloadsbehaviour-changed

Arnaud · 20:50 UTC · voir le commit sur GitHub →

5 Élevée Les reconnexions conservent leur couche socket et les redirections refusent les schémas non HTTP Les retries THttpClientSocket et TCrtSocket.ConnectUri, ReOpen et OpenFrom transmettent maintenant le TNetLayer stocké à OpenBind. Le traitement des redirections refuse un Location dont le schéma TUri est hors HTTP_SCHEME. Correctifs mormot.net.client+1 ba80a667+15-7

net: fixed OpenBind() socket layer usage

Impact

Les sockets UDP et Unix ne se rouvrent plus silencieusement en TCP, et une redirection HTTP ne peut plus faire basculer le client vers un schéma non pris en charge.

API publique

  • TCrtSocket.ReOpenbehaviour-changed
  • TCrtSocket.OpenFrombehaviour-changed

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

6 Moyenne Les autorités URI invalides sont rejetées et les ports proxy comparés de façon cohérente TUri.FromBuffer efface désormais Server et échoue pour les ports vides, uniquement composés d’espaces ou les fins d’autorité invalides. THttpClientSocket.OpenBind fournit le port 80 ou 443 lors de la comparaison d’une destination avec son tunnel proxy. Correctifs mormot.net.client+2 22cf7d7d+102-22

net: enhanced TUri parser

Impact

Un endpoint invalide ne laisse plus un TUri partiellement utilisable, et les routes proxy avec port par défaut risquent moins d’être prises pour une destination différente.

API publique

  • TUri.FromBufferbehaviour-changed

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

7 Moyenne La réutilisation du proxy tient compte des identifiants et expose les erreurs WebSocket THttpClientSocket.SameTunnelForUri compare le User et Password du proxy en plus du serveur, port et TLS. TCrtSocket.OpenBind efface fProxyUrl et compare le tunnel complet, tandis que la surcharge WebSocketsConnect avec TUri reçoit une sortie optionnelle aErrorMessage. Correctifs mormot.net.client+3 7b276456+23-12

net: another set of proxy fixes

Impact

Changer les identifiants d’un même endpoint proxy force désormais le bon état de routage au lieu de réutiliser une connexion authentifiée avec d’anciens identifiants.

API publique

  • THttpClientWebSockets.WebSocketsConnect(TUri, ...)signature-changed

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

8 Moyenne La destruction des connexions async rend les écritures inachevées explicitement abortives TPollAsyncConnection.Destroy désactive SO_LINGER pour une fermeture normale lorsque fWr est vide, mais fixe un linger nul avant fermeture si le buffer d’écriture userspace contient encore des données, provoquant un reset et discard immédiats. Correctifs mormot.net.async ab20d3ec+6-3

net: tuned TPollAsyncConnection closure

Impact

La destruction ne tente plus une fermeture ambiguë avec des données bufferisées non envoyées ; le peer reçoit une fermeture abortive lorsque l’envoi ne peut être terminé. Les écritures achevées gardent une fermeture asynchrone normale.

API publique

  • TPollAsyncConnection.Destroybehaviour-changed

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

9 Moyenne Les clients WebSocket gagnent des fabriques sensibles aux URI et options THttpClientWebSockets ajoute des surcharges WebSocketsConnect pour TUri avec THttpRequestExtendedOptions et pour un texte URI avec un pointeur d’options. Les anciennes surcharges host/port et URI sont conservées via un helper legacy. Nouveautés mormot.net.ws.client 04fdbef9+86-29

net: new THttpClientWebSockets.WebSocketsConnect overloads

Impact

Les connexions WebSocket peuvent partager la configuration proxy, bypass, TLS et délais des clients HTTP. Ne restez pas sur ce build d’introduction car le dispatch des sous-classes legacy n’est corrigé qu’au build 2.4.17462.

API publique

  • THttpClientWebSockets.WebSocketsConnect(TUri, var THttpRequestExtendedOptions, ...)added
  • THttpClientWebSockets.WebSocketsConnect(RawUtf8, TWebSocketProtocol, PHttpRequestExtendedOptions, ...)added

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

10 Moyenne Les préfixes magic des BLOB JSON peuvent désormais être retirés du texte sérialisé mormot.core.json ajoute RemoveMagicFromJson(var RawUtf8). La fonction parcourt les chaînes JSON, retire un marqueur UTF-8 JSON_BASE64_MAGIC placé en tête, compacte en place les chaînes uniques et copie les chaînes partagées avant modification. Nouveautés mormot.core.json e82e1227+76-2

core: new RemoveMagicFromJson() function

Impact

Les applications peuvent convertir un JSON mORMot marqué pour les BLOB en JSON base64 standard sans reparsing du document ; la sérialisation existante ne change pas tant que la fonction n’est pas appelée.

API publique

  • RemoveMagicFromJsonadded

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

11 Moyenne Le matching NO_PROXY des domaines et IP devient un helper public réutilisable mormot.net.client ajoute NoProxyMatch. La fonction gère les règles séparées par virgule, le point initial optionnel, les hosts exacts, sous-domaines, littéraux IPv4 et IPv6 et un wildcard seul, avec tests de régression. Nouveautés mormot.net.client+1 530cb3f0+71-7

net: new NoProxyMatch() parsing function

Impact

Les applications et le client HTTP peuvent appliquer une sémantique NO_PROXY cohérente sans dupliquer le code de matching des suffixes de domaine.

API publique

  • NoProxyMatchadded

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

12 Moyenne La détection proxy WinHTTP applique la liste de contournement système GetWinProxyForUri encapsule WinHttpGetProxyInfo, convertit ses champs URL et Bypass et efface le proxy choisi lorsque ProxyByPassMatch accepte le host de l’URI. Le formatage des erreurs de sécurité WinHTTP est aussi simplifié. Nouveautés mormot.lib.winhttp+1 fa71c244+40-17

net: enhanced WinHttp API support for GetProxyForUri()

Impact

Les clients Windows utilisant la détection automatique du proxy système se connectent désormais directement aux destinations de la liste de contournement des Options Internet.

API publique

  • GetWinProxyForUriadded

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

13 Moyenne La sélection du proxy socket gagne le support explicite des listes de contournement GetSystemProxyUri reçoit un argument bypass et exclut les hosts correspondants avant de choisir un proxy forcé, global ou détecté. THttpClientSocket transmet THttpRequestExtendedOptions.ProxyByPass à cette décision. Nouveautés mormot.net.client 0e03d2c8+17-12

net: ProxyByPass support for THttpClientSocket

Impact

Les clients HTTP basés sur socket peuvent désormais respecter les masques de bypass de style Windows au lieu d’envoyer toute destination non locale via le proxy.

API publique

  • GetSystemProxyUrisignature-changed
  • THttpClientSocket proxy bypassbehaviour-changed

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

14 Moyenne La détection du proxy socket respecte désormais NO_PROXY sous Windows et POSIX GetProxyForUri lit NO_PROXY après sélection de HTTP_PROXY ou HTTPS_PROXY et efface le proxy lorsque NoProxyMatch accepte le host parsé. Le même chemin compile sous Windows et POSIX. Nouveautés mormot.net.client+1 2e0bdd2b+22-4

net: NO_PROXY env variable support for GetProxyForUri()

Impact

Les environnements définissant NO_PROXY peuvent désormais envoyer directement les destinations correspondantes au lieu de passer par le proxy configuré, conformément à la variable d’environnement.

À regarder

Vérifiez les valeurs NO_PROXY déployées et testez que les hosts internes requis contournent le proxy tandis que les hosts externes l’utilisent toujours.

API publique

  • GetProxyForUribehaviour-changed

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

15 Moyenne TUri peut normaliser les schémas WebSocket en HTTP pour chercher un proxy TUri.URI et TUri.ServerPort reçoivent un paramètre optionnel NormalizeToHttp. À true, les records ws et wss sont émis en http et https tout en conservant serveur, port et adresse. Nouveautés mormot.net.sock 6e58a86c+10-9

net: new NormalizeToHttp optional parameter to TUri.ServerPort/Uri methods

Impact

Les API proxy peuvent interroger la configuration HTTP pour des endpoints WebSocket sans perdre le schéma original dans la sortie TUri normale. Les appels existants restent compatibles grâce à false par défaut.

API publique

  • TUri.URIsignature-changed
  • TUri.ServerPortsignature-changed

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

16 Moyenne Les clients REST socket conservent désormais les réglages proxy explicites TRestHttpClientSocket.InternalOpen ne force THttpRequestExtendedOptions.Proxy à 'none' que si Proxy est vide. Les valeurs ProxyName et ProxyByPass fournies au constructeur atteignent donc THttpClientSocket.OpenOptions. Nouveautés mormot.rest.http.client 1f291195+5-5

rest: ProxyName support for TRestHttpClientSocket

Impact

Les clients REST socket peuvent utiliser un proxy explicite pour la première fois ; les déploiements qui fournissaient déjà ces paramètres auparavant ignorés changeront maintenant de route réseau.

À regarder

Si vos constructeurs TRestHttpClientSocket reçoivent déjà ProxyName ou ProxyByPass, vérifiez en staging la route et l’authentification désormais actives.

API publique

  • TRestHttpClientSocket proxy parametersbehaviour-changed

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

17 Faible La sélection automatique PeerCache ignore les interfaces inactives THttpPeerCacheSettings.GuessInterface ajoute mafUpOnly lorsqu’aucun nom d’interface n’est fourni et indique qu’aucune interface locale active n’a été trouvée. Une interface nommée explicitement peut toujours être inactive. Correctifs mormot.net.server 2afaac27+8-8

net: automatic PeerCache selection require an "up" interface

Impact

Le démarrage automatique de PeerCache ne choisit plus un adaptateur déconnecté produisant une adresse inutilisable ; la sélection explicite conserve son comportement précédent.

API publique

  • THttpPeerCacheSettings.GuessInterfacebehaviour-changed

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

18 Faible Les masques de contournement proxy de style Windows gagnent un matcher dédié mormot.net.client ajoute ProxyByPassMatch pour des masques de host séparés par point-virgule et insensibles à la casse. La fonction implémente les wildcards et la règle Windows <local> pour les noms sans point. Nouveautés mormot.net.client d916140c+82-2

net: new ProxyByPassMatch() parsing function

Impact

Les applications et le code client socket suivant peuvent évaluer la même syntaxe de contournement que les réglages proxy Windows.

API publique

  • ProxyByPassMatchadded

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

19 Faible Les tests Tunnel rapportent l’état des connexions et exposent le texte des flags mormot.net.tunnel ajoute ToText(TTunnelLocalFlags). En cas d’échec, les envois du test TunnelSocket loguent thread, processing, flags, port local et port distant, et mormot.net.sock documente toutes les plages de SetLinger. Nouveautés mormot.net.sock+2 fbcc175f+41-11

test: added more context to Tunnel coverage

Impact

Le comportement Tunnel en production est inchangé ; les échecs gagnent assez d’état pour le diagnostic et les applications peuvent réutiliser le nouveau formatter de flags.

API publique

  • ToText(TTunnelLocalFlags)added

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

20 Faible Les noms de schéma URI et ports par défaut deviennent des constantes publiques mormot.net.sock publie SCHEME_TEXT et SCHEME_PORT et remplace les tableaux privés dans TUri. Le commit retire aussi une remise à zéro dupliquée de fProxyAuthHeader et étend les tests de ports invalides. Nouveautés mormot.net.client+2 7dddd3ec+25-15

net: published SCHEME_TEXT/SCHEME_PORT constants

Impact

Le code applicatif peut réutiliser le mapping canonique des schémas et ports de mORMot ; ce commit ne change pas autrement le comportement des URI.

API publique

  • SCHEME_TEXTadded
  • SCHEME_PORTadded

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

21 Faible TUri.FromScheme peut initialiser l’adresse de ressource en un appel TUri.FromScheme reçoit un paramètre optionnel aAddress, retire un slash initial et stocke le résultat dans Address. Le tableau public WS_SCHEME mappe un booléen TLS vers usWs ou usWss. Nouveautés mormot.net.sock 9dcadeec+12-4

net: enhanced TUri.FromScheme()

Impact

Les appels peuvent construire un TUri WebSocket ou HTTP complet sans affecter Address séparément ; les appels existants restent compatibles grâce à la valeur par défaut.

API publique

  • TUri.FromSchemesignature-changed
  • WS_SCHEMEadded

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

22 Faible Les tests JSON et le parsing des lignes HTTP reçoivent un nettoyage sans effet fonctionnel Les tests RemoveMagicFromJson réutilisent des chaînes magic précalculées, le commentaire du scan mentionne le chemin SSE2 et THttpRequestContext.ProcessParseLine développe une expression booléenne en branche explicite. Sous le capot mormot.core.json+2 e0b8347f+29-30

core: some code cleaning with no functional change

Impact

Aucun changement pour le code applicatif ni le comportement runtime ; ce commit clarifie le code et réduit la préparation répétée des tests.

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

23 Faible Les tests de broadcast WebSocket async se synchronisent avec l’upgrade terminé TNetworkProtocols.DoTWebSocketAsyncServer remplace le thread de broadcast dédié par un objet basé sur RunTask, des événements Connected et Done, un callback OnWebSocketConnect et des attentes bornées autour de chaque broadcast. Tests test.net.proto 836d5fff+109-47

test: rewritten TNetworkProtocols.DoTWebSocketAsyncServer

Impact

Le code de production est inchangé ; le test de régression ne course plus la fin de l’upgrade WebSocket et signale un échec borné au lieu de rester bloqué indéfiniment.

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

24 Faible Le retrait du magic JSON gagne une couverture copy-on-write et entrées invalides TTestCoreProcess.EncodeDecodeJSON couvre désormais RemoveMagicFromJson avec des entrées JSON normales, échappées, partagées, vides, des noms de propriétés, des marqueurs répétés et des entrées invalides, y compris la réutilisation du buffer en place. Tests test.core.data cd184a55+90-2

test: cover the new RemoveMagicFromJson()

Impact

Le code de production est inchangé ; les tests documentent les limites du marqueur et protègent le comportement copy-on-write de RawUtf8.

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

25 Faible Les échecs attendus des tests de base de données ne polluent plus les logs d’exception Les tests d’échec next-ID des bases externes et de rollback batch SQLite encadrent désormais les erreurs attendues avec TSynLog.Family.ExceptionIgnoreCurrentThread et restaurent le réglage dans des blocs finally. Tests test.orm.extdb+1 d0efb516+26-15

test: hide expected exceptions

Impact

Le comportement runtime des bases est inchangé ; la sortie des tests devient plus silencieuse tout en conservant les mêmes assertions d’échec et de rollback.

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

26 Faible Le test 7-Zip avec mauvais mot de passe ne journalise plus une exception attendue TTestCoreCompression._7Zip active temporairement TSynLog.Family.ExceptionIgnoreCurrentThread pendant la vérification de l’échec attendu avec un mauvais mot de passe, puis restaure le flag dans finally. Tests test.core.data bfa4dec9+10-5

test: hide expected exception in TTestCoreCompression._7Zip

Impact

Le comportement de compression en production est inchangé ; les logs de tests automatisés contiennent moins de bruit d’exceptions attendues.

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

27 Faible Les tests PeerCache sont ignorés proprement sans réseau utilisable TNetworkProtocols._THttpPeerCache appelle THttpPeerCacheSettings.GuessInterface avant de créer le hook et quitte avec une raison affichée lorsqu’aucune interface locale active n’est disponible. Tests test.net.proto a78c76d9+10-3

test: cleanly skip PeerCache tests if there is no network available

Impact

Le code de production est inchangé ; la CI offline et les machines de développement ne signalent plus un échec PeerCache dû uniquement à l’absence de réseau.

Arnaud Bouchez · 09:44 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