Make `mode` required This avoids the questionable default of `0`. Closes #34.
diff --git a/CHANGELOG.md b/CHANGELOG.md index fa57a25..0eac290 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md
@@ -1,3 +1,10 @@ +## 2.0.0 + +- Require the `mode` parameter when creating `TarHeader`s. Previously the field + had an implicit default value of `0`, which made it easy to inadvertently + create archives with entries that are hard to delete when extracted with + other tar programs. + ## 1.0.5 - Migrate to recommended lints from `package:lints`.
diff --git a/lib/src/header.dart b/lib/src/header.dart index f35130c..68643c5 100644 --- a/lib/src/header.dart +++ b/lib/src/header.dart
@@ -145,14 +145,14 @@ } } - /// Creates a tar header from the individual field. + /// Creates a tar header from the individual fields. factory TarHeader({ required String name, + required int mode, TarFormat? format, TypeFlag? typeFlag, DateTime? modified, String? linkName, - int mode = 0, int size = -1, String? userName, int userId = 0,
diff --git a/pubspec.yaml b/pubspec.yaml index 91b1724..03d4f49 100644 --- a/pubspec.yaml +++ b/pubspec.yaml
@@ -1,6 +1,6 @@ name: tar description: Memory-efficient, streaming implementation of the tar file format -version: 1.0.5 +version: 2.0.0 repository: https://github.com/simolus3/tar/ topics: - tar
diff --git a/test/reader_test.dart b/test/reader_test.dart index 87b791e..1bdfe6f 100644 --- a/test/reader_test.dart +++ b/test/reader_test.dart
@@ -616,6 +616,7 @@ modified: millisecondsSinceEpoch(1597756829000), typeFlag: TypeFlag.symlink, format: TarFormat.gnu, + mode: 0, ) ], }, @@ -682,6 +683,7 @@ modified: millisecondsSinceEpoch(0), typeFlag: TypeFlag.symlink, format: TarFormat.pax, + mode: 0, ) ] }, @@ -798,6 +800,7 @@ 'headers': [ TarHeader( name: 'nil-sparse-data', + mode: 0, typeFlag: TypeFlag.gnuSparse, userId: 1000, groupId: 1000, @@ -813,6 +816,7 @@ 'headers': [ TarHeader( name: 'nil-sparse-hole', + mode: 0, typeFlag: TypeFlag.gnuSparse, size: 1000, userId: 1000, @@ -828,6 +832,7 @@ 'headers': [ TarHeader( name: 'sparse', + mode: 0, typeFlag: TypeFlag.reg, size: 1000, userId: 1000, @@ -843,6 +848,7 @@ 'headers': [ TarHeader( name: 'sparse.txt', + mode: 0, typeFlag: TypeFlag.reg, size: 1000, userId: 1000, @@ -857,6 +863,7 @@ 'headers': [ TarHeader( typeFlag: TypeFlag.dir, + mode: 0, size: 0, name: '987654321/' * 30, modified: millisecondsSinceEpoch(0),
diff --git a/test/windows_integration_test.dart b/test/windows_integration_test.dart index 39d621b..85132a8 100644 --- a/test/windows_integration_test.dart +++ b/test/windows_integration_test.dart
@@ -11,7 +11,7 @@ void main() { test('emits long file names that are understood by 7zip', () async { final name = 'name' * 40; - final entry = TarEntry.data(TarHeader(name: name), []); + final entry = TarEntry.data(TarHeader(name: name, mode: 0), []); final file = File('${Directory.systemTemp.path}\\tar_test.tar'); addTearDown(file.delete);
diff --git a/test/writer_test.dart b/test/writer_test.dart index c31e9a2..e61bd55 100644 --- a/test/writer_test.dart +++ b/test/writer_test.dart
@@ -172,6 +172,7 @@ tar.TarHeader( name: 'file.txt', userName: 'this name is longer than 32 chars, which is not allowed', + mode: 0, ), [], ),