Agir maintenantpeut affecter un système en productionLes 22 commits non-merge de 2.4.17140 à 2.4.17161 ont été examinés : 462 ajouts et 202 suppressions hors version bookkeeping. Aucun superseded_by ; les plages viennent des correctifs du même routine. Le problème heartbeat est confirmé dans la source finale avec LastOperationReleaseMemorySeconds à 60 par défaut.
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.
22 sur 22 entrées · 22 commits upstream
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é.
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.
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.
Mise à jour recommandée
Mettez à niveau les WebSockets TLS Windows et testez Send concurrent avec messages post-handshake TLS 1.3.
Unités
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.
Mise à jour recommandée
Mettez à niveau les proxy caches et testez disconnect origin, Content-Length erroné et réponses GET 3xx/4xx.
Unités
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.
Mise à jour recommandée
Mettez à niveau les serveurs SChannel et testez un ClientHello réparti sur plusieurs lectures TCP.
Unités
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.
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.
Mise à jour recommandée
Mettez à niveau les clients avec redirects same-origin et testez Location relative/absolue sur connexion réutilisée.
Unités
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.
Mise à jour recommandée
Évitez 2.4.17143, prenez 2.4.17144 ou après et testez le trafic post-handshake TLS 1.3.
Unités
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.
Unités
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.
Mise à jour recommandée
Prenez toute la séquence proxy cache et testez origins 204, 3xx et Range fallback avec logs.
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é.
Mise à jour recommandée
Prenez ce commit avec RedirectOptions et testez les headers explicites et générés en cross-origin.
Unités
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.
Mise à jour recommandée
Mettez à niveau THttpProxyServer et testez HEAD/GET avec origins 2xx, 3xx et 4xx.
Unités
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.
Mise à jour recommandée
Mettez à niveau les proxy caches pouvant recevoir HTTP 204 et vérifiez HEAD/GET sans body.
Unités
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.
Mise à jour recommandée
Prenez-le avec les autres correctifs proxy cache et testez Range ainsi que les redirects sans Content-Length.
Unités
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.
Mise à jour recommandée
Mettez à niveau les peer caches avec redirects et vérifiez que Location arrive au client.
Unités
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.
Unités
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.
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.
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.
Unités
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.
Unités
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à.
Unités
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.