2010-09-03 21 views
7

son hattının neden burada OOM istisnasını attığını söyleyen var mı?StreamReader.ReadLine neden 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(); 

cevap

8

Tebrikler, .NET framework bir hata buldum. Bayt değeri, onaltılık olarak 0xef indüklenir. UTF-8 BOM'un ilk baytı hangisidir. Tam bir BOM değil elbette, sonraki iki bayt eksik. Ancak StreamReader'ı kafa karıştırmak için yeterlidir, hiç bir yere gitmeden akıştan veri okumaya çalışarak, çalışırken belleği tüketmeye devam eder. OOM, sonunda, sırada.

Bu hata, .NET 4.0'da da bulunmaktadır. Hatanın tam kaynağını izlemek zordur, ilgili kod, Referans Kaynağına dahil değildir. Bir DOS saldırısında kullanılabileceği için, kritik bir şekilde sınıflandırılabilir. Hatayı connect.microsoft.com adresinden bildirebilirsiniz. Eğer istemiyorsan, rapor edeyim (MVP görevi).

+0

Açılmış hata # 594588 – skb

+0

2 Bağlı. URL: http://connect.microsoft.com/VisualStudio/feedback/details/594588/why-does-streamreader-readline-throw-outofmemoryexception –