add writable checks
This commit is contained in:
parent
5d14c96fb0
commit
c9a68593ea
7 changed files with 54 additions and 4 deletions
|
|
@ -31,6 +31,18 @@ internal static class StreamValidationExtensions
|
|||
return stream;
|
||||
}
|
||||
|
||||
internal static Stream RequireWritable(this Stream stream)
|
||||
{
|
||||
stream.NotNull(nameof(stream));
|
||||
|
||||
if (!stream.CanWrite)
|
||||
{
|
||||
throw new ArgumentException("Stream must be writable", nameof(stream));
|
||||
}
|
||||
|
||||
return stream;
|
||||
}
|
||||
|
||||
internal static IReadOnlyList<Stream> RequireSeekable(this IReadOnlyList<Stream> streams)
|
||||
{
|
||||
streams.NotNull(nameof(streams));
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ public partial class GZipWriter : IWriterOpenable<GZipWriterOptions>
|
|||
|
||||
public static IWriter OpenWriter(Stream stream, GZipWriterOptions writerOptions)
|
||||
{
|
||||
stream.NotNull(nameof(stream));
|
||||
stream.RequireWritable();
|
||||
return new GZipWriter(stream, writerOptions);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ public partial class SevenZipWriter : IWriterOpenable<SevenZipWriterOptions>
|
|||
/// </summary>
|
||||
public static IWriter OpenWriter(Stream stream, SevenZipWriterOptions writerOptions)
|
||||
{
|
||||
stream.NotNull(nameof(stream));
|
||||
stream.RequireWritable();
|
||||
return new SevenZipWriter(stream, writerOptions);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ public partial class TarWriter : IWriterOpenable<TarWriterOptions>
|
|||
|
||||
public static IWriter OpenWriter(Stream stream, TarWriterOptions writerOptions)
|
||||
{
|
||||
stream.NotNull(nameof(stream));
|
||||
stream.RequireWritable();
|
||||
return new TarWriter(stream, writerOptions);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -75,6 +75,8 @@ public static class WriterFactory
|
|||
IWriterOptions writerOptions
|
||||
)
|
||||
{
|
||||
stream.RequireWritable();
|
||||
|
||||
var factory = Factories
|
||||
.Factory.Factories.OfType<IWriterFactory>()
|
||||
.FirstOrDefault(item => item.KnownArchiveType == archiveType);
|
||||
|
|
@ -102,6 +104,8 @@ public static class WriterFactory
|
|||
CancellationToken cancellationToken = default
|
||||
)
|
||||
{
|
||||
stream.RequireWritable();
|
||||
|
||||
var factory = Factories
|
||||
.Factory.Factories.OfType<IWriterFactory>()
|
||||
.FirstOrDefault(item => item.KnownArchiveType == archiveType);
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ public partial class ZipWriter : IWriterOpenable<ZipWriterOptions>
|
|||
|
||||
public static IWriter OpenWriter(Stream stream, ZipWriterOptions writerOptions)
|
||||
{
|
||||
stream.NotNull(nameof(stream));
|
||||
stream.RequireWritable();
|
||||
return new ZipWriter(stream, writerOptions);
|
||||
}
|
||||
|
||||
|
|
|
|||
34
tests/SharpCompress.Test/WriterFactoryTests.cs
Normal file
34
tests/SharpCompress.Test/WriterFactoryTests.cs
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Threading.Tasks;
|
||||
using SharpCompress.Common;
|
||||
using SharpCompress.Test.Mocks;
|
||||
using SharpCompress.Writers;
|
||||
using Xunit;
|
||||
|
||||
namespace SharpCompress.Test;
|
||||
|
||||
public class WriterFactoryTests
|
||||
{
|
||||
[Fact]
|
||||
public void OpenWriter_Stream_Throws_On_Unwritable_Stream()
|
||||
{
|
||||
using var unwritable = new TestStream(new MemoryStream(), true, false, true);
|
||||
|
||||
Assert.Throws<ArgumentException>(() =>
|
||||
WriterFactory.OpenWriter(unwritable, ArchiveType.Zip, WriterOptions.ForZip())
|
||||
);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async ValueTask OpenAsyncWriter_Stream_Throws_On_Unwritable_Stream()
|
||||
{
|
||||
using var unwritable = new TestStream(new MemoryStream(), true, false, true);
|
||||
|
||||
await Assert.ThrowsAsync<ArgumentException>(() =>
|
||||
WriterFactory
|
||||
.OpenAsyncWriter(unwritable, ArchiveType.Zip, WriterOptions.ForZip())
|
||||
.AsTask()
|
||||
);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue