mORMot2 DailyLecture quotidienne des commits upstream

SChannel et les caches HTTP se stabilisent, mais les heartbeats régressent

Windows SChannel reçoit des corrections de concurrence, handshake, renégociation et mémoire, tandis que les clients HTTP gagnent des restrictions de redirection optionnelles et que les deux proxy caches corrigent les statuts. Le timing heartbeat WebSocket async passe à HeartbeatDelay, mais deux retouches laissent une comparaison finale qui désactive ces callbacks après le seuil mémoire par défaut. Les implémentations INetTls externes et le code utilisant LastOperationIdleSeconds doivent aussi migrer.

En bref

  • Visez le head c94dba6c18f6a0c5b225734af210da678cc59167, build 2.4.17161, pour les correctifs SChannel, redirect et cache terminés.
  • Les callbacks heartbeat WebSocket async sont désactivés après le seuil mémoire par défaut ; mettez LastOperationReleaseMemorySeconds à 0 en attendant la correction.
  • Les implémentations INetTls externes doivent ajouter ReleaseBuffers et LastOperationIdleSeconds doit migrer vers GetLastOperationIdleSeconds.
  • THttpRequestExtendedOptions.RedirectOptions ajoute purge cross-origin et rejet de redirects en gardant le comportement libre par défaut.
  • Le proxy cache refuse les statuts GET invalides, interrompt les lecteurs progressifs en erreur et vérifie la taille finale.
  • Évitez 2.4.17143 et les builds redirect incomplètes 2.4.17159–2.4.17160.

Conseil de mise à jour

Visez la build 2.4.17161 au head c94dba6c18f6a0c5b225734af210da678cc59167 pour SChannel, redirects et proxy cache. Ajoutez INetTls.ReleaseBuffers aux backends TLS externes et remplacez LastOperationIdleSeconds. Les serveurs WebSocket async doivent mettre LastOperationReleaseMemorySeconds à 0 et tester les heartbeats jusqu’au correctif du cutoff.

Build2.4.17135 → 2.4.17161
Commits22
Lignes+595 -335
Lecture5 min

22 sur 22 entrées · 22 commits upstream

Sujets
# Entrée Catégorie Unités
1 Élevée Le timing heartbeat WebSocket passe à HeartbeatDelay TAsyncConnections supprime LastOperationIdleSeconds et ajoute GetLastOperationIdleSeconds virtual. TWebSocketAsyncConnections renvoie Settings.HeartbeatDelay en secondes ; 0 désactive ping/pong. Ruptures mormot.net.async+1 efb27161+37-23

net: fixed WebSockets HeartbeatDelay async server support

Impact

Le code assignant LastOperationIdleSeconds ne compile plus. WebSocket utilise ses settings, mais le head final nécessite le workaround à cause du cutoff régressé.

Migration nécessaire

Cherchez LastOperationIdleSeconds. Utilisez TWebSocketProtocol.Settings.HeartbeatDelay ou surchargez GetLastOperationIdleSeconds.

API publique

  • TAsyncConnections.LastOperationIdleSecondsremoved — La propriété writable est remplacée par un getter virtual.
  • TAsyncConnections.GetLastOperationIdleSecondsadded — Retourne zéro par défaut et peut être surchargé.

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

2 Élevée INetTls gagne un contrat de libération des buffers idle L’interface publique INetTls ajoute ReleaseBuffers: PtrInt. SChannel libère ses buffers vides ; OpenSSL retourne zéro car SSL_MODE_RELEASE_BUFFERS est déjà actif. Ruptures mormot.lib.openssl11+2 ef8aa8a5+31-2

net: introducing INetTls.ReleaseBuffers method

Impact

Toute classe externe implémentant INetTls ne compile plus avant d’ajouter la méthode. Les backends intégrés sont complets.

Migration nécessaire

Cherchez les classes implémentant INetTls et ajoutez function ReleaseBuffers: PtrInt ; retournez 0 sans opération sûre.

API publique

  • INetTls.ReleaseBuffersadded — Méthode requise retournant les octets libérés connus.

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

3 Élevée Send et renégociation SChannel concurrents sont sérialisés TSChannelNetTls ajoute fSspiSafe autour de SEC_I_RENEGOTIATE et du chiffrement Send. Send retourne nrRetry si Receive tient le lock. Correctifs mormot.net.sock.windows 3e2819e1+95-63

net: hardened TSChannelNetTls thread safety

Impact

Les WebSockets Windows n’exécutent plus SSPI en race quand le post-handshake TLS 1.3 arrive pendant Send ; les callers nrRetry ne changent pas.

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

4 Élevée Les downloads proxy en erreur interrompent les lecteurs et fichiers partiels Le proxy cache accepte seulement 200/204/206, suit la taille attendue, interrompt tous les THttpPartial en erreur et supprime les fichiers incomplets. Correctifs mormot.net.async e3a44702+51-11

net: fixed Proxy Cache process

Impact

Les clients progressifs ne restent plus bloqués et ne consomment plus un objet tronqué ; les bodies de redirect ou erreur ne sont plus mis en cache comme succès.

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

