2010-09-03 28 views
7

¿Alguien puede decirme por qué la última línea arroja la excepción OOM?¿Por qué StreamReader.ReadLine lanza 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(); 

Respuesta

8

Enhorabuena, ha encontrado un error en .NET Framework. Es inducido por el valor de byte, 0xef en hexadecimal. Cuál es el primer byte del UTF-8 BOM. No es una lista de materiales completa, por supuesto, faltan los siguientes dos bytes. Sin embargo, es suficiente para confundir a StreamReader, sigue tratando de leer datos de la transmisión sin llegar a ningún lado, consumiendo memoria mientras lo intentas. OOM es, eventualmente, el próximo.

Este error también está presente en .NET 4.0. La fuente exacta del error es difícil de rastrear, el código que está involucrado no está incluido en la Fuente de referencia. Posiblemente podría clasificarse como uno crítico, ya que podría ser utilizado en un ataque de DOS. Puede reportar el error en connect.microsoft.com. Avíseme si no quiere, lo reportaré (deber MVP).

+0

Error abierto # 594588 – skb

+0

Votación máxima. URL: http://connect.microsoft.com/VisualStudio/feedback/details/594588/why-does-streamreader-readline-throw-outofmemoryexception –

Cuestiones relacionadas