为什么StreamReader.ReadLine会抛出OutOfMemoryException异常?

7
有人能告诉我为什么这里的最后一行会抛出OOM异常吗?
        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();
1个回答

8
恭喜您发现了.NET框架中的一个错误。它是由16进制字节值0xef引起的,这是UTF-8 BOM的第一个字节。当然,它不是完整的BOM,下面的两个字节缺失。然而,这已足以使StreamReader混淆,它一直尝试从流中读取数据,但始终无法成功,同时在尝试中消耗内存。最终会导致OOM(Out Of Memory)错误。
这个BUG在.NET 4.0中也存在。由于它可能被用作DOS攻击,它可能被归类为重要的BUG。由于涉及的代码未包含在Reference Source中,因此难以准确追踪该错误的源头。您可以在connect.microsoft.com上报告此问题。如果您不想这样做,可以告诉我,我将代表MVP报告它。

已点赞。URL:http://connect.microsoft.com/VisualStudio/feedback/details/594588/why-does-streamreader-readline-throw-outofmemoryexception - Hans Passant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接