2010-09-03 4 views
7

Quelqu'un peut-il me dire pourquoi la dernière ligne ici émet une exception OOM?Pourquoi StreamReader.ReadLine renvoie OutOfMemoryException?

 byte[] buffer = new byte[1]; 
     buffer[0] = 239; 
     MemoryStream ms = new MemoryStream(buffer); 
     StreamReader sr = new StreamReader(ms); 
     string l1 = sr.ReadLine(); 
     string l2 = sr.ReadLine(); 

Répondre

8

Félicitations, vous avez trouvé un bug dans le framework .NET. Il est induit par la valeur de l'octet, 0xef en hexadécimal. Quel est le premier octet du UTF-8 BOM. Ce n'est pas une nomenclature complète bien sûr, les deux octets suivants manquent. Il suffit cependant de confondre fatalement StreamReader, il continue à essayer de lire les données du flux sans jamais aller nulle part, consommant de la mémoire en essayant. Le MOO est, finalement, le suivant.

Ce bug est présent dans .NET 4.0 ainsi. La source exacte du bogue est difficile à retracer, le code impliqué n'est pas inclus dans la source de référence. Il pourrait éventuellement être classé comme critique car il pourrait être utilisé dans une attaque DOS. Vous pouvez signaler le bug sur connect.microsoft.com. Faites-moi savoir si vous ne voulez pas, je vais le signaler (devoir MVP).

+0

bug # 594588 Ouvert – skb

+0

upvoted. URL: http://connect.microsoft.com/VisualStudio/feedback/details/594588/why-does-streamreader-readline-throw-outofmemoryexception –

Questions connexes