5 Élevée Un ClientHello fragmenté ne redémarre plus l’accept SChannel TSChannelNetTls suit fAcceptFirst et réutilise le context SSPI après SEC_I_CONTINUE_NEEDED au lieu de recommencer sur un ClientHello incomplet. Correctifs mormot.net.sock.windows 7f17ffe4+12-4

net: fixed SChannel partial initial negotiation

Impact

Les serveurs SChannel terminent les handshakes quand ClientHello arrive en plusieurs lectures TCP.

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

6 Élevée Les redirects HEAD sont corrigés mais le cutoff heartbeat reste faux THttpClientSocket garde HEAD/OPTIONS sur 301/303 et convertit les méthodes avec body en GET. Le même commit utilise allowed < gc ; gc devenu cutoff absolu à 60 secondes, allowed passe à zéro et les heartbeats sont ignorés. Correctifs mormot.net.async+1 edf01585+5-4

net: THttpClientSocket should keep HEAD for HTTP_MOVEDPERMANENTLY

Impact

HEAD conserve sa sémantique. Avec LastOperationReleaseMemorySeconds=60 par défaut, les serveurs WebSocket async cessent de planifier OnLastOperationIdle ; la valeur 0 évite cette branche.

À regarder

Testez les redirects HEAD. Pour WebSocket async, mettez LastOperationReleaseMemorySeconds à 0 et vérifiez ping/pong jusqu’au correctif.

API publique

  • THttpClientSocket.Request redirect handlingbehaviour-changed — 301 et 303 gardent les méthodes sans body, dont HEAD et OPTIONS.

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

7 Élevée Les redirects same-origin envoient maintenant le nouveau path THttpClientSocket.Request met à jour ctxt.Url hors du bloc reconnect, donc un redirect sur la même connexion utilise bien la nouvelle URL. Correctifs mormot.net.client 30f397da+3-3

net: fixed THttpClientSocket redirections on the same server

Impact

Les redirects sur le même serveur ne répètent plus l’ancien path et ne renvoient plus la mauvaise ressource.

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

8 Élevée La renégociation SChannel préserve de nouveau les buffers déchiffrés La branche SEC_I_RENEGOTIATE de Receive appelle ProcessBuffers avant de vérifier output et poursuivre le post-handshake TLS 1.3. Correctifs mormot.net.sock.windows c6dc158f+3-2

net: fixed previous commit

Impact

La build 2.4.17143 pouvait perdre ou masquer les données déchiffrées avec renégociation ; 2.4.17144 les restaure.

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

9 Élevée Le cleanup idle introduit la régression heartbeat IdleEverySecond ajoute des gardes underflow et shutdown, mais compare sec au gc déjà transformé au lieu du délai heartbeat. Le commit suivant change les opérandes sans restaurer le calcul. Sous le capot mormot.net.async fab1dd9a+18-15

net: minor TAsyncConnections.IdleEverySecond cleanup

Impact

Le cleanup déclenche la condition finale qui supprime les callbacks WebSocket après la fenêtre mémoire ; les checks de terminaison sont sinon plus sûrs.

À regarder

Ne comptez pas sur cette logique heartbeat intermédiaire ; appliquez le workaround LastOperationReleaseMemorySeconds du head final.

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

10 Moyenne Le probing HEAD du proxy conserve 204 et redirects RemoteClientHead utilise le fallback Range GET seulement pour 200 sans longueur, retourne 204/3xx directement et ajoute RequestContext aux diagnostics. Correctifs mormot.net.async+1 48940904+15-12

net: enhanced THttpProxyUrl.RemoteClientHead

Impact

Les origins 204 ou redirect ne sont plus remplacées par un Range probe et les logs contiennent le context utile.

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

11 Moyenne La purge des redirects couvre le Referer généré THttpClientSocket utilise fAuthPurge, supprime Referer et Authorization générés après purge cross-origin et compare l’origine avec TUri.Same. Correctifs mormot.net.client c94dba6c+11-11

net: some THttpRedirectOptions fixes

Impact

Avec hroPurgeReferer ou hroPurgeAuthorization, les valeurs régénérées ne fuient plus ; le comportement par défaut reste inchangé.

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

12 Moyenne Les chemins HEAD et GET du proxy conservent les statuts non fichier THttpProxyServer réserve les fichiers locaux/progressifs à HTTP_GET_OK, émet Content-Length pour les autres statuts connus et copie les options plus tôt. Correctifs mormot.net.async 597eea16+9-5

net: fixed THttpProxyServer HEAD/GET response codes

Impact

Les callers HEAD/GET reçoivent le statut origin sans entrer dans la livraison de fichier pour redirects ou autres réponses.

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

13 Moyenne Les réponses 204 du proxy cache évitent la livraison de fichier THttpProxyServer limite taille et progressive-file aux statuts 200 et 206, exclut 204 et conserve les redirects avec leurs headers. Correctifs mormot.net.async 882e3435+7-5

net: fixed 204 responses for the Proxy Cache

Impact

Une réponse origin sans contenu reste 204 au lieu d’être traitée comme un fichier avec longueur invalide.

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

14 Moyenne Le probing Range normalise 206 sans rejeter les redirects RemoteClientHead remappe le 206 du Range GET en 200 ; MakeHeadAndComputeFilename exige la taille seulement pour les downloads 200/206 et laisse passer 3xx. Correctifs mormot.net.async b98df07d+8-3

net: fixed some other Proxy Cache status issues

Impact

Les ressources dynamiques ne publient plus un 206 artificiel et les redirects sans Content-Length ne deviennent plus des erreurs.

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

15 Moyenne Les redirects du peer cache conservent Location DirectFileNameHead assigne les headers à Ctxt.OutCustomHeaders avant le test HTTP_GET_OK, conservant Location pour 3xx. Correctifs mormot.net.server 9b96345d+3-3

net: fixed THttpPeerCache to include Location: for 3xx redirections

Impact

Les clients peuvent suivre les redirects du THttpPeerCache au lieu de recevoir un 3xx sans URL cible.

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

16 Moyenne Les clients HTTP gagnent une policy de redirect optionnelle mormot.net.client ajoute THttpRedirectOption, THttpRedirectOptions et RedirectOptions pour purger Authorization, Cookie ou Referer et rejeter downgrade, cross-origin ou userinfo. Nouveautés mormot.net.client 492aeccf+95-18

net: new THttpRedirectOptions set of options for THttpClientSocket

Impact

Le default vide conserve les redirects actuels. Les callers sensibles peuvent bloquer la propagation de credentials ou les destinations dangereuses.

À regarder

Revoyez les clients suivant des redirects non fiables, choisissez les flags hroPurge*/hroReject* et prenez 2.4.17161.

API publique

  • THttpRedirectOptionadded — Ajoute six choix de purge et rejet.
  • THttpRedirectOptionsadded — Set de valeurs THttpRedirectOption.
  • THttpRequestExtendedOptions.RedirectOptionsadded — Vide par défaut et implémenté par THttpClientSocket.

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

17 Moyenne Les buffers SChannel suivent les limites SSPI TSChannelNetTls conserve la taille record maximale, démarre output à 2 Ko et agrandit input selon SECBUFFER_MISSING jusqu’à la limite SSPI. Performance mormot.lib.sspi+1 8bcdf6c9+39-13

net: refined SChannel TLS buffer size

Impact

Les connexions TLS Windows gardent moins de mémoire et grandissent jusqu’à la taille SChannel requise ; aucun changement applicatif.

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

18 Moyenne Le receive SChannel est centralisé autour des résultats SSPI Receive factorise l’extraction dans ProcessBuffers et traite SEC_E_OK, SEC_I_RENEGOTIATE, expiration et erreurs dans un switch. Les changements SQLite/changelog sont textuels. Sous le capot mormot.net.sock.windows+1 1ebf95e7+53-46

net: rewritten TSChannelNetTls.Receive core process

Impact

Le chemin receive devient plus clair et coordonne la renégociation, mais cette build exige le correctif suivant. Aucun changement database.

À regarder

Ne restez pas sur 2.4.17143 ; incluez c6dc158f3a9e1be0dd9a06e063800365f9d4bf45 ou après.

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

19 Faible Les connexions SChannel démarrent avec des buffers dynamiques réduits L’allocation fixe TLSRECMAXSIZE de 19 Ko disparaît ; input/data/output commencent à 4 Ko et grandissent avec EnsureLength. Performance mormot.net.sock.windows f1785ad1+40-42

net: reduce TSChannelNetTls memory consumption per connection

Impact

Les services Windows avec beaucoup de connexions TLS idle réduisent leur mémoire de base ; les grands transferts allouent à la demande.

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

20 Faible Les connexions async libèrent leur mémoire idle une seule fois ReleaseMemoryOnIdle regroupe le cleanup read/write/TLS sous les locks corrects et marque fMemClean jusqu’à la prochaine activité. Performance mormot.net.async 85f08e29+32-39

net: rewritten TPollAsyncConnection.ReleaseMemoryOnIdle

Impact

Les serveurs idle font moins de locks/cleanup tout en libérant les buffers ; aucun changement applicatif.

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

21 Faible Les sockets async idle libèrent les buffers SChannel ReleaseMemoryOnIdle prend les locks read/write et appelle INetTls.ReleaseBuffers quand aucune donnée plain ne reste. Performance mormot.net.async a03577b9+23-4

net: idle TPollAsyncConnection release its INetTls buffers

Impact

Les serveurs SChannel rendent la mémoire TLS idle ; OpenSSL reste no-op car son mode release la gère déjà.

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

22 Faible La renégociation SChannel utilise le lock Windows OS TSChannelNetTls remplace TLightLock par TOSLightLock autour de la renégociation Receive/Send et retire une affectation redondante. Performance mormot.core.os+1 ef2fdc14+5-7

net: some TSChannelNetTls cleanup/optimization

Impact

Un receiver Windows bloqué peut repartir dès la libération du lock ; aucun changement API ou hors Windows.

Arnaud Bouchez · 07:17 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