public void TestReadAttributeRawValueTruncatedStrict() { using (var stream = new MemoryStream()) { stream.Write(BitConverter.GetBytes(0x223e9f78), 0, 4); stream.WriteByte(0); stream.WriteByte(0); stream.WriteByte((byte)TnefAttributeLevel.Message); stream.Write(BitConverter.GetBytes((int)TnefAttributeTag.MessageId), 0, 4); stream.Write(BitConverter.GetBytes(28), 0, 4); stream.Write(BitConverter.GetBytes(0xFFFFFFFF), 0, 4); stream.Position = 0; using (var reader = new TnefReader(stream, 0, TnefComplianceMode.Strict)) { Assert.IsTrue(reader.ReadNextAttribute(), "ReadNextAttribute"); Assert.AreEqual(TnefAttributeTag.MessageId, reader.AttributeTag, "AttributeTag"); var buffer = new byte[28]; int n; n = reader.ReadAttributeRawValue(buffer, 0, buffer.Length); try { reader.ReadAttributeRawValue(buffer, n, buffer.Length - n); Assert.Fail("ReadAttributeRawValue should have thrown TnefException"); } catch (TnefException ex) { Assert.AreEqual(TnefComplianceStatus.StreamTruncated, ex.Error, "Error"); } catch (Exception ex) { Assert.Fail("ReadAttributeRawValue should have thrown TnefException, not {0}", ex); } } } }
public void TestArgumentExceptions() { using (var stream = File.OpenRead(Path.Combine(DataDir, "winmail.tnef"))) { Assert.Throws <ArgumentNullException> (() => new TnefReader(null, 0, TnefComplianceMode.Strict)); Assert.Throws <ArgumentOutOfRangeException> (() => new TnefReader(stream, -1, TnefComplianceMode.Strict)); using (var reader = new TnefReader(stream, 1252, TnefComplianceMode.Strict)) { var buffer = new byte[16]; Assert.Throws <ArgumentNullException> (() => reader.ReadAttributeRawValue(null, 0, buffer.Length)); Assert.Throws <ArgumentOutOfRangeException> (() => reader.ReadAttributeRawValue(buffer, -1, buffer.Length)); Assert.Throws <ArgumentOutOfRangeException> (() => reader.ReadAttributeRawValue(buffer, 0, -1)); } } }
public void TestReadAttributeRawValueTruncatedLoose() { using (var stream = new MemoryStream()) { stream.Write(BitConverter.GetBytes(0x223e9f78), 0, 4); stream.WriteByte(0); stream.WriteByte(0); stream.WriteByte((byte)TnefAttributeLevel.Message); stream.Write(BitConverter.GetBytes((int)TnefAttributeTag.MessageId), 0, 4); stream.Write(BitConverter.GetBytes(28), 0, 4); stream.Write(BitConverter.GetBytes(0xFFFFFFFF), 0, 4); stream.Position = 0; using (var reader = new TnefReader(stream, 0, TnefComplianceMode.Loose)) { Assert.IsTrue(reader.ReadNextAttribute(), "ReadNextAttribute"); Assert.AreEqual(TnefAttributeTag.MessageId, reader.AttributeTag, "AttributeTag"); var buffer = new byte[28]; int nread, n = 0; do { if ((nread = reader.ReadAttributeRawValue(buffer, n, buffer.Length - n)) == 0) { break; } n += nread; } while (n < 28); Assert.AreEqual(TnefComplianceStatus.StreamTruncated, reader.ComplianceStatus); } } }