|
|
|
|
||||||
![]() |
|
|
LinkBack | Outils de la discussion |
|
|
#1 |
|
Messages: n/a
Hébergeur: |
La par contre c un SUPER bug (grosso modo ca fait tourner le CPU de votre serveur a 100% dans une boucle infinie) :
toujour dans l'object TwebRequest, cette fois ci avec la classe TMultipartContentParser (quand on recoit un formulaire en multipart/form-data): procedure TMultipartContentParser.BufferContent; var L, R: Integer; P: PChar; begin if (WebRequest.ContentLength > 0) and (FContentBuffer = '') then begin FContentBuffer := WebRequest.Content; if Length(WebRequest.Content) < WebRequest.ContentLength then begin L := Length(FContentBuffer); SetLength(FContentBuffer, WebRequest.ContentLength); P := PChar(FContentBuffer) + L; while L < WebRequest.ContentLength do begin R := WebRequest.ReadClient(P^, WebRequest.ContentLength - L); if R = 0 then break; Inc(L, R); Inc(P, R); end; end; end; end; L'instruction : while L < WebRequest.ContentLength do begin R := WebRequest.ReadClient(P^, WebRequest.ContentLength - L); if R = 0 then break; Inc(L, R); Inc(P, R); end; C'EST DU N'IMPORTENAWAK AUSSI !! mais la c'est d'un gros !! comment ce truc n'a t'il jamais été corrigé ?? je vous donne un indice : function TISAPIRequest.ReadClient(var Buffer; Count: Integer): Integer; begin Result := Count; if not ECB.ReadClient(ECB.ConnID, @Buffer, DWORD(Result)) then Result := -1; end; vous l'avez compris le fonction ReadClient retourne -1 et pas 0 si elle n'a pas reussir à lire de données !!!!!!!!!!du coup while L < WebRequest.ContentLength do begin R := WebRequest.ReadClient(P^, WebRequest.ContentLength - L); if R = 0 then break; Inc(L, R); Inc(P, R); end; bien ca donne une boucle infinie car jamais la condition (if R = 0 then break ne sera levé ...... donc si par malheur le client envoie une requete avec un gros fichier et coupe la connection avant la fin !!! bien ca donne un serveur web planté ![]() purée, pourtant la franchement c'est GROS !! meme un debutant pourrait voire le probleme ! a++ stéphane |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
quelle version de Delphi utilises-tu?
rapporter des bugs ici ne sert à rien, si tu veux qu'ils soient corriger, il faut les ajouter dans QualityCentral: http://qc.codegear.com/ il y a un client windows disponible qui te permettra d'ajouter un nouveau rapport de bug, afin de permettre une analyse rapide du problème, il est préférable d'exprimer clairement le soucis, d'expliquer les différentes étapes pour le reproduire et si possible de joindre au rapport une application démonstrative. |
|
![]() |
| Outils de la discussion | |
|
|