-
Notifications
You must be signed in to change notification settings - Fork 5.3k
Change some exception types thrown in Tar APIs #74845
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 1 commit
Commits
Show all changes
17 commits
Select commit
Hold shift + click to select a range
44300eb
Throw ArgumentException on unsupported tar entry type
carlossanlop 386ca70
Adjust tests
carlossanlop 4c049be
Also change exception type for internal TarEntry conversion construct…
carlossanlop 712acb5
LinkName setter null check.
carlossanlop 785584d
Internal constructors SeekableSubReadStream and SubReadStream unseeka…
carlossanlop 5931c6b
DataStream setter for regular file should throw ArgumentException if …
carlossanlop 2848e80
TarFile CreateFromDirectory unwritable destination change exception t…
carlossanlop 1647a89
Change to ArgumentException when ExtractToDirectory is an unreadable …
carlossanlop 5216a08
Add some missing exception docs for TarEntry.
carlossanlop 64efec2
Change TarReader constructor exception if unreadable stream. Close te…
carlossanlop 3694af2
Change TarWriter exception for unwritable stream to ArgumentException…
carlossanlop bc608fc
Add missing documentation for exceptions in constructors.
carlossanlop b6d620c
Change wording of conversion constructors comment when passing a Pax …
carlossanlop 9c4ccaa
Apply suggestions by Jozkee
carlossanlop 13f52c0
Add exception to LinkName if the entry type is hard/symlink and the u…
carlossanlop e7d911d
Convert all FormatException to InvalidDataException
carlossanlop ed4ab9c
Address more suggestions
carlossanlop File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Change TarReader constructor exception if unreadable stream. Close te…
…st gap.
- Loading branch information
commit 64efec269b3a0029a396ff85ec197406bbf456be
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
99 changes: 99 additions & 0 deletions
99
src/libraries/System.Formats.Tar/tests/TarReader/TarReader.Tests.cs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,99 @@ | ||
| using System.Xml.Linq; | ||
| // Licensed to the .NET Foundation under one or more agreements. | ||
| // The .NET Foundation licenses this file to you under the MIT license. | ||
|
|
||
| using System.Collections.Generic; | ||
| using System.IO; | ||
| using Xunit; | ||
| using System.Linq; | ||
carlossanlop marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
|
||
| namespace System.Formats.Tar.Tests | ||
| { | ||
| public class TarReader_Tests : TarTestsBase | ||
| { | ||
| [Fact] | ||
| public void TarReader_NullArchiveStream() => Assert.Throws<ArgumentNullException>(() => new TarReader(archiveStream: null)); | ||
|
|
||
| [Fact] | ||
| public void TarReader_UnreadableStream() | ||
| { | ||
| using MemoryStream ms = new MemoryStream(); | ||
| using WrappedStream ws = new WrappedStream(ms, canRead: false, canWrite: true, canSeek: true); | ||
| Assert.Throws<ArgumentException>(() => new TarReader(ws)); | ||
| } | ||
|
|
||
| [Fact] | ||
| public void TarReader_LeaveOpen_False() | ||
| { | ||
| using MemoryStream ms = GetTarMemoryStream(CompressionMethod.Uncompressed, TestTarFormat.pax, "many_small_files"); | ||
| List<Stream> dataStreams = new List<Stream>(); | ||
| using (TarReader reader = new TarReader(ms, leaveOpen: false)) | ||
| { | ||
| TarEntry entry; | ||
| while ((entry = reader.GetNextEntry()) != null) | ||
| { | ||
| if (entry.DataStream != null) | ||
| { | ||
| dataStreams.Add(entry.DataStream); | ||
| } | ||
| } | ||
| } | ||
|
|
||
| Assert.True(dataStreams.Any()); | ||
| foreach (Stream ds in dataStreams) | ||
| { | ||
| Assert.Throws<ObjectDisposedException>(() => ds.ReadByte()); | ||
carlossanlop marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| } | ||
| } | ||
|
|
||
| [Fact] | ||
| public void TarReader_LeaveOpen_True() | ||
| { | ||
| using MemoryStream ms = GetTarMemoryStream(CompressionMethod.Uncompressed, TestTarFormat.pax, "many_small_files"); | ||
| List<Stream> dataStreams = new List<Stream>(); | ||
| using (TarReader reader = new TarReader(ms, leaveOpen: true)) | ||
| { | ||
| TarEntry entry; | ||
| while ((entry = reader.GetNextEntry()) != null) | ||
| { | ||
| if (entry.DataStream != null) | ||
| { | ||
| dataStreams.Add(entry.DataStream); | ||
| } | ||
| } | ||
| } | ||
|
|
||
| Assert.True(dataStreams.Any()); | ||
| foreach (Stream ds in dataStreams) | ||
| { | ||
| ds.ReadByte(); // Should not throw | ||
| ds.Dispose(); | ||
| } | ||
| } | ||
|
|
||
| [Fact] | ||
| public void TarReader_LeaveOpen_False_CopiedDataNotDisposed() | ||
| { | ||
| using MemoryStream ms = GetTarMemoryStream(CompressionMethod.Uncompressed, TestTarFormat.pax, "many_small_files"); | ||
| List<Stream> dataStreams = new List<Stream>(); | ||
| using (TarReader reader = new TarReader(ms, leaveOpen: false)) | ||
| { | ||
| TarEntry entry; | ||
| while ((entry = reader.GetNextEntry(copyData: true)) != null) | ||
| { | ||
| if (entry.DataStream != null) | ||
| { | ||
| dataStreams.Add(entry.DataStream); | ||
| } | ||
| } | ||
| } | ||
|
|
||
| Assert.True(dataStreams.Any()); | ||
| foreach (Stream ds in dataStreams) | ||
| { | ||
| ds.ReadByte(); // Should not throw, copied streams, user should dispose | ||
| ds.Dispose(); | ||
| } | ||
| } | ||
| } | ||
| } | ||
carlossanlop marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.