FreeBSD Bugzilla – Attachment 254196 Details for
Bug 282047
[exp-run] libarchive 3.7.7
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Libarchive 3.7.7 patch
libarchive-3.7.7.patch (text/plain), 788.10 KB, created by
Martin Matuska
on 2024-10-13 09:37:48 UTC
(
hide
)
Description:
Libarchive 3.7.7 patch
Filename:
MIME Type:
Creator:
Martin Matuska
Created:
2024-10-13 09:37:48 UTC
Size:
788.10 KB
patch
obsolete
>commit ea7da2f9290271e1f1e0bc29060537ba1721feee >Merge: 669d26e5764f eff4ff4791c8 >Author: Martin Matuska <mm@FreeBSD.org> >Date: Sun Oct 13 10:41:04 2024 +0200 > > libarchive: merge from vendor branch > > Libarchive 3.7.7 > > Security fixes: > #2158 rpm: calculate huge header sizes correctly > #2160 util: fix out of boundary access in mktemp functions > #2168 uu: stop processing if lines are too long > #2174 lzop: prevent integer overflow > #2172 rar4: protect copy_from_lzss_window_to_unp() (CVE-2024-20696) > #2175 unzip: unify EOF handling > #2179 rar4: fix out of boundary access with large files > #2203 rar4: fix OOB access with unicode filenames > #2210 rar4: add boundary checks to rgb filter > #2248 rar4: fix OOB in delta filter > #2249 rar4: fix OOB in audio filter > #2256 fix multiple vulnerabilities identified by SAST > #2258 cpio: ignore out-of-range gid/uid/size/ino and harden AFIO parsing > #2265 rar5: clear 'data ready' cache on window buffer reallocs > #2269 rar4: fix CVE-2024-26256 (CVE-2024-26256) > #2330 iso: be more cautious about parsing ISO-9660 timestamps > #2343 tar: clean up linkpath between entries > #2364 tar: don't crash on truncated tar archives > #2366 gzip: prevent a hang when processing a malformed gzip inside a gzip > #2377 tar: fix two leaks in tar header parsing > > Important bugfixes: > #2096 rar5: report encrypted entries > #2150 xar: fix another infinite loop and expat error handling > #2173 shar: check strdup return value > #2161 lha: fix integer truncation on 32-bit systems > #2338 tar: fix memory leaks when processing symlinks or parsing pax headers > #2245 7zip: fix issue when skipping first file in 7zip archive that > is a multiple of 65536 bytes > #2252 7-zip: read/write symlink paths as UTF-8 > #2259 rar5: don't try to read rediculously long names > #2290 ar: fix archive entries having no type > #2360 tar: fix truncation of entry pathnames in specific archives > > CVE: CVE-2024-20696, CVE-2024-26256 > MFC after: 1 week > >diff --git a/contrib/libarchive/NEWS b/contrib/libarchive/NEWS >index ebdbb2a978ec..6af50e4e4033 100644 >--- a/contrib/libarchive/NEWS >+++ b/contrib/libarchive/NEWS >@@ -1,3 +1,9 @@ >+Oct 13, 2024: libarchive 3.7.7 released >+ >+Sep 23, 2024: libarchive 3.7.6 released >+ >+Sep 13, 2024: libarchive 3.7.5 released >+ > Apr 26, 2024: libarchive 3.7.4 released > > Apr 08, 2024: libarchive 3.7.3 released >diff --git a/contrib/libarchive/cat/bsdcat.1 b/contrib/libarchive/cat/bsdcat.1 >index 9fa66d60e1e6..b34a0c1c988d 100644 >--- a/contrib/libarchive/cat/bsdcat.1 >+++ b/contrib/libarchive/cat/bsdcat.1 >@@ -1,26 +1,8 @@ >-.\" Copyright (c) 2011-2014, Mike Kazantsev >-.\" All rights reserved. > .\" >-.\" Redistribution and use in source and binary forms, with or without >-.\" modification, are permitted provided that the following conditions >-.\" are met: >-.\" 1. Redistributions of source code must retain the above copyright >-.\" notice, this list of conditions and the following disclaimer. >-.\" 2. Redistributions in binary form must reproduce the above copyright >-.\" notice, this list of conditions and the following disclaimer in the >-.\" documentation and/or other materials provided with the distribution. >+.\" SPDX-License-Identifier: BSD-2-Clause > .\" >-.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND >-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE >-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE >-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE >-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL >-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS >-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) >-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT >-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY >-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF >-.\" SUCH DAMAGE. >+.\" Copyright (c) 2011-2014, Mike Kazantsev >+.\" All rights reserved. > .\" > .Dd March 1, 2014 > .Dt BSDCAT 1 >@@ -39,7 +21,7 @@ expands files to standard output. > .Nm > typically takes a filename as an argument or reads standard input when used in a > pipe. >-In both cases decompressed data it written to standard output. >+In both cases decompressed data is written to standard output. > .Sh EXAMPLES > To decompress a file: > .Pp >diff --git a/contrib/libarchive/cat/bsdcat.c b/contrib/libarchive/cat/bsdcat.c >index 19d3de65cea4..731621fa9b75 100644 >--- a/contrib/libarchive/cat/bsdcat.c >+++ b/contrib/libarchive/cat/bsdcat.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2011-2014, Mike Kazantsev > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > > #include "bsdcat_platform.h" >diff --git a/contrib/libarchive/cat/bsdcat.h b/contrib/libarchive/cat/bsdcat.h >index 504757a44040..6726f78e8453 100644 >--- a/contrib/libarchive/cat/bsdcat.h >+++ b/contrib/libarchive/cat/bsdcat.h >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2014, Mike Kazantsev > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > > #ifndef BSDCAT_H_INCLUDED >diff --git a/contrib/libarchive/cat/bsdcat_platform.h b/contrib/libarchive/cat/bsdcat_platform.h >index 78a6113e6f01..940214f2ecd6 100644 >--- a/contrib/libarchive/cat/bsdcat_platform.h >+++ b/contrib/libarchive/cat/bsdcat_platform.h >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > > /* >@@ -58,7 +40,7 @@ > #define __LA_NORETURN __attribute__((__noreturn__)) > #elif defined(_MSC_VER) > #define __LA_NORETURN __declspec(noreturn) >-#else >+#else > #define __LA_NORETURN > #endif > >diff --git a/contrib/libarchive/cat/cmdline.c b/contrib/libarchive/cat/cmdline.c >index 851b63de06e5..8ecd74aa95e4 100644 >--- a/contrib/libarchive/cat/cmdline.c >+++ b/contrib/libarchive/cat/cmdline.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2008 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > > /* >diff --git a/contrib/libarchive/cat/test/test.h b/contrib/libarchive/cat/test/test.h >index ec83d476b6b8..b852437ca430 100644 >--- a/contrib/libarchive/cat/test/test.h >+++ b/contrib/libarchive/cat/test/test.h >@@ -1,26 +1,8 @@ > /* >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2006 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > > /* Every test program should #include "test.h" as the first thing. */ >diff --git a/contrib/libarchive/cat/test/test_0.c b/contrib/libarchive/cat/test/test_0.c >index c806c24356c0..07f5fc60cf35 100644 >--- a/contrib/libarchive/cat/test/test_0.c >+++ b/contrib/libarchive/cat/test/test_0.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cat/test/test_empty_gz.c b/contrib/libarchive/cat/test/test_empty_gz.c >index 6181f93b4d28..0ca835627bf5 100644 >--- a/contrib/libarchive/cat/test/test_empty_gz.c >+++ b/contrib/libarchive/cat/test/test_empty_gz.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2014 Sebastian Freundt > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cat/test/test_empty_lz4.c b/contrib/libarchive/cat/test/test_empty_lz4.c >index 9d98e9cfd390..ed4f2894fb4f 100644 >--- a/contrib/libarchive/cat/test/test_empty_lz4.c >+++ b/contrib/libarchive/cat/test/test_empty_lz4.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2014 Sebastian Freundt > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cat/test/test_empty_xz.c b/contrib/libarchive/cat/test/test_empty_xz.c >index 368ffb574e50..591ab2410ce4 100644 >--- a/contrib/libarchive/cat/test/test_empty_xz.c >+++ b/contrib/libarchive/cat/test/test_empty_xz.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2014 Sebastian Freundt > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cat/test/test_empty_zstd.c b/contrib/libarchive/cat/test/test_empty_zstd.c >index c2d5ea106fa1..b0f25bf1cacd 100644 >--- a/contrib/libarchive/cat/test/test_empty_zstd.c >+++ b/contrib/libarchive/cat/test/test_empty_zstd.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2017 Sean Purcell > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cat/test/test_error.c b/contrib/libarchive/cat/test/test_error.c >index 918af01be2dc..3e1a74a38820 100644 >--- a/contrib/libarchive/cat/test/test_error.c >+++ b/contrib/libarchive/cat/test/test_error.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2014 Mike Kazantsev > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cat/test/test_error_mixed.c b/contrib/libarchive/cat/test/test_error_mixed.c >index 7d94fce467aa..01cb9f0520dd 100644 >--- a/contrib/libarchive/cat/test/test_error_mixed.c >+++ b/contrib/libarchive/cat/test/test_error_mixed.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2014 Mike Kazantsev > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cat/test/test_expand_Z.c b/contrib/libarchive/cat/test/test_expand_Z.c >index d48d4972ebee..f34f38ce0385 100644 >--- a/contrib/libarchive/cat/test/test_expand_Z.c >+++ b/contrib/libarchive/cat/test/test_expand_Z.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2014 Mike Kazantsev > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cat/test/test_expand_bz2.c b/contrib/libarchive/cat/test/test_expand_bz2.c >index 82f074b341c8..8f3bb3f24a46 100644 >--- a/contrib/libarchive/cat/test/test_expand_bz2.c >+++ b/contrib/libarchive/cat/test/test_expand_bz2.c >@@ -1,27 +1,9 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2014 Mike Kazantsev > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cat/test/test_expand_gz.c b/contrib/libarchive/cat/test/test_expand_gz.c >index 18b715c66ebb..1f6f1cfddbac 100644 >--- a/contrib/libarchive/cat/test/test_expand_gz.c >+++ b/contrib/libarchive/cat/test/test_expand_gz.c >@@ -1,27 +1,9 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2014 Mike Kazantsev > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cat/test/test_expand_lz4.c b/contrib/libarchive/cat/test/test_expand_lz4.c >index 1b1d2106459d..efc2baad59ed 100644 >--- a/contrib/libarchive/cat/test/test_expand_lz4.c >+++ b/contrib/libarchive/cat/test/test_expand_lz4.c >@@ -1,27 +1,9 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2014 Mike Kazantsev > * Copyright (c) 2012, 2014 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cat/test/test_expand_mixed.c b/contrib/libarchive/cat/test/test_expand_mixed.c >index fa2235719df6..eee22271af1b 100644 >--- a/contrib/libarchive/cat/test/test_expand_mixed.c >+++ b/contrib/libarchive/cat/test/test_expand_mixed.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2014 Mike Kazantsev > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cat/test/test_expand_plain.c b/contrib/libarchive/cat/test/test_expand_plain.c >index 8b2276982885..15831105bb24 100644 >--- a/contrib/libarchive/cat/test/test_expand_plain.c >+++ b/contrib/libarchive/cat/test/test_expand_plain.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2014 Mike Kazantsev > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cat/test/test_expand_xz.c b/contrib/libarchive/cat/test/test_expand_xz.c >index 99f87bf4c66b..050d14af2970 100644 >--- a/contrib/libarchive/cat/test/test_expand_xz.c >+++ b/contrib/libarchive/cat/test/test_expand_xz.c >@@ -1,27 +1,9 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2014 Mike Kazantsev > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cat/test/test_expand_zstd.c b/contrib/libarchive/cat/test/test_expand_zstd.c >index 23d918252ad1..a9ed1f127f91 100644 >--- a/contrib/libarchive/cat/test/test_expand_zstd.c >+++ b/contrib/libarchive/cat/test/test_expand_zstd.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2017 Sean Purcell > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cat/test/test_help.c b/contrib/libarchive/cat/test/test_help.c >index 4ed47a076b29..25b5b4bf80ca 100644 >--- a/contrib/libarchive/cat/test/test_help.c >+++ b/contrib/libarchive/cat/test/test_help.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cat/test/test_stdin.c b/contrib/libarchive/cat/test/test_stdin.c >index cea5eb0ec1b3..93ee42310041 100644 >--- a/contrib/libarchive/cat/test/test_stdin.c >+++ b/contrib/libarchive/cat/test/test_stdin.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2017 Sean Purcell > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cat/test/test_version.c b/contrib/libarchive/cat/test/test_version.c >index 51a4fd4d9a01..612282b7a2ff 100644 >--- a/contrib/libarchive/cat/test/test_version.c >+++ b/contrib/libarchive/cat/test/test_version.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2017 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/bsdcpio.1 b/contrib/libarchive/cpio/bsdcpio.1 >index c52764a8c4f7..9dc7d660b448 100644 >--- a/contrib/libarchive/cpio/bsdcpio.1 >+++ b/contrib/libarchive/cpio/bsdcpio.1 >@@ -1,26 +1,8 @@ >-.\" Copyright (c) 2003-2007 Tim Kientzle >-.\" All rights reserved. > .\" >-.\" Redistribution and use in source and binary forms, with or without >-.\" modification, are permitted provided that the following conditions >-.\" are met: >-.\" 1. Redistributions of source code must retain the above copyright >-.\" notice, this list of conditions and the following disclaimer. >-.\" 2. Redistributions in binary form must reproduce the above copyright >-.\" notice, this list of conditions and the following disclaimer in the >-.\" documentation and/or other materials provided with the distribution. >+.\" SPDX-License-Identifier: BSD-2-Clause > .\" >-.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND >-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE >-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE >-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE >-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL >-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS >-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) >-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT >-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY >-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF >-.\" SUCH DAMAGE. >+.\" Copyright (c) 2003-2007 Tim Kientzle >+.\" All rights reserved. > .\" > .Dd September 16, 2014 > .Dt CPIO 1 >diff --git a/contrib/libarchive/cpio/cmdline.c b/contrib/libarchive/cpio/cmdline.c >index ab25492ede48..c67519947dbc 100644 >--- a/contrib/libarchive/cpio/cmdline.c >+++ b/contrib/libarchive/cpio/cmdline.c >@@ -1,27 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer >- * in this position and unchanged. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > > >@@ -308,17 +289,22 @@ cpio_getopt(struct cpio *cpio) > * Returns NULL if no error, otherwise returns error string for display. > * > */ >-const char * >-owner_parse(const char *spec, int *uid, int *gid) >+int >+owner_parse(const char *spec, struct cpio_owner *owner, const char **errmsg) > { > static char errbuff[128]; > const char *u, *ue, *g; > >- *uid = -1; >- *gid = -1; >+ owner->uid = -1; >+ owner->gid = -1; > >- if (spec[0] == '\0') >- return ("Invalid empty user/group spec"); >+ owner->uname = NULL; >+ owner->gname = NULL; >+ >+ if (spec[0] == '\0') { >+ *errmsg = "Invalid empty user/group spec"; >+ return (-1); >+ } > > /* > * Split spec into [user][:.][group] >@@ -345,25 +331,31 @@ owner_parse(const char *spec, int *uid, int *gid) > char *user; > struct passwd *pwent; > >- user = (char *)malloc(ue - u + 1); >+ user = malloc(ue - u + 1); > if (user == NULL) >- return ("Couldn't allocate memory"); >+ goto alloc_error; > memcpy(user, u, ue - u); > user[ue - u] = '\0'; > if ((pwent = getpwnam(user)) != NULL) { >- *uid = pwent->pw_uid; >+ owner->uid = pwent->pw_uid; >+ owner->uname = strdup(pwent->pw_name); >+ if (owner->uname == NULL) { >+ free(user); >+ goto alloc_error; >+ } > if (*ue != '\0') >- *gid = pwent->pw_gid; >+ owner->gid = pwent->pw_gid; > } else { > char *end; > errno = 0; >- *uid = (int)strtoul(user, &end, 10); >+ owner->uid = (int)strtoul(user, &end, 10); > if (errno || *end != '\0') { > snprintf(errbuff, sizeof(errbuff), > "Couldn't lookup user ``%s''", user); > errbuff[sizeof(errbuff) - 1] = '\0'; > free(user); >- return (errbuff); >+ *errmsg = errbuff; >+ return (-1); > } > } > free(user); >@@ -372,18 +364,28 @@ owner_parse(const char *spec, int *uid, int *gid) > if (*g != '\0') { > struct group *grp; > if ((grp = getgrnam(g)) != NULL) { >- *gid = grp->gr_gid; >+ owner->gid = grp->gr_gid; >+ owner->gname = strdup(grp->gr_name); >+ if (owner->gname == NULL) { >+ free(owner->uname); >+ owner->uname = NULL; >+ goto alloc_error; >+ } > } else { > char *end; > errno = 0; >- *gid = (int)strtoul(g, &end, 10); >+ owner->gid = (int)strtoul(g, &end, 10); > if (errno || *end != '\0') { > snprintf(errbuff, sizeof(errbuff), > "Couldn't lookup group ``%s''", g); > errbuff[sizeof(errbuff) - 1] = '\0'; >- return (errbuff); >+ *errmsg = errbuff; >+ return (-1); > } > } > } >- return (NULL); >+ return (0); >+alloc_error: >+ *errmsg = "Couldn't allocate memory"; >+ return (-1); > } >diff --git a/contrib/libarchive/cpio/cpio.c b/contrib/libarchive/cpio/cpio.c >index c9af535f6d0a..6bc6eb22e967 100644 >--- a/contrib/libarchive/cpio/cpio.c >+++ b/contrib/libarchive/cpio/cpio.c >@@ -1,27 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer >- * in this position and unchanged. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > > >@@ -132,9 +113,9 @@ main(int argc, char *argv[]) > static char buff[16384]; > struct cpio _cpio; /* Allocated on stack. */ > struct cpio *cpio; >+ struct cpio_owner owner; > const char *errmsg; > char *tptr; >- int uid, gid; > int opt, t; > > cpio = &_cpio; >@@ -142,6 +123,7 @@ main(int argc, char *argv[]) > cpio->buff = buff; > cpio->buff_size = sizeof(buff); > >+ > #if defined(HAVE_SIGACTION) && defined(SIGPIPE) > { /* Ignore SIGPIPE signals. */ > struct sigaction sa; >@@ -161,7 +143,9 @@ main(int argc, char *argv[]) > #endif > > cpio->uid_override = -1; >+ cpio->uname_override = NULL; > cpio->gid_override = -1; >+ cpio->gname_override = NULL; > cpio->argv = argv; > cpio->argc = argc; > cpio->mode = '\0'; >@@ -320,21 +304,21 @@ main(int argc, char *argv[]) > cpio->quiet = 1; > break; > case 'R': /* GNU cpio, also --owner */ >- /* TODO: owner_parse should return uname/gname >- * also; use that to set [ug]name_override. */ >- errmsg = owner_parse(cpio->argument, &uid, &gid); >- if (errmsg) { >+ errmsg = NULL; >+ if (owner_parse(cpio->argument, &owner, &errmsg) != 0) { >+ if (!errmsg) >+ errmsg = "Error parsing owner"; > lafe_warnc(-1, "%s", errmsg); > usage(); > } >- if (uid != -1) { >- cpio->uid_override = uid; >- cpio->uname_override = NULL; >- } >- if (gid != -1) { >- cpio->gid_override = gid; >- cpio->gname_override = NULL; >- } >+ if (owner.uid != -1) >+ cpio->uid_override = owner.uid; >+ if (owner.uname != NULL) >+ cpio->uname_override = owner.uname; >+ if (owner.gid != -1) >+ cpio->gid_override = owner.gid; >+ if (owner.gname != NULL) >+ cpio->gname_override = owner.gname; > break; > case 'r': /* POSIX 1997 */ > cpio->option_rename = 1; >@@ -439,11 +423,14 @@ main(int argc, char *argv[]) > } > > archive_match_free(cpio->matching); >- free_cache(cpio->gname_cache); > free_cache(cpio->uname_cache); >+ free(cpio->uname_override); >+ free_cache(cpio->gname_cache); >+ free(cpio->gname_override); > archive_read_close(cpio->archive_read_disk); > archive_read_free(cpio->archive_read_disk); > free(cpio->destdir); >+ > passphrase_free(cpio->ppbuff); > return (cpio->return_value); > } >@@ -728,14 +715,14 @@ file_to_archive(struct cpio *cpio, const char *srcpath) > return (r); > } > >- if (cpio->uid_override >= 0) { >+ if (cpio->uid_override >= 0) > archive_entry_set_uid(entry, cpio->uid_override); >+ if (cpio->gname_override != NULL) > archive_entry_set_uname(entry, cpio->uname_override); >- } >- if (cpio->gid_override >= 0) { >+ if (cpio->gid_override >= 0) > archive_entry_set_gid(entry, cpio->gid_override); >+ if (cpio->gname_override != NULL) > archive_entry_set_gname(entry, cpio->gname_override); >- } > > /* > * Generate a destination path for this entry. >@@ -1015,13 +1002,18 @@ mode_in(struct cpio *cpio) > fprintf(stderr, "."); > if (cpio->uid_override >= 0) > archive_entry_set_uid(entry, cpio->uid_override); >+ if (cpio->uname_override != NULL) >+ archive_entry_set_uname(entry, cpio->uname_override); > if (cpio->gid_override >= 0) > archive_entry_set_gid(entry, cpio->gid_override); >+ if (cpio->gname_override != NULL) >+ archive_entry_set_gname(entry, cpio->gname_override); > r = archive_write_header(ext, entry); > if (r != ARCHIVE_OK) { > fprintf(stderr, "%s: %s\n", > archive_entry_pathname(entry), > archive_error_string(ext)); >+ cpio->return_value = 1; > } else if (!archive_entry_size_is_set(entry) > || archive_entry_size(entry) > 0) { > r = extract_data(a, ext); >diff --git a/contrib/libarchive/cpio/cpio.h b/contrib/libarchive/cpio/cpio.h >index 3e97c0900b73..9bc631b544fe 100644 >--- a/contrib/libarchive/cpio/cpio.h >+++ b/contrib/libarchive/cpio/cpio.h >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > > #ifndef CPIO_H_INCLUDED >@@ -94,8 +76,14 @@ struct cpio { > char *ppbuff; > }; > >-const char *owner_parse(const char *, int *, int *); >+struct cpio_owner { >+ int uid; >+ int gid; >+ char *uname; >+ char *gname; >+}; > >+int owner_parse(const char *, struct cpio_owner *, const char **); > > /* Fake short equivalents for long options that otherwise lack them. */ > enum { >diff --git a/contrib/libarchive/cpio/cpio_platform.h b/contrib/libarchive/cpio/cpio_platform.h >index 263404b40dab..c097fc62c58d 100644 >--- a/contrib/libarchive/cpio/cpio_platform.h >+++ b/contrib/libarchive/cpio/cpio_platform.h >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > > /* >diff --git a/contrib/libarchive/cpio/test/test.h b/contrib/libarchive/cpio/test/test.h >index f8f3a4038b57..1bbbb9d40d66 100644 >--- a/contrib/libarchive/cpio/test/test.h >+++ b/contrib/libarchive/cpio/test/test.h >@@ -1,26 +1,8 @@ > /* >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2017 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > > /* Every test program should #include "test.h" as the first thing. */ >diff --git a/contrib/libarchive/cpio/test/test_0.c b/contrib/libarchive/cpio/test/test_0.c >index c09df5e137c4..f6166456a6a0 100644 >--- a/contrib/libarchive/cpio/test/test_0.c >+++ b/contrib/libarchive/cpio/test/test_0.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_basic.c b/contrib/libarchive/cpio/test/test_basic.c >index 993d555b831c..8b8e8bb0f0ec 100644 >--- a/contrib/libarchive/cpio/test/test_basic.c >+++ b/contrib/libarchive/cpio/test/test_basic.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_cmdline.c b/contrib/libarchive/cpio/test/test_cmdline.c >index f4e05ee58599..e4397b14e7f6 100644 >--- a/contrib/libarchive/cpio/test/test_cmdline.c >+++ b/contrib/libarchive/cpio/test/test_cmdline.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2009 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_extract_cpio_Z.c b/contrib/libarchive/cpio/test/test_extract_cpio_Z.c >index 257d70d04211..31fc271a5674 100644 >--- a/contrib/libarchive/cpio/test/test_extract_cpio_Z.c >+++ b/contrib/libarchive/cpio/test/test_extract_cpio_Z.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_extract_cpio_absolute_paths.c b/contrib/libarchive/cpio/test/test_extract_cpio_absolute_paths.c >new file mode 100644 >index 000000000000..51650bc00f5a >--- /dev/null >+++ b/contrib/libarchive/cpio/test/test_extract_cpio_absolute_paths.c >@@ -0,0 +1,53 @@ >+/*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * >+ * Copyright (c) 2024 Mostyn Bramley-Moore <mostyn@antipode.se> >+ */ >+ >+#include "test.h" >+ >+#include <stdlib.h> >+#include <string.h> >+ >+#if defined(_WIN32) && !defined(__CYGWIN__) >+#define UNLINK _unlink >+#else >+#define UNLINK unlink >+#endif >+ >+DEFINE_TEST(test_extract_cpio_absolute_paths) >+{ >+ int r; >+ >+ // Create an absolute path for a test file inside testworkdir. >+ const char *entry_suffix = "/cpio-noabs"; >+ size_t entry_suffix_length = strlen(entry_suffix); >+ size_t testworkdir_length = strlen(testworkdir); >+ size_t temp_absolute_file_name_length = testworkdir_length + entry_suffix_length; >+ char *temp_absolute_file_name = calloc(1, temp_absolute_file_name_length + 1); // +1 for null character. >+ assertEqualInt(snprintf(temp_absolute_file_name, temp_absolute_file_name_length + 1, "%s%s", testworkdir, entry_suffix), >+ temp_absolute_file_name_length); >+ >+ // Create the file. >+ const char *sample_data = "test file from test_extract_cpio_absolute_paths"; >+ assertMakeFile(temp_absolute_file_name, 0644, sample_data); >+ >+ // Create an archive with the test file, using an absolute path. >+ assertMakeFile("filelist", 0644, temp_absolute_file_name); >+ r = systemf("%s -o < filelist > archive.cpio 2> stderr1.txt", testprog); >+ assertEqualInt(r, 0); >+ >+ // Ensure that the temp file does not exist. >+ UNLINK(temp_absolute_file_name); >+ >+ // We should refuse to create the absolute path without --insecure. >+ r = systemf("%s -i < archive.cpio 2> stderr2.txt", testprog); >+ assert(r != 0); >+ assertFileNotExists(temp_absolute_file_name); >+ UNLINK(temp_absolute_file_name); // Cleanup just in case. >+ >+ // But if we specify --insecure then the absolute path should be created. >+ r = systemf("%s -i --insecure < archive.cpio 2> stderr3.txt", testprog); >+ assert(r == 0); >+ assertFileExists(temp_absolute_file_name); >+} >diff --git a/contrib/libarchive/cpio/test/test_extract_cpio_bz2.c b/contrib/libarchive/cpio/test/test_extract_cpio_bz2.c >index 08fe1fe53468..b66c08271837 100644 >--- a/contrib/libarchive/cpio/test/test_extract_cpio_bz2.c >+++ b/contrib/libarchive/cpio/test/test_extract_cpio_bz2.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_extract_cpio_grz.c b/contrib/libarchive/cpio/test/test_extract_cpio_grz.c >index 969b30e44de5..8cd3583e909d 100644 >--- a/contrib/libarchive/cpio/test/test_extract_cpio_grz.c >+++ b/contrib/libarchive/cpio/test/test_extract_cpio_grz.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_extract_cpio_gz.c b/contrib/libarchive/cpio/test/test_extract_cpio_gz.c >index 16296146f87e..bc1bd48df44a 100644 >--- a/contrib/libarchive/cpio/test/test_extract_cpio_gz.c >+++ b/contrib/libarchive/cpio/test/test_extract_cpio_gz.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_extract_cpio_lrz.c b/contrib/libarchive/cpio/test/test_extract_cpio_lrz.c >index 7ef213f74aac..fd124b29475c 100644 >--- a/contrib/libarchive/cpio/test/test_extract_cpio_lrz.c >+++ b/contrib/libarchive/cpio/test/test_extract_cpio_lrz.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_extract_cpio_lz.c b/contrib/libarchive/cpio/test/test_extract_cpio_lz.c >index bfdf87869b37..deacbbfbb9ba 100644 >--- a/contrib/libarchive/cpio/test/test_extract_cpio_lz.c >+++ b/contrib/libarchive/cpio/test/test_extract_cpio_lz.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_extract_cpio_lz4.c b/contrib/libarchive/cpio/test/test_extract_cpio_lz4.c >index f8cf5f8fab0d..06bd5f021246 100644 >--- a/contrib/libarchive/cpio/test/test_extract_cpio_lz4.c >+++ b/contrib/libarchive/cpio/test/test_extract_cpio_lz4.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2012,2014 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_extract_cpio_lzma.c b/contrib/libarchive/cpio/test/test_extract_cpio_lzma.c >index 81fc3c236ab5..6d2f76fc855d 100644 >--- a/contrib/libarchive/cpio/test/test_extract_cpio_lzma.c >+++ b/contrib/libarchive/cpio/test/test_extract_cpio_lzma.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_extract_cpio_lzo.c b/contrib/libarchive/cpio/test/test_extract_cpio_lzo.c >index d54d4f712374..43f9dce1ce4b 100644 >--- a/contrib/libarchive/cpio/test/test_extract_cpio_lzo.c >+++ b/contrib/libarchive/cpio/test/test_extract_cpio_lzo.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_extract_cpio_xz.c b/contrib/libarchive/cpio/test/test_extract_cpio_xz.c >index faeea202e050..bdf8e8d918e9 100644 >--- a/contrib/libarchive/cpio/test/test_extract_cpio_xz.c >+++ b/contrib/libarchive/cpio/test/test_extract_cpio_xz.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_extract_cpio_zstd.c b/contrib/libarchive/cpio/test/test_extract_cpio_zstd.c >index 31421c3b60d7..67428813e6b4 100644 >--- a/contrib/libarchive/cpio/test/test_extract_cpio_zstd.c >+++ b/contrib/libarchive/cpio/test/test_extract_cpio_zstd.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2017 Sean Purcell > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_format_newc.c b/contrib/libarchive/cpio/test/test_format_newc.c >index ee0087d4ca94..884b6c9c4da7 100644 >--- a/contrib/libarchive/cpio/test/test_format_newc.c >+++ b/contrib/libarchive/cpio/test/test_format_newc.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >@@ -194,11 +176,11 @@ DEFINE_TEST(test_format_newc) > assertEqualMem(e + 0, "070701", 6); /* Magic */ > ino = from_hex(e + 6, 8); /* ino */ > #if defined(_WIN32) && !defined(__CYGWIN__) >- /* Group members bits and others bits do not work. */ >+ /* Group members bits and others bits do not work. */ > assertEqualInt(0x8180, from_hex(e + 14, 8) & 0xffc0); /* Mode */ > #else > assertEqualInt(0x81a4, from_hex(e + 14, 8)); /* Mode */ >-#endif >+#endif > #if defined(_WIN32) > uid = from_hex(e + 22, 8); > #else >@@ -308,7 +290,7 @@ DEFINE_TEST(test_format_newc) > failure("If these aren't the same, then the hardlink detection failed to match them."); > assertEqualInt(ino, from_hex(e + 6, 8)); /* ino */ > #if defined(_WIN32) && !defined(__CYGWIN__) >- /* Group members bits and others bits do not work. */ >+ /* Group members bits and others bits do not work. */ > assertEqualInt(0x8180, from_hex(e + 14, 8) & 0xffc0); /* Mode */ > #else > assertEqualInt(0x81a4, from_hex(e + 14, 8)); /* Mode */ >diff --git a/contrib/libarchive/cpio/test/test_gcpio_compat.c b/contrib/libarchive/cpio/test/test_gcpio_compat.c >index 82c71ec3cd21..1765df6f058e 100644 >--- a/contrib/libarchive/cpio/test/test_gcpio_compat.c >+++ b/contrib/libarchive/cpio/test/test_gcpio_compat.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_missing_file.c b/contrib/libarchive/cpio/test/test_missing_file.c >index 784d53cfe141..a9e8d6ba20ca 100644 >--- a/contrib/libarchive/cpio/test/test_missing_file.c >+++ b/contrib/libarchive/cpio/test/test_missing_file.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2016 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_option_0.c b/contrib/libarchive/cpio/test/test_option_0.c >index fbe6f7ac4a85..76a2fae5c214 100644 >--- a/contrib/libarchive/cpio/test/test_option_0.c >+++ b/contrib/libarchive/cpio/test/test_option_0.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2010 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_option_B_upper.c b/contrib/libarchive/cpio/test/test_option_B_upper.c >index 79dc91efb5ba..873220d991e4 100644 >--- a/contrib/libarchive/cpio/test/test_option_B_upper.c >+++ b/contrib/libarchive/cpio/test/test_option_B_upper.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_option_C_upper.c b/contrib/libarchive/cpio/test/test_option_C_upper.c >index f9fd7e159339..9c854daebfb7 100644 >--- a/contrib/libarchive/cpio/test/test_option_C_upper.c >+++ b/contrib/libarchive/cpio/test/test_option_C_upper.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_option_J_upper.c b/contrib/libarchive/cpio/test/test_option_J_upper.c >index f76d3b236913..1982267c79f5 100644 >--- a/contrib/libarchive/cpio/test/test_option_J_upper.c >+++ b/contrib/libarchive/cpio/test/test_option_J_upper.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2009 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_option_L_upper.c b/contrib/libarchive/cpio/test/test_option_L_upper.c >index b6fb713f110f..1854b1d944e5 100644 >--- a/contrib/libarchive/cpio/test/test_option_L_upper.c >+++ b/contrib/libarchive/cpio/test/test_option_L_upper.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_option_Z_upper.c b/contrib/libarchive/cpio/test/test_option_Z_upper.c >index aa408e4e548c..15f88944aa39 100644 >--- a/contrib/libarchive/cpio/test/test_option_Z_upper.c >+++ b/contrib/libarchive/cpio/test/test_option_Z_upper.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2009 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_option_a.c b/contrib/libarchive/cpio/test/test_option_a.c >index 885eb12c80f5..e6b87948c65a 100644 >--- a/contrib/libarchive/cpio/test/test_option_a.c >+++ b/contrib/libarchive/cpio/test/test_option_a.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2008 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > #if defined(HAVE_UTIME_H) >diff --git a/contrib/libarchive/cpio/test/test_option_b64encode.c b/contrib/libarchive/cpio/test/test_option_b64encode.c >index 501976c202a1..721a4a33c977 100644 >--- a/contrib/libarchive/cpio/test/test_option_b64encode.c >+++ b/contrib/libarchive/cpio/test/test_option_b64encode.c >@@ -1,27 +1,9 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_option_c.c b/contrib/libarchive/cpio/test/test_option_c.c >index 0b6bed2fac93..e8748449514b 100644 >--- a/contrib/libarchive/cpio/test/test_option_c.c >+++ b/contrib/libarchive/cpio/test/test_option_c.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >@@ -119,9 +101,9 @@ DEFINE_TEST(test_option_c) > assert(is_octal(e, 76)); /* Entire header is octal digits. */ > assertEqualMem(e + 0, "070707", 6); /* Magic */ > assert(is_octal(e + 6, 6)); /* dev */ >- dev = from_octal(e + 6, 6); >+ dev = (int)from_octal(e + 6, 6); > assert(is_octal(e + 12, 6)); /* ino */ >- ino = from_octal(e + 12, 6); >+ ino = (int)from_octal(e + 12, 6); > #if defined(_WIN32) && !defined(__CYGWIN__) > /* Group members bits and others bits do not work. */ > assertEqualMem(e + 18, "100666", 6); /* Mode */ >@@ -129,10 +111,10 @@ DEFINE_TEST(test_option_c) > assertEqualMem(e + 18, "100644", 6); /* Mode */ > #endif > if (uid < 0) >- uid = from_octal(e + 24, 6); >+ uid = (int)from_octal(e + 24, 6); > assertEqualInt(from_octal(e + 24, 6), uid); /* uid */ > assert(is_octal(e + 30, 6)); /* gid */ >- gid = from_octal(e + 30, 6); >+ gid = (int)from_octal(e + 30, 6); > assertEqualMem(e + 36, "000001", 6); /* nlink */ > failure("file entries should not have rdev set (dev field was 0%o)", > dev); >diff --git a/contrib/libarchive/cpio/test/test_option_d.c b/contrib/libarchive/cpio/test/test_option_d.c >index b96430e4f37a..3ad6c0bd6dd8 100644 >--- a/contrib/libarchive/cpio/test/test_option_d.c >+++ b/contrib/libarchive/cpio/test/test_option_d.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >@@ -44,7 +26,7 @@ DEFINE_TEST(test_option_d) > assertMakeDir("without-d", 0755); > assertChdir("without-d"); > r = systemf("%s -i < ../archive.cpio >out 2>err", testprog); >- assertEqualInt(r, 0); >+ assert(r != 0); > assertEmptyFile("out"); > /* And the file should not be restored. */ > assertFileNotExists("dir/file"); >diff --git a/contrib/libarchive/cpio/test/test_option_f.c b/contrib/libarchive/cpio/test/test_option_f.c >index 72383884ac1e..ee09b778a84c 100644 >--- a/contrib/libarchive/cpio/test/test_option_f.c >+++ b/contrib/libarchive/cpio/test/test_option_f.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_option_grzip.c b/contrib/libarchive/cpio/test/test_option_grzip.c >index cd898cd9228f..6bf12b7de84b 100644 >--- a/contrib/libarchive/cpio/test/test_option_grzip.c >+++ b/contrib/libarchive/cpio/test/test_option_grzip.c >@@ -1,27 +1,9 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_option_help.c b/contrib/libarchive/cpio/test/test_option_help.c >index cf69c76496d5..ff64d27b759d 100644 >--- a/contrib/libarchive/cpio/test/test_option_help.c >+++ b/contrib/libarchive/cpio/test/test_option_help.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_option_l.c b/contrib/libarchive/cpio/test/test_option_l.c >index 3f4390a6ff22..bbd54c7bc972 100644 >--- a/contrib/libarchive/cpio/test/test_option_l.c >+++ b/contrib/libarchive/cpio/test/test_option_l.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_option_lrzip.c b/contrib/libarchive/cpio/test/test_option_lrzip.c >index 4c46f1c65bba..8854039de0f1 100644 >--- a/contrib/libarchive/cpio/test/test_option_lrzip.c >+++ b/contrib/libarchive/cpio/test/test_option_lrzip.c >@@ -1,27 +1,9 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_option_lz4.c b/contrib/libarchive/cpio/test/test_option_lz4.c >index 4c5186d55ccc..17b20e334e2b 100644 >--- a/contrib/libarchive/cpio/test/test_option_lz4.c >+++ b/contrib/libarchive/cpio/test/test_option_lz4.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2014 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_option_lzma.c b/contrib/libarchive/cpio/test/test_option_lzma.c >index 3c2648b827cd..0961a0c0b569 100644 >--- a/contrib/libarchive/cpio/test/test_option_lzma.c >+++ b/contrib/libarchive/cpio/test/test_option_lzma.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_option_lzop.c b/contrib/libarchive/cpio/test/test_option_lzop.c >index b787b720a878..66afeb56c903 100644 >--- a/contrib/libarchive/cpio/test/test_option_lzop.c >+++ b/contrib/libarchive/cpio/test/test_option_lzop.c >@@ -1,27 +1,9 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_option_m.c b/contrib/libarchive/cpio/test/test_option_m.c >index f2f297e10572..4cb7e354cee4 100644 >--- a/contrib/libarchive/cpio/test/test_option_m.c >+++ b/contrib/libarchive/cpio/test/test_option_m.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_option_passphrase.c b/contrib/libarchive/cpio/test/test_option_passphrase.c >index d409b30c81cf..28818cb6f05c 100644 >--- a/contrib/libarchive/cpio/test/test_option_passphrase.c >+++ b/contrib/libarchive/cpio/test/test_option_passphrase.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2014 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_option_t.c b/contrib/libarchive/cpio/test/test_option_t.c >index 953e4a80651e..c7ee64341efd 100644 >--- a/contrib/libarchive/cpio/test/test_option_t.c >+++ b/contrib/libarchive/cpio/test/test_option_t.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >@@ -33,7 +15,7 @@ DEFINE_TEST(test_option_t) > char *p; > int r; > time_t mtime; >- char date[32]; >+ char date[48]; > char date2[32]; > struct tm *tmptr; > #if defined(HAVE_LOCALTIME_R) || defined(HAVE_LOCALTIME_S) >@@ -89,6 +71,7 @@ DEFINE_TEST(test_option_t) > mtime = 1; > #ifdef HAVE_LOCALE_H > setlocale(LC_ALL, ""); >+ setlocale(LC_TIME, ""); > #endif > #if defined(HAVE_LOCALTIME_S) > tmptr = localtime_s(&tmbuf, &mtime) ? NULL : &tmbuf; >@@ -99,10 +82,10 @@ DEFINE_TEST(test_option_t) > #endif > #if defined(_WIN32) && !defined(__CYGWIN__) > strftime(date2, sizeof(date2)-1, "%b %d %Y", tmptr); >- _snprintf(date, sizeof(date)-1, "%12.12s file", date2); >+ _snprintf(date, sizeof(date)-1, "%12s file", date2); > #else > strftime(date2, sizeof(date2)-1, "%b %e %Y", tmptr); >- snprintf(date, sizeof(date)-1, "%12.12s file", date2); >+ snprintf(date, sizeof(date)-1, "%12s file", date2); > #endif > assertEqualMem(p + 42, date, strlen(date)); > free(p); >diff --git a/contrib/libarchive/cpio/test/test_option_u.c b/contrib/libarchive/cpio/test/test_option_u.c >index fe5b863af0e2..4c00e88cfe7a 100644 >--- a/contrib/libarchive/cpio/test/test_option_u.c >+++ b/contrib/libarchive/cpio/test/test_option_u.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > #if defined(HAVE_UTIME_H) >diff --git a/contrib/libarchive/cpio/test/test_option_uuencode.c b/contrib/libarchive/cpio/test/test_option_uuencode.c >index 28662ddfb659..76966602b7a7 100644 >--- a/contrib/libarchive/cpio/test/test_option_uuencode.c >+++ b/contrib/libarchive/cpio/test/test_option_uuencode.c >@@ -1,27 +1,9 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_option_version.c b/contrib/libarchive/cpio/test/test_option_version.c >index 505db27128fe..4992295ae17a 100644 >--- a/contrib/libarchive/cpio/test/test_option_version.c >+++ b/contrib/libarchive/cpio/test/test_option_version.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2017 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_option_xz.c b/contrib/libarchive/cpio/test/test_option_xz.c >index 9116ecace3a7..cc91fd566ad5 100644 >--- a/contrib/libarchive/cpio/test/test_option_xz.c >+++ b/contrib/libarchive/cpio/test/test_option_xz.c >@@ -1,27 +1,9 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_option_y.c b/contrib/libarchive/cpio/test/test_option_y.c >index a78dff8cf4ea..fd1a947c0649 100644 >--- a/contrib/libarchive/cpio/test/test_option_y.c >+++ b/contrib/libarchive/cpio/test/test_option_y.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_option_z.c b/contrib/libarchive/cpio/test/test_option_z.c >index 9a1500d77f32..e89d8f8ea62c 100644 >--- a/contrib/libarchive/cpio/test/test_option_z.c >+++ b/contrib/libarchive/cpio/test/test_option_z.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_option_zstd.c b/contrib/libarchive/cpio/test/test_option_zstd.c >index 10c3ed9784e8..50ec458d0993 100644 >--- a/contrib/libarchive/cpio/test/test_option_zstd.c >+++ b/contrib/libarchive/cpio/test/test_option_zstd.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2017 Sean Purcell > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_owner_parse.c b/contrib/libarchive/cpio/test/test_owner_parse.c >index fc6f18943f5d..dfc78ca77aec 100644 >--- a/contrib/libarchive/cpio/test/test_owner_parse.c >+++ b/contrib/libarchive/cpio/test/test_owner_parse.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2009 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >@@ -55,6 +37,14 @@ int_in_list(int i, const int *l, size_t n) > failure("%d", i); > return (0); > } >+ >+static void >+free_cpio_owner(struct cpio_owner *owner) { >+ owner->uid = -1; >+ owner->gid = -1; >+ free(owner->uname); >+ free(owner->gname); >+} > #endif > > DEFINE_TEST(test_owner_parse) >@@ -62,49 +52,58 @@ DEFINE_TEST(test_owner_parse) > #if !defined(ROOT) > skipping("No uid/gid configuration for this OS"); > #else >- int uid, gid; >+ struct cpio_owner owner; >+ const char *errstr; > >- assert(NULL == owner_parse(ROOT, &uid, &gid)); >- assert(int_in_list(uid, root_uids, >+ assert(0 == owner_parse(ROOT, &owner, &errstr)); >+ assert(int_in_list(owner.uid, root_uids, > sizeof(root_uids)/sizeof(root_uids[0]))); >- assertEqualInt(-1, gid); >- >+ assertEqualInt(-1, owner.gid); >+ free_cpio_owner(&owner); > >- assert(NULL == owner_parse(ROOT ":", &uid, &gid)); >- assert(int_in_list(uid, root_uids, >+ assert(0 == owner_parse(ROOT ":", &owner, &errstr)); >+ assert(int_in_list(owner.uid, root_uids, > sizeof(root_uids)/sizeof(root_uids[0]))); >- assert(int_in_list(gid, root_gids, >+ assert(int_in_list(owner.gid, root_gids, > sizeof(root_gids)/sizeof(root_gids[0]))); >+ free_cpio_owner(&owner); > >- assert(NULL == owner_parse(ROOT ".", &uid, &gid)); >- assert(int_in_list(uid, root_uids, >+ assert(0 == owner_parse(ROOT ".", &owner, &errstr)); >+ assert(int_in_list(owner.uid, root_uids, > sizeof(root_uids)/sizeof(root_uids[0]))); >- assert(int_in_list(gid, root_gids, >+ assert(int_in_list(owner.gid, root_gids, > sizeof(root_gids)/sizeof(root_gids[0]))); >+ free_cpio_owner(&owner); > >- assert(NULL == owner_parse("111", &uid, &gid)); >- assertEqualInt(111, uid); >- assertEqualInt(-1, gid); >+ assert(0 == owner_parse("111", &owner, &errstr)); >+ assertEqualInt(111, owner.uid); >+ assertEqualInt(-1, owner.gid); >+ free_cpio_owner(&owner); > >- assert(NULL == owner_parse("112:", &uid, &gid)); >- assertEqualInt(112, uid); >+ assert(0 == owner_parse("112:", &owner, &errstr)); >+ assertEqualInt(112, owner.uid); > /* Can't assert gid, since we don't know gid for user #112. */ >+ free_cpio_owner(&owner); > >- assert(NULL == owner_parse("113.", &uid, &gid)); >- assertEqualInt(113, uid); >+ assert(0 == owner_parse("113.", &owner, &errstr)); >+ assertEqualInt(113, owner.uid); > /* Can't assert gid, since we don't know gid for user #113. */ >+ free_cpio_owner(&owner); > >- assert(NULL == owner_parse(":114", &uid, &gid)); >- assertEqualInt(-1, uid); >- assertEqualInt(114, gid); >+ assert(0 == owner_parse(":114", &owner, &errstr)); >+ assertEqualInt(-1, owner.uid); >+ assertEqualInt(114, owner.gid); >+ free_cpio_owner(&owner); > >- assert(NULL == owner_parse(".115", &uid, &gid)); >- assertEqualInt(-1, uid); >- assertEqualInt(115, gid); >+ assert(0 == owner_parse(".115", &owner, &errstr)); >+ assertEqualInt(-1, owner.uid); >+ assertEqualInt(115, owner.gid); >+ free_cpio_owner(&owner); > >- assert(NULL == owner_parse("116:117", &uid, &gid)); >- assertEqualInt(116, uid); >- assertEqualInt(117, gid); >+ assert(0 == owner_parse("116:117", &owner, &errstr)); >+ assertEqualInt(116, owner.uid); >+ assertEqualInt(117, owner.gid); >+ free_cpio_owner(&owner); > > /* > * TODO: Lookup current user/group name, build strings and >@@ -112,9 +111,20 @@ DEFINE_TEST(test_owner_parse) > * users. > */ > >- assert(NULL != owner_parse(":nonexistentgroup", &uid, &gid)); >- assert(NULL != owner_parse(ROOT ":nonexistentgroup", &uid, &gid)); >- assert(NULL != >- owner_parse("nonexistentuser:nonexistentgroup", &uid, &gid)); >+ errstr = NULL; >+ assert(0 != owner_parse(":nonexistentgroup", &owner, &errstr)); >+ assertEqualString(errstr, "Couldn't lookup group ``nonexistentgroup''"); >+ free_cpio_owner(&owner); >+ >+ errstr = NULL; >+ assert(0 != owner_parse(ROOT ":nonexistentgroup", &owner, &errstr)); >+ assertEqualString(errstr, "Couldn't lookup group ``nonexistentgroup''"); >+ free_cpio_owner(&owner); >+ >+ errstr = NULL; >+ assert(0 != owner_parse("nonexistentuser:nonexistentgroup", &owner, >+ &errstr)); >+ assertEqualString(errstr, "Couldn't lookup user ``nonexistentuser''"); >+ free_cpio_owner(&owner); > #endif > } >diff --git a/contrib/libarchive/cpio/test/test_passthrough_dotdot.c b/contrib/libarchive/cpio/test/test_passthrough_dotdot.c >index 831c1f81c1cb..bd77190fbf62 100644 >--- a/contrib/libarchive/cpio/test/test_passthrough_dotdot.c >+++ b/contrib/libarchive/cpio/test/test_passthrough_dotdot.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/cpio/test/test_passthrough_reverse.c b/contrib/libarchive/cpio/test/test_passthrough_reverse.c >index 7ae0e6602a34..9e58b618060f 100644 >--- a/contrib/libarchive/cpio/test/test_passthrough_reverse.c >+++ b/contrib/libarchive/cpio/test/test_passthrough_reverse.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/libarchive/archive.h b/contrib/libarchive/libarchive/archive.h >index fd4dd20fad13..5b65475f61e2 100644 >--- a/contrib/libarchive/libarchive/archive.h >+++ b/contrib/libarchive/libarchive/archive.h >@@ -34,7 +34,7 @@ > * assert that ARCHIVE_VERSION_NUMBER >= 2012108. > */ > /* Note: Compiler will complain if this does not match archive_entry.h! */ >-#define ARCHIVE_VERSION_NUMBER 3007004 >+#define ARCHIVE_VERSION_NUMBER 3007007 > > #include <sys/stat.h> > #include <stddef.h> /* for wchar_t */ >@@ -155,7 +155,7 @@ __LA_DECL int archive_version_number(void); > /* > * Textual name/version of the library, useful for version displays. > */ >-#define ARCHIVE_VERSION_ONLY_STRING "3.7.4" >+#define ARCHIVE_VERSION_ONLY_STRING "3.7.7" > #define ARCHIVE_VERSION_STRING "libarchive " ARCHIVE_VERSION_ONLY_STRING > __LA_DECL const char * archive_version_string(void); > >diff --git a/contrib/libarchive/libarchive/archive_acl.c b/contrib/libarchive/libarchive/archive_acl.c >index 254324c71309..bbb085afe7af 100644 >--- a/contrib/libarchive/libarchive/archive_acl.c >+++ b/contrib/libarchive/libarchive/archive_acl.c >@@ -56,7 +56,7 @@ static int archive_acl_add_entry_len_l(struct archive_acl *acl, > int type, int permset, int tag, int id, const char *name, > size_t len, struct archive_string_conv *sc); > static int archive_acl_text_want_type(struct archive_acl *acl, int flags); >-static ssize_t archive_acl_text_len(struct archive_acl *acl, int want_type, >+static size_t archive_acl_text_len(struct archive_acl *acl, int want_type, > int flags, int wide, struct archive *a, > struct archive_string_conv *sc); > static int isint_w(const wchar_t *start, const wchar_t *end, int *result); >@@ -76,7 +76,7 @@ static int is_nfs4_flags(const char *start, const char *end, > int *result); > static int is_nfs4_perms(const char *start, const char *end, > int *result); >-static void next_field(const char **p, const char **start, >+static void next_field(const char **p, size_t *l, const char **start, > const char **end, char *sep); > static void append_entry(char **p, const char *prefix, int type, > int tag, int flags, const char *name, int perm, int id); >@@ -346,7 +346,7 @@ acl_new_entry(struct archive_acl *acl, > } > > /* Add a new entry to the end of the list. */ >- ap = (struct archive_acl_entry *)calloc(1, sizeof(*ap)); >+ ap = calloc(1, sizeof(*ap)); > if (ap == NULL) > return (NULL); > if (aq == NULL) >@@ -528,14 +528,14 @@ archive_acl_text_want_type(struct archive_acl *acl, int flags) > /* > * Calculate ACL text string length > */ >-static ssize_t >+static size_t > archive_acl_text_len(struct archive_acl *acl, int want_type, int flags, > int wide, struct archive *a, struct archive_string_conv *sc) { > struct archive_acl_entry *ap; > const char *name; > const wchar_t *wname; > int count, idlen, tmp, r; >- ssize_t length; >+ size_t length; > size_t len; > > count = 0; >@@ -664,7 +664,7 @@ archive_acl_to_text_w(struct archive_acl *acl, ssize_t *text_len, int flags, > struct archive *a) > { > int count; >- ssize_t length; >+ size_t length; > size_t len; > const wchar_t *wname; > const wchar_t *prefix; >@@ -693,7 +693,7 @@ archive_acl_to_text_w(struct archive_acl *acl, ssize_t *text_len, int flags, > separator = L'\n'; > > /* Now, allocate the string and actually populate it. */ >- wp = ws = (wchar_t *)malloc(length * sizeof(wchar_t)); >+ wp = ws = malloc(length * sizeof(*wp)); > if (wp == NULL) { > if (errno == ENOMEM) > __archive_errx(1, "No memory"); >@@ -755,7 +755,7 @@ archive_acl_to_text_w(struct archive_acl *acl, ssize_t *text_len, int flags, > > len = wcslen(ws); > >- if ((ssize_t)len > (length - 1)) >+ if (len > length - 1) > __archive_errx(1, "Buffer overrun"); > > if (text_len != NULL) >@@ -897,7 +897,7 @@ archive_acl_to_text_l(struct archive_acl *acl, ssize_t *text_len, int flags, > struct archive_string_conv *sc) > { > int count; >- ssize_t length; >+ size_t length; > size_t len; > const char *name; > const char *prefix; >@@ -926,7 +926,7 @@ archive_acl_to_text_l(struct archive_acl *acl, ssize_t *text_len, int flags, > separator = '\n'; > > /* Now, allocate the string and actually populate it. */ >- p = s = (char *)malloc(length * sizeof(char)); >+ p = s = malloc(length * sizeof(*p)); > if (p == NULL) { > if (errno == ENOMEM) > __archive_errx(1, "No memory"); >@@ -990,7 +990,7 @@ archive_acl_to_text_l(struct archive_acl *acl, ssize_t *text_len, int flags, > > len = strlen(s); > >- if ((ssize_t)len > (length - 1)) >+ if (len > length - 1) > __archive_errx(1, "Buffer overrun"); > > if (text_len != NULL) >@@ -1619,6 +1619,13 @@ next_field_w(const wchar_t **wp, const wchar_t **start, > int > archive_acl_from_text_l(struct archive_acl *acl, const char *text, > int want_type, struct archive_string_conv *sc) >+{ >+ return archive_acl_from_text_nl(acl, text, strlen(text), want_type, sc); >+} >+ >+int >+archive_acl_from_text_nl(struct archive_acl *acl, const char *text, >+ size_t length, int want_type, struct archive_string_conv *sc) > { > struct { > const char *start; >@@ -1649,7 +1656,7 @@ archive_acl_from_text_l(struct archive_acl *acl, const char *text, > ret = ARCHIVE_OK; > types = 0; > >- while (text != NULL && *text != '\0') { >+ while (text != NULL && length > 0 && *text != '\0') { > /* > * Parse the fields out of the next entry, > * advance 'text' to start of next entry. >@@ -1657,7 +1664,7 @@ archive_acl_from_text_l(struct archive_acl *acl, const char *text, > fields = 0; > do { > const char *start, *end; >- next_field(&text, &start, &end, &sep); >+ next_field(&text, &length, &start, &end, &sep); > if (fields < numfields) { > field[fields].start = start; > field[fields].end = end; >@@ -2047,7 +2054,7 @@ is_nfs4_flags(const char *start, const char *end, int *permset) > } > > /* >- * Match "[:whitespace:]*(.*)[:whitespace:]*[:,\n]". *wp is updated >+ * Match "[:whitespace:]*(.*)[:whitespace:]*[:,\n]". *p is updated > * to point to just after the separator. *start points to the first > * character of the matched text and *end just after the last > * character of the matched identifier. In particular *end - *start >@@ -2055,42 +2062,42 @@ is_nfs4_flags(const char *start, const char *end, int *permset) > * whitespace. > */ > static void >-next_field(const char **p, const char **start, >+next_field(const char **p, size_t *l, const char **start, > const char **end, char *sep) > { > /* Skip leading whitespace to find start of field. */ >- while (**p == ' ' || **p == '\t' || **p == '\n') { >+ while (*l > 0 && (**p == ' ' || **p == '\t' || **p == '\n')) { > (*p)++; >+ (*l)--; > } > *start = *p; > >- /* Scan for the separator. */ >- while (**p != '\0' && **p != ',' && **p != ':' && **p != '\n' && >- **p != '#') { >+ /* Locate end of field, trim trailing whitespace if necessary */ >+ while (*l > 0 && **p != ' ' && **p != '\t' && **p != '\n' && **p != ',' && **p != ':' && **p != '#') { > (*p)++; >+ (*l)--; > } >- *sep = **p; >+ *end = *p; > >- /* Locate end of field, trim trailing whitespace if necessary */ >- if (*p == *start) { >- *end = *p; >- } else { >- *end = *p - 1; >- while (**end == ' ' || **end == '\t' || **end == '\n') { >- (*end)--; >- } >- (*end)++; >+ /* Scan for the separator. */ >+ while (*l > 0 && **p != ',' && **p != ':' && **p != '\n' && **p != '#') { >+ (*p)++; >+ (*l)--; > } >+ *sep = **p; > > /* Handle in-field comments */ > if (*sep == '#') { >- while (**p != '\0' && **p != ',' && **p != '\n') { >+ while (*l > 0 && **p != ',' && **p != '\n') { > (*p)++; >+ (*l)--; > } > *sep = **p; > } > >- /* Adjust scanner location. */ >- if (**p != '\0') >+ /* Skip separator. */ >+ if (*l > 0) { > (*p)++; >+ (*l)--; >+ } > } >diff --git a/contrib/libarchive/libarchive/archive_acl_private.h b/contrib/libarchive/libarchive/archive_acl_private.h >index 750b4dd7d898..2c9b5053430e 100644 >--- a/contrib/libarchive/libarchive/archive_acl_private.h >+++ b/contrib/libarchive/libarchive/archive_acl_private.h >@@ -77,5 +77,7 @@ int archive_acl_from_text_w(struct archive_acl *, const wchar_t * /* wtext */, > int /* type */); > int archive_acl_from_text_l(struct archive_acl *, const char * /* text */, > int /* type */, struct archive_string_conv *); >+int archive_acl_from_text_nl(struct archive_acl *, const char * /* text */, >+ size_t /* size of text */, int /* type */, struct archive_string_conv *); > > #endif /* ARCHIVE_ENTRY_PRIVATE_H_INCLUDED */ >diff --git a/contrib/libarchive/libarchive/archive_crc32.h b/contrib/libarchive/libarchive/archive_crc32.h >index 98a4e2cf8f7f..d86a507ce78c 100644 >--- a/contrib/libarchive/libarchive/archive_crc32.h >+++ b/contrib/libarchive/libarchive/archive_crc32.h >@@ -30,6 +30,8 @@ > #error This header is only to be used internally to libarchive. > #endif > >+#include <stddef.h> >+ > /* > * When zlib is unavailable, we should still be able to validate > * uncompressed zip archives. That requires us to be able to compute >@@ -46,6 +48,9 @@ crc32(unsigned long crc, const void *_p, size_t len) > static volatile int crc_tbl_inited = 0; > static unsigned long crc_tbl[256]; > >+ if (_p == NULL) >+ return (0); >+ > if (!crc_tbl_inited) { > for (b = 0; b < 256; ++b) { > crc2 = b; >diff --git a/contrib/libarchive/libarchive/archive_cryptor.c b/contrib/libarchive/libarchive/archive_cryptor.c >index 437dba06be62..1825af4dc510 100644 >--- a/contrib/libarchive/libarchive/archive_cryptor.c >+++ b/contrib/libarchive/libarchive/archive_cryptor.c >@@ -57,7 +57,7 @@ pbkdf2_sha1(const char *pw, size_t pw_len, const uint8_t *salt, > return 0; > } > >-#elif defined(_WIN32) && !defined(__CYGWIN__) && defined(HAVE_BCRYPT_H) >+#elif defined(_WIN32) && !defined(__CYGWIN__) && defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA > #ifdef _MSC_VER > #pragma comment(lib, "Bcrypt.lib") > #endif >@@ -197,7 +197,7 @@ aes_ctr_release(archive_crypto_ctx *ctx) > return 0; > } > >-#elif defined(_WIN32) && !defined(__CYGWIN__) && defined(HAVE_BCRYPT_H) >+#elif defined(_WIN32) && !defined(__CYGWIN__) && defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA > > static int > aes_ctr_init(archive_crypto_ctx *ctx, const uint8_t *key, size_t key_len) >diff --git a/contrib/libarchive/libarchive/archive_cryptor_private.h b/contrib/libarchive/libarchive/archive_cryptor_private.h >index 16b6d16ff23c..c13f29260a07 100644 >--- a/contrib/libarchive/libarchive/archive_cryptor_private.h >+++ b/contrib/libarchive/libarchive/archive_cryptor_private.h >@@ -62,7 +62,7 @@ typedef struct { > unsigned encr_pos; > } archive_crypto_ctx; > >-#elif defined(_WIN32) && !defined(__CYGWIN__) && defined(HAVE_BCRYPT_H) >+#elif defined(_WIN32) && !defined(__CYGWIN__) && defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA > #include <bcrypt.h> > > /* Common in other bcrypt implementations, but missing from VS2008. */ >diff --git a/contrib/libarchive/libarchive/archive_entry.c b/contrib/libarchive/libarchive/archive_entry.c >index e017b0fd1ebc..a2538dbb0eb7 100644 >--- a/contrib/libarchive/libarchive/archive_entry.c >+++ b/contrib/libarchive/libarchive/archive_entry.c >@@ -118,7 +118,7 @@ > static char * ae_fflagstostr(unsigned long bitset, unsigned long bitclear); > static const wchar_t *ae_wcstofflags(const wchar_t *stringp, > unsigned long *setp, unsigned long *clrp); >-static const char *ae_strtofflags(const char *stringp, >+static const char *ae_strtofflags(const char *stringp, size_t length, > unsigned long *setp, unsigned long *clrp); > > #ifndef HAVE_WCSCPY >@@ -157,10 +157,9 @@ archive_entry_clear(struct archive_entry *entry) > return (NULL); > archive_mstring_clean(&entry->ae_fflags_text); > archive_mstring_clean(&entry->ae_gname); >- archive_mstring_clean(&entry->ae_hardlink); >+ archive_mstring_clean(&entry->ae_linkname); > archive_mstring_clean(&entry->ae_pathname); > archive_mstring_clean(&entry->ae_sourcepath); >- archive_mstring_clean(&entry->ae_symlink); > archive_mstring_clean(&entry->ae_uname); > archive_entry_copy_mac_metadata(entry, NULL, 0); > archive_acl_clear(&entry->acl); >@@ -195,10 +194,9 @@ archive_entry_clone(struct archive_entry *entry) > * character sets are different? XXX */ > archive_mstring_copy(&entry2->ae_fflags_text, &entry->ae_fflags_text); > archive_mstring_copy(&entry2->ae_gname, &entry->ae_gname); >- archive_mstring_copy(&entry2->ae_hardlink, &entry->ae_hardlink); >+ archive_mstring_copy(&entry2->ae_linkname, &entry->ae_linkname); > archive_mstring_copy(&entry2->ae_pathname, &entry->ae_pathname); > archive_mstring_copy(&entry2->ae_sourcepath, &entry->ae_sourcepath); >- archive_mstring_copy(&entry2->ae_symlink, &entry->ae_symlink); > entry2->ae_set = entry->ae_set; > archive_mstring_copy(&entry2->ae_uname, &entry->ae_uname); > >@@ -265,7 +263,7 @@ archive_entry_new2(struct archive *a) > { > struct archive_entry *entry; > >- entry = (struct archive_entry *)calloc(1, sizeof(*entry)); >+ entry = calloc(1, sizeof(*entry)); > if (entry == NULL) > return (NULL); > entry->archive = a; >@@ -477,6 +475,15 @@ _archive_entry_gname_l(struct archive_entry *entry, > return (archive_mstring_get_mbs_l(entry->archive, &entry->ae_gname, p, len, sc)); > } > >+void >+archive_entry_set_link_to_hardlink(struct archive_entry *entry) >+{ >+ if ((entry->ae_set & AE_SET_SYMLINK) != 0) { >+ entry->ae_set &= ~AE_SET_SYMLINK; >+ } >+ entry->ae_set |= AE_SET_HARDLINK; >+} >+ > const char * > archive_entry_hardlink(struct archive_entry *entry) > { >@@ -484,7 +491,7 @@ archive_entry_hardlink(struct archive_entry *entry) > if ((entry->ae_set & AE_SET_HARDLINK) == 0) > return (NULL); > if (archive_mstring_get_mbs( >- entry->archive, &entry->ae_hardlink, &p) == 0) >+ entry->archive, &entry->ae_linkname, &p) == 0) > return (p); > if (errno == ENOMEM) > __archive_errx(1, "No memory"); >@@ -498,7 +505,7 @@ archive_entry_hardlink_utf8(struct archive_entry *entry) > if ((entry->ae_set & AE_SET_HARDLINK) == 0) > return (NULL); > if (archive_mstring_get_utf8( >- entry->archive, &entry->ae_hardlink, &p) == 0) >+ entry->archive, &entry->ae_linkname, &p) == 0) > return (p); > if (errno == ENOMEM) > __archive_errx(1, "No memory"); >@@ -512,13 +519,19 @@ archive_entry_hardlink_w(struct archive_entry *entry) > if ((entry->ae_set & AE_SET_HARDLINK) == 0) > return (NULL); > if (archive_mstring_get_wcs( >- entry->archive, &entry->ae_hardlink, &p) == 0) >+ entry->archive, &entry->ae_linkname, &p) == 0) > return (p); > if (errno == ENOMEM) > __archive_errx(1, "No memory"); > return (NULL); > } > >+int >+archive_entry_hardlink_is_set(struct archive_entry *entry) >+{ >+ return (entry->ae_set & AE_SET_HARDLINK) != 0; >+} >+ > int > _archive_entry_hardlink_l(struct archive_entry *entry, > const char **p, size_t *len, struct archive_string_conv *sc) >@@ -528,7 +541,7 @@ _archive_entry_hardlink_l(struct archive_entry *entry, > *len = 0; > return (0); > } >- return (archive_mstring_get_mbs_l(entry->archive, &entry->ae_hardlink, p, len, sc)); >+ return (archive_mstring_get_mbs_l(entry->archive, &entry->ae_linkname, p, len, sc)); > } > > la_int64_t >@@ -648,32 +661,50 @@ archive_entry_perm_is_set(struct archive_entry *entry) > return (entry->ae_set & AE_SET_PERM); > } > >+int >+archive_entry_rdev_is_set(struct archive_entry *entry) >+{ >+ return (entry->ae_set & AE_SET_RDEV); >+} >+ > dev_t > archive_entry_rdev(struct archive_entry *entry) > { >- if (entry->ae_stat.aest_rdev_is_broken_down) >- return ae_makedev(entry->ae_stat.aest_rdevmajor, >- entry->ae_stat.aest_rdevminor); >- else >- return (entry->ae_stat.aest_rdev); >+ if (archive_entry_rdev_is_set(entry)) { >+ if (entry->ae_stat.aest_rdev_is_broken_down) >+ return ae_makedev(entry->ae_stat.aest_rdevmajor, >+ entry->ae_stat.aest_rdevminor); >+ else >+ return (entry->ae_stat.aest_rdev); >+ } else { >+ return 0; >+ } > } > > dev_t > archive_entry_rdevmajor(struct archive_entry *entry) > { >- if (entry->ae_stat.aest_rdev_is_broken_down) >- return (entry->ae_stat.aest_rdevmajor); >- else >- return major(entry->ae_stat.aest_rdev); >+ if (archive_entry_rdev_is_set(entry)) { >+ if (entry->ae_stat.aest_rdev_is_broken_down) >+ return (entry->ae_stat.aest_rdevmajor); >+ else >+ return major(entry->ae_stat.aest_rdev); >+ } else { >+ return 0; >+ } > } > > dev_t > archive_entry_rdevminor(struct archive_entry *entry) > { >- if (entry->ae_stat.aest_rdev_is_broken_down) >- return (entry->ae_stat.aest_rdevminor); >- else >- return minor(entry->ae_stat.aest_rdev); >+ if (archive_entry_rdev_is_set(entry)) { >+ if (entry->ae_stat.aest_rdev_is_broken_down) >+ return (entry->ae_stat.aest_rdevminor); >+ else >+ return minor(entry->ae_stat.aest_rdev); >+ } else { >+ return 0; >+ } > } > > la_int64_t >@@ -717,13 +748,22 @@ archive_entry_symlink(struct archive_entry *entry) > if ((entry->ae_set & AE_SET_SYMLINK) == 0) > return (NULL); > if (archive_mstring_get_mbs( >- entry->archive, &entry->ae_symlink, &p) == 0) >+ entry->archive, &entry->ae_linkname, &p) == 0) > return (p); > if (errno == ENOMEM) > __archive_errx(1, "No memory"); > return (NULL); > } > >+void >+archive_entry_set_link_to_symlink(struct archive_entry *entry) >+{ >+ if ((entry->ae_set & AE_SET_HARDLINK) != 0) { >+ entry->ae_set &= ~AE_SET_HARDLINK; >+ } >+ entry->ae_set |= AE_SET_SYMLINK; >+} >+ > int > archive_entry_symlink_type(struct archive_entry *entry) > { >@@ -737,7 +777,7 @@ archive_entry_symlink_utf8(struct archive_entry *entry) > if ((entry->ae_set & AE_SET_SYMLINK) == 0) > return (NULL); > if (archive_mstring_get_utf8( >- entry->archive, &entry->ae_symlink, &p) == 0) >+ entry->archive, &entry->ae_linkname, &p) == 0) > return (p); > if (errno == ENOMEM) > __archive_errx(1, "No memory"); >@@ -751,7 +791,7 @@ archive_entry_symlink_w(struct archive_entry *entry) > if ((entry->ae_set & AE_SET_SYMLINK) == 0) > return (NULL); > if (archive_mstring_get_wcs( >- entry->archive, &entry->ae_symlink, &p) == 0) >+ entry->archive, &entry->ae_linkname, &p) == 0) > return (p); > if (errno == ENOMEM) > __archive_errx(1, "No memory"); >@@ -767,7 +807,7 @@ _archive_entry_symlink_l(struct archive_entry *entry, > *len = 0; > return (0); > } >- return (archive_mstring_get_mbs_l(entry->archive, &entry->ae_symlink, p, len, sc)); >+ return (archive_mstring_get_mbs_l(entry->archive, &entry->ae_linkname, p, len, sc)); > } > > la_int64_t >@@ -864,10 +904,17 @@ archive_entry_set_fflags(struct archive_entry *entry, > > const char * > archive_entry_copy_fflags_text(struct archive_entry *entry, >- const char *flags) >+ const char *flags) >+{ >+ return archive_entry_copy_fflags_text_len(entry, flags, strlen(flags)); >+} >+ >+const char * >+archive_entry_copy_fflags_text_len(struct archive_entry *entry, >+ const char *flags, size_t flags_length) > { >- archive_mstring_copy_mbs(&entry->ae_fflags_text, flags); >- return (ae_strtofflags(flags, >+ archive_mstring_copy_mbs_len(&entry->ae_fflags_text, flags, flags_length); >+ return (ae_strtofflags(flags, flags_length, > &entry->ae_fflags_set, &entry->ae_fflags_clear)); > } > >@@ -883,6 +930,9 @@ archive_entry_copy_fflags_text_w(struct archive_entry *entry, > void > archive_entry_set_gid(struct archive_entry *entry, la_int64_t g) > { >+ if (g < 0) { >+ g = 0; >+ } > entry->stat_valid = 0; > entry->ae_stat.aest_gid = g; > entry->ae_set |= AE_SET_GID; >@@ -933,6 +983,9 @@ _archive_entry_copy_gname_l(struct archive_entry *entry, > void > archive_entry_set_ino(struct archive_entry *entry, la_int64_t ino) > { >+ if (ino < 0) { >+ ino = 0; >+ } > entry->stat_valid = 0; > entry->ae_set |= AE_SET_INO; > entry->ae_stat.aest_ino = ino; >@@ -941,6 +994,9 @@ archive_entry_set_ino(struct archive_entry *entry, la_int64_t ino) > void > archive_entry_set_ino64(struct archive_entry *entry, la_int64_t ino) > { >+ if (ino < 0) { >+ ino = 0; >+ } > entry->stat_valid = 0; > entry->ae_set |= AE_SET_INO; > entry->ae_stat.aest_ino = ino; >@@ -949,17 +1005,24 @@ archive_entry_set_ino64(struct archive_entry *entry, la_int64_t ino) > void > archive_entry_set_hardlink(struct archive_entry *entry, const char *target) > { >- archive_mstring_copy_mbs(&entry->ae_hardlink, target); >- if (target != NULL) >- entry->ae_set |= AE_SET_HARDLINK; >- else >+ if (target == NULL) { > entry->ae_set &= ~AE_SET_HARDLINK; >+ if (entry->ae_set & AE_SET_SYMLINK) { >+ return; >+ } >+ } else { >+ entry->ae_set |= AE_SET_HARDLINK; >+ } >+ entry->ae_set &= ~AE_SET_SYMLINK; >+ archive_mstring_copy_mbs(&entry->ae_linkname, target); > } > > void > archive_entry_set_hardlink_utf8(struct archive_entry *entry, const char *target) > { >- archive_mstring_copy_utf8(&entry->ae_hardlink, target); >+ if (target == NULL && (entry->ae_set & AE_SET_SYMLINK)) >+ return; >+ archive_mstring_copy_utf8(&entry->ae_linkname, target); > if (target != NULL) > entry->ae_set |= AE_SET_HARDLINK; > else >@@ -969,7 +1032,9 @@ archive_entry_set_hardlink_utf8(struct archive_entry *entry, const char *target) > void > archive_entry_copy_hardlink(struct archive_entry *entry, const char *target) > { >- archive_mstring_copy_mbs(&entry->ae_hardlink, target); >+ if (target == NULL && (entry->ae_set & AE_SET_SYMLINK)) >+ return; >+ archive_mstring_copy_mbs(&entry->ae_linkname, target); > if (target != NULL) > entry->ae_set |= AE_SET_HARDLINK; > else >@@ -979,7 +1044,9 @@ archive_entry_copy_hardlink(struct archive_entry *entry, const char *target) > void > archive_entry_copy_hardlink_w(struct archive_entry *entry, const wchar_t *target) > { >- archive_mstring_copy_wcs(&entry->ae_hardlink, target); >+ if (target == NULL && (entry->ae_set & AE_SET_SYMLINK)) >+ return; >+ archive_mstring_copy_wcs(&entry->ae_linkname, target); > if (target != NULL) > entry->ae_set |= AE_SET_HARDLINK; > else >@@ -989,12 +1056,14 @@ archive_entry_copy_hardlink_w(struct archive_entry *entry, const wchar_t *target > int > archive_entry_update_hardlink_utf8(struct archive_entry *entry, const char *target) > { >+ if (target == NULL && (entry->ae_set & AE_SET_SYMLINK)) >+ return (0); > if (target != NULL) > entry->ae_set |= AE_SET_HARDLINK; > else > entry->ae_set &= ~AE_SET_HARDLINK; > if (archive_mstring_update_utf8(entry->archive, >- &entry->ae_hardlink, target) == 0) >+ &entry->ae_linkname, target) == 0) > return (1); > if (errno == ENOMEM) > __archive_errx(1, "No memory"); >@@ -1007,7 +1076,9 @@ _archive_entry_copy_hardlink_l(struct archive_entry *entry, > { > int r; > >- r = archive_mstring_copy_mbs_len_l(&entry->ae_hardlink, >+ if (target == NULL && (entry->ae_set & AE_SET_SYMLINK)) >+ return (0); >+ r = archive_mstring_copy_mbs_len_l(&entry->ae_linkname, > target, len, sc); > if (target != NULL && r == 0) > entry->ae_set |= AE_SET_HARDLINK; >@@ -1098,51 +1169,50 @@ archive_entry_set_devminor(struct archive_entry *entry, dev_t m) > void > archive_entry_set_link(struct archive_entry *entry, const char *target) > { >- if (entry->ae_set & AE_SET_SYMLINK) >- archive_mstring_copy_mbs(&entry->ae_symlink, target); >- else >- archive_mstring_copy_mbs(&entry->ae_hardlink, target); >+ archive_mstring_copy_mbs(&entry->ae_linkname, target); >+ if ((entry->ae_set & AE_SET_SYMLINK) == 0) { >+ entry->ae_set |= AE_SET_HARDLINK; >+ } > } > > void > archive_entry_set_link_utf8(struct archive_entry *entry, const char *target) > { >- if (entry->ae_set & AE_SET_SYMLINK) >- archive_mstring_copy_utf8(&entry->ae_symlink, target); >- else >- archive_mstring_copy_utf8(&entry->ae_hardlink, target); >+ archive_mstring_copy_utf8(&entry->ae_linkname, target); >+ if ((entry->ae_set & AE_SET_SYMLINK) == 0) { >+ entry->ae_set |= AE_SET_HARDLINK; >+ } > } > > /* Set symlink if symlink is already set, else set hardlink. */ > void > archive_entry_copy_link(struct archive_entry *entry, const char *target) > { >- if (entry->ae_set & AE_SET_SYMLINK) >- archive_mstring_copy_mbs(&entry->ae_symlink, target); >- else >- archive_mstring_copy_mbs(&entry->ae_hardlink, target); >+ archive_mstring_copy_mbs(&entry->ae_linkname, target); >+ if ((entry->ae_set & AE_SET_SYMLINK) == 0) { >+ entry->ae_set |= AE_SET_HARDLINK; >+ } > } > > /* Set symlink if symlink is already set, else set hardlink. */ > void > archive_entry_copy_link_w(struct archive_entry *entry, const wchar_t *target) > { >- if (entry->ae_set & AE_SET_SYMLINK) >- archive_mstring_copy_wcs(&entry->ae_symlink, target); >- else >- archive_mstring_copy_wcs(&entry->ae_hardlink, target); >+ archive_mstring_copy_wcs(&entry->ae_linkname, target); >+ if ((entry->ae_set & AE_SET_SYMLINK) == 0) { >+ entry->ae_set |= AE_SET_HARDLINK; >+ } > } > > int > archive_entry_update_link_utf8(struct archive_entry *entry, const char *target) > { > int r; >- if (entry->ae_set & AE_SET_SYMLINK) >- r = archive_mstring_update_utf8(entry->archive, >- &entry->ae_symlink, target); >- else >- r = archive_mstring_update_utf8(entry->archive, >- &entry->ae_hardlink, target); >+ r = archive_mstring_update_utf8(entry->archive, >+ &entry->ae_linkname, target); >+ if ((entry->ae_set & AE_SET_SYMLINK) == 0) { >+ entry->ae_set |= AE_SET_HARDLINK; >+ } > if (r == 0) > return (1); > if (errno == ENOMEM) >@@ -1156,12 +1226,11 @@ _archive_entry_copy_link_l(struct archive_entry *entry, > { > int r; > >- if (entry->ae_set & AE_SET_SYMLINK) >- r = archive_mstring_copy_mbs_len_l(&entry->ae_symlink, >- target, len, sc); >- else >- r = archive_mstring_copy_mbs_len_l(&entry->ae_hardlink, >+ r = archive_mstring_copy_mbs_len_l(&entry->ae_linkname, > target, len, sc); >+ if ((entry->ae_set & AE_SET_SYMLINK) == 0) { >+ entry->ae_set |= AE_SET_HARDLINK; >+ } > return (r); > } > >@@ -1255,6 +1324,9 @@ archive_entry_set_rdev(struct archive_entry *entry, dev_t m) > entry->stat_valid = 0; > entry->ae_stat.aest_rdev = m; > entry->ae_stat.aest_rdev_is_broken_down = 0; >+ entry->ae_stat.aest_rdevmajor = 0; >+ entry->ae_stat.aest_rdevminor = 0; >+ entry->ae_set |= AE_SET_RDEV; > } > > void >@@ -1262,7 +1334,9 @@ archive_entry_set_rdevmajor(struct archive_entry *entry, dev_t m) > { > entry->stat_valid = 0; > entry->ae_stat.aest_rdev_is_broken_down = 1; >+ entry->ae_stat.aest_rdev = 0; > entry->ae_stat.aest_rdevmajor = m; >+ entry->ae_set |= AE_SET_RDEV; > } > > void >@@ -1270,12 +1344,17 @@ archive_entry_set_rdevminor(struct archive_entry *entry, dev_t m) > { > entry->stat_valid = 0; > entry->ae_stat.aest_rdev_is_broken_down = 1; >+ entry->ae_stat.aest_rdev = 0; > entry->ae_stat.aest_rdevminor = m; >+ entry->ae_set |= AE_SET_RDEV; > } > > void > archive_entry_set_size(struct archive_entry *entry, la_int64_t s) > { >+ if (s < 0) { >+ s = 0; >+ } > entry->stat_valid = 0; > entry->ae_stat.aest_size = s; > entry->ae_set |= AE_SET_SIZE; >@@ -1303,11 +1382,14 @@ archive_entry_copy_sourcepath_w(struct archive_entry *entry, const wchar_t *path > void > archive_entry_set_symlink(struct archive_entry *entry, const char *linkname) > { >- archive_mstring_copy_mbs(&entry->ae_symlink, linkname); >- if (linkname != NULL) >- entry->ae_set |= AE_SET_SYMLINK; >- else >+ if (linkname == NULL && (entry->ae_set & AE_SET_HARDLINK)) >+ return; >+ archive_mstring_copy_mbs(&entry->ae_linkname, linkname); >+ entry->ae_set &= ~AE_SET_HARDLINK; >+ if (linkname == NULL) > entry->ae_set &= ~AE_SET_SYMLINK; >+ else >+ entry->ae_set |= AE_SET_SYMLINK; > } > > void >@@ -1319,42 +1401,54 @@ archive_entry_set_symlink_type(struct archive_entry *entry, int type) > void > archive_entry_set_symlink_utf8(struct archive_entry *entry, const char *linkname) > { >- archive_mstring_copy_utf8(&entry->ae_symlink, linkname); >- if (linkname != NULL) >- entry->ae_set |= AE_SET_SYMLINK; >- else >+ if (linkname == NULL && (entry->ae_set & AE_SET_HARDLINK)) >+ return; >+ archive_mstring_copy_utf8(&entry->ae_linkname, linkname); >+ entry->ae_set &= ~AE_SET_HARDLINK; >+ if (linkname == NULL) > entry->ae_set &= ~AE_SET_SYMLINK; >+ else >+ entry->ae_set |= AE_SET_SYMLINK; > } > > void > archive_entry_copy_symlink(struct archive_entry *entry, const char *linkname) > { >- archive_mstring_copy_mbs(&entry->ae_symlink, linkname); >- if (linkname != NULL) >- entry->ae_set |= AE_SET_SYMLINK; >- else >+ if (linkname == NULL && (entry->ae_set & AE_SET_HARDLINK)) >+ return; >+ archive_mstring_copy_mbs(&entry->ae_linkname, linkname); >+ entry->ae_set &= ~AE_SET_HARDLINK; >+ if (linkname == NULL) > entry->ae_set &= ~AE_SET_SYMLINK; >+ else >+ entry->ae_set |= AE_SET_SYMLINK; > } > > void > archive_entry_copy_symlink_w(struct archive_entry *entry, const wchar_t *linkname) > { >- archive_mstring_copy_wcs(&entry->ae_symlink, linkname); >- if (linkname != NULL) >- entry->ae_set |= AE_SET_SYMLINK; >- else >+ if (linkname == NULL && (entry->ae_set & AE_SET_HARDLINK)) >+ return; >+ archive_mstring_copy_wcs(&entry->ae_linkname, linkname); >+ entry->ae_set &= ~AE_SET_HARDLINK; >+ if (linkname == NULL) > entry->ae_set &= ~AE_SET_SYMLINK; >+ else >+ entry->ae_set |= AE_SET_SYMLINK; > } > > int > archive_entry_update_symlink_utf8(struct archive_entry *entry, const char *linkname) > { >- if (linkname != NULL) >- entry->ae_set |= AE_SET_SYMLINK; >- else >+ if (linkname == NULL && (entry->ae_set & AE_SET_HARDLINK)) >+ return (0); >+ entry->ae_set &= ~AE_SET_HARDLINK; >+ if (linkname == NULL) > entry->ae_set &= ~AE_SET_SYMLINK; >+ else >+ entry->ae_set |= AE_SET_SYMLINK; > if (archive_mstring_update_utf8(entry->archive, >- &entry->ae_symlink, linkname) == 0) >+ &entry->ae_linkname, linkname) == 0) > return (1); > if (errno == ENOMEM) > __archive_errx(1, "No memory"); >@@ -1367,18 +1461,24 @@ _archive_entry_copy_symlink_l(struct archive_entry *entry, > { > int r; > >- r = archive_mstring_copy_mbs_len_l(&entry->ae_symlink, >+ if (linkname == NULL && (entry->ae_set & AE_SET_HARDLINK)) >+ return (0); >+ entry->ae_set &= ~AE_SET_HARDLINK; >+ r = archive_mstring_copy_mbs_len_l(&entry->ae_linkname, > linkname, len, sc); >- if (linkname != NULL && r == 0) >- entry->ae_set |= AE_SET_SYMLINK; >- else >+ if (linkname == NULL || r != 0) > entry->ae_set &= ~AE_SET_SYMLINK; >+ else >+ entry->ae_set |= AE_SET_SYMLINK; > return (r); > } > > void > archive_entry_set_uid(struct archive_entry *entry, la_int64_t u) > { >+ if (u < 0) { >+ u = 0; >+ } > entry->stat_valid = 0; > entry->ae_stat.aest_uid = u; > entry->ae_set |= AE_SET_UID; >@@ -1995,7 +2095,7 @@ ae_fflagstostr(unsigned long bitset, unsigned long bitclear) > > if (length == 0) > return (NULL); >- string = (char *)malloc(length); >+ string = malloc(length); > if (string == NULL) > return (NULL); > >@@ -2031,7 +2131,7 @@ ae_fflagstostr(unsigned long bitset, unsigned long bitclear) > * provided string. > */ > static const char * >-ae_strtofflags(const char *s, unsigned long *setp, unsigned long *clrp) >+ae_strtofflags(const char *s, size_t l, unsigned long *setp, unsigned long *clrp) > { > const char *start, *end; > const struct flag *flag; >@@ -2042,15 +2142,19 @@ ae_strtofflags(const char *s, unsigned long *setp, unsigned long *clrp) > start = s; > failed = NULL; > /* Find start of first token. */ >- while (*start == '\t' || *start == ' ' || *start == ',') >+ while (l > 0 && (*start == '\t' || *start == ' ' || *start == ',')) { > start++; >- while (*start != '\0') { >+ l--; >+ } >+ while (l > 0) { > size_t length; > /* Locate end of token. */ > end = start; >- while (*end != '\0' && *end != '\t' && >- *end != ' ' && *end != ',') >+ while (l > 0 && *end != '\t' && >+ *end != ' ' && *end != ',') { > end++; >+ l--; >+ } > length = end - start; > for (flag = fileflags; flag->name != NULL; flag++) { > size_t flag_length = strlen(flag->name); >@@ -2074,8 +2178,10 @@ ae_strtofflags(const char *s, unsigned long *setp, unsigned long *clrp) > > /* Find start of next token. */ > start = end; >- while (*start == '\t' || *start == ' ' || *start == ',') >+ while (l > 0 && (*start == '\t' || *start == ' ' || *start == ',')) { > start++; >+ l--; >+ } > > } > >diff --git a/contrib/libarchive/libarchive/archive_entry.h b/contrib/libarchive/libarchive/archive_entry.h >index 1c59ded7c911..97f5cdafbf90 100644 >--- a/contrib/libarchive/libarchive/archive_entry.h >+++ b/contrib/libarchive/libarchive/archive_entry.h >@@ -28,7 +28,7 @@ > #define ARCHIVE_ENTRY_H_INCLUDED > > /* Note: Compiler will complain if this does not match archive.h! */ >-#define ARCHIVE_VERSION_NUMBER 3007004 >+#define ARCHIVE_VERSION_NUMBER 3007007 > > /* > * Note: archive_entry.h is for use outside of libarchive; the >@@ -259,9 +259,11 @@ __LA_DECL int archive_entry_gid_is_set(struct archive_entry *); > __LA_DECL const char *archive_entry_gname(struct archive_entry *); > __LA_DECL const char *archive_entry_gname_utf8(struct archive_entry *); > __LA_DECL const wchar_t *archive_entry_gname_w(struct archive_entry *); >+__LA_DECL void archive_entry_set_link_to_hardlink(struct archive_entry *); > __LA_DECL const char *archive_entry_hardlink(struct archive_entry *); > __LA_DECL const char *archive_entry_hardlink_utf8(struct archive_entry *); > __LA_DECL const wchar_t *archive_entry_hardlink_w(struct archive_entry *); >+__LA_DECL int archive_entry_hardlink_is_set(struct archive_entry *); > __LA_DECL la_int64_t archive_entry_ino(struct archive_entry *); > __LA_DECL la_int64_t archive_entry_ino64(struct archive_entry *); > __LA_DECL int archive_entry_ino_is_set(struct archive_entry *); >@@ -275,6 +277,7 @@ __LA_DECL const char *archive_entry_pathname_utf8(struct archive_entry *); > __LA_DECL const wchar_t *archive_entry_pathname_w(struct archive_entry *); > __LA_DECL __LA_MODE_T archive_entry_perm(struct archive_entry *); > __LA_DECL int archive_entry_perm_is_set(struct archive_entry *); >+__LA_DECL int archive_entry_rdev_is_set(struct archive_entry *); > __LA_DECL dev_t archive_entry_rdev(struct archive_entry *); > __LA_DECL dev_t archive_entry_rdevmajor(struct archive_entry *); > __LA_DECL dev_t archive_entry_rdevminor(struct archive_entry *); >@@ -283,6 +286,7 @@ __LA_DECL const wchar_t *archive_entry_sourcepath_w(struct archive_entry *); > __LA_DECL la_int64_t archive_entry_size(struct archive_entry *); > __LA_DECL int archive_entry_size_is_set(struct archive_entry *); > __LA_DECL const char *archive_entry_strmode(struct archive_entry *); >+__LA_DECL void archive_entry_set_link_to_symlink(struct archive_entry *); > __LA_DECL const char *archive_entry_symlink(struct archive_entry *); > __LA_DECL const char *archive_entry_symlink_utf8(struct archive_entry *); > __LA_DECL int archive_entry_symlink_type(struct archive_entry *); >@@ -324,6 +328,8 @@ __LA_DECL void archive_entry_set_fflags(struct archive_entry *, > /* Note that all recognized tokens are processed, regardless. */ > __LA_DECL const char *archive_entry_copy_fflags_text(struct archive_entry *, > const char *); >+__LA_DECL const char *archive_entry_copy_fflags_text_len(struct archive_entry *, >+ const char *, size_t); > __LA_DECL const wchar_t *archive_entry_copy_fflags_text_w(struct archive_entry *, > const wchar_t *); > __LA_DECL void archive_entry_set_gid(struct archive_entry *, la_int64_t); >diff --git a/contrib/libarchive/libarchive/archive_entry_link_resolver.c b/contrib/libarchive/libarchive/archive_entry_link_resolver.c >index 6c6173430250..c2fd6895f21e 100644 >--- a/contrib/libarchive/libarchive/archive_entry_link_resolver.c >+++ b/contrib/libarchive/libarchive/archive_entry_link_resolver.c >@@ -201,16 +201,26 @@ archive_entry_linkify(struct archive_entry_linkresolver *res, > le = find_entry(res, *e); > if (le != NULL) { > archive_entry_unset_size(*e); >+#if defined(_WIN32) && !defined(__CYGWIN__) >+ archive_entry_copy_hardlink_w(*e, >+ archive_entry_pathname_w(le->canonical)); >+#else > archive_entry_copy_hardlink(*e, > archive_entry_pathname(le->canonical)); >+#endif > } else > insert_entry(res, *e); > return; > case ARCHIVE_ENTRY_LINKIFY_LIKE_MTREE: > le = find_entry(res, *e); > if (le != NULL) { >+#if defined(_WIN32) && !defined(__CYGWIN__) >+ archive_entry_copy_hardlink_w(*e, >+ archive_entry_pathname_w(le->canonical)); >+#else > archive_entry_copy_hardlink(*e, > archive_entry_pathname(le->canonical)); >+#endif > } else > insert_entry(res, *e); > return; >@@ -229,8 +239,13 @@ archive_entry_linkify(struct archive_entry_linkresolver *res, > le->entry = t; > /* Make the old entry into a hardlink. */ > archive_entry_unset_size(*e); >+#if defined(_WIN32) && !defined(__CYGWIN__) >+ archive_entry_copy_hardlink_w(*e, >+ archive_entry_pathname_w(le->canonical)); >+#else > archive_entry_copy_hardlink(*e, > archive_entry_pathname(le->canonical)); >+#endif > /* If we ran out of links, return the > * final entry as well. */ > if (le->links == 0) { >diff --git a/contrib/libarchive/libarchive/archive_entry_perms.3 b/contrib/libarchive/libarchive/archive_entry_perms.3 >index 0291b7b4988b..4bfbfc3c7815 100644 >--- a/contrib/libarchive/libarchive/archive_entry_perms.3 >+++ b/contrib/libarchive/libarchive/archive_entry_perms.3 >@@ -150,6 +150,7 @@ character strings at the same time. > .Fn archive_entry_set_XXX > is an alias for > .Fn archive_entry_copy_XXX . >+The strings are copied, and don't need to outlive the call. > .Ss File Flags > File flags are transparently converted between a bitmap > representation and a textual format. >diff --git a/contrib/libarchive/libarchive/archive_entry_private.h b/contrib/libarchive/libarchive/archive_entry_private.h >index 3423966c60f3..15f2a8ee284c 100644 >--- a/contrib/libarchive/libarchive/archive_entry_private.h >+++ b/contrib/libarchive/libarchive/archive_entry_private.h >@@ -149,6 +149,7 @@ struct archive_entry { > #define AE_SET_FILETYPE 1024 > #define AE_SET_UID 2048 > #define AE_SET_GID 4096 >+#define AE_SET_RDEV 8192 > > /* > * Use aes here so that we get transparent mbs<->wcs conversions. >@@ -157,9 +158,8 @@ struct archive_entry { > unsigned long ae_fflags_set; /* Bitmap fflags */ > unsigned long ae_fflags_clear; > struct archive_mstring ae_gname; /* Name of owning group */ >- struct archive_mstring ae_hardlink; /* Name of target for hardlink */ >+ struct archive_mstring ae_linkname; /* Name of target for hardlink or symlink */ > struct archive_mstring ae_pathname; /* Name of entry */ >- struct archive_mstring ae_symlink; /* symlink contents */ > struct archive_mstring ae_uname; /* Name of owner */ > > /* Not used within libarchive; useful for some clients. */ >diff --git a/contrib/libarchive/libarchive/archive_entry_sparse.c b/contrib/libarchive/libarchive/archive_entry_sparse.c >index b81684d18730..c430896119fb 100644 >--- a/contrib/libarchive/libarchive/archive_entry_sparse.c >+++ b/contrib/libarchive/libarchive/archive_entry_sparse.c >@@ -76,7 +76,7 @@ archive_entry_sparse_add_entry(struct archive_entry *entry, > } > } > >- if ((sp = (struct ae_sparse *)malloc(sizeof(*sp))) == NULL) >+ if ((sp = malloc(sizeof(*sp))) == NULL) > /* XXX Error XXX */ > return; > >diff --git a/contrib/libarchive/libarchive/archive_entry_xattr.c b/contrib/libarchive/libarchive/archive_entry_xattr.c >index 14848a5ab2c4..b92e1878bc43 100644 >--- a/contrib/libarchive/libarchive/archive_entry_xattr.c >+++ b/contrib/libarchive/libarchive/archive_entry_xattr.c >@@ -90,7 +90,7 @@ archive_entry_xattr_add_entry(struct archive_entry *entry, > { > struct ae_xattr *xp; > >- if ((xp = (struct ae_xattr *)malloc(sizeof(struct ae_xattr))) == NULL) >+ if ((xp = malloc(sizeof(struct ae_xattr))) == NULL) > __archive_errx(1, "Out of memory"); > > if ((xp->name = strdup(name)) == NULL) >diff --git a/contrib/libarchive/libarchive/archive_hmac.c b/contrib/libarchive/libarchive/archive_hmac.c >index edb3bf5abd42..210cca70744d 100644 >--- a/contrib/libarchive/libarchive/archive_hmac.c >+++ b/contrib/libarchive/libarchive/archive_hmac.c >@@ -74,7 +74,7 @@ __hmac_sha1_cleanup(archive_hmac_sha1_ctx *ctx) > memset(ctx, 0, sizeof(*ctx)); > } > >-#elif defined(_WIN32) && !defined(__CYGWIN__) && defined(HAVE_BCRYPT_H) >+#elif defined(_WIN32) && !defined(__CYGWIN__) && defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA > > #ifndef BCRYPT_HASH_REUSABLE_FLAG > # define BCRYPT_HASH_REUSABLE_FLAG 0x00000020 >diff --git a/contrib/libarchive/libarchive/archive_hmac_private.h b/contrib/libarchive/libarchive/archive_hmac_private.h >index d0fda7f9667a..1b24ddd1bc94 100644 >--- a/contrib/libarchive/libarchive/archive_hmac_private.h >+++ b/contrib/libarchive/libarchive/archive_hmac_private.h >@@ -52,7 +52,7 @@ int __libarchive_hmac_build_hack(void); > > typedef CCHmacContext archive_hmac_sha1_ctx; > >-#elif defined(_WIN32) && !defined(__CYGWIN__) && defined(HAVE_BCRYPT_H) >+#elif defined(_WIN32) && !defined(__CYGWIN__) && defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA > #include <bcrypt.h> > > typedef struct { >diff --git a/contrib/libarchive/libarchive/archive_match.c b/contrib/libarchive/libarchive/archive_match.c >index 3ab8eda36038..446417a9a2d4 100644 >--- a/contrib/libarchive/libarchive/archive_match.c >+++ b/contrib/libarchive/libarchive/archive_match.c >@@ -220,7 +220,7 @@ archive_match_new(void) > { > struct archive_match *a; > >- a = (struct archive_match *)calloc(1, sizeof(*a)); >+ a = calloc(1, sizeof(*a)); > if (a == NULL) > return (NULL); > a->archive.magic = ARCHIVE_MATCH_MAGIC; >diff --git a/contrib/libarchive/libarchive/archive_openssl_evp_private.h b/contrib/libarchive/libarchive/archive_openssl_evp_private.h >index 8ac4772808e6..d5ba7b0d60db 100644 >--- a/contrib/libarchive/libarchive/archive_openssl_evp_private.h >+++ b/contrib/libarchive/libarchive/archive_openssl_evp_private.h >@@ -39,7 +39,7 @@ > #include <string.h> /* memset */ > static inline EVP_MD_CTX *EVP_MD_CTX_new(void) > { >- EVP_MD_CTX *ctx = (EVP_MD_CTX *)calloc(1, sizeof(EVP_MD_CTX)); >+ EVP_MD_CTX *ctx = calloc(1, sizeof(EVP_MD_CTX)); > return ctx; > } > >diff --git a/contrib/libarchive/libarchive/archive_openssl_hmac_private.h b/contrib/libarchive/libarchive/archive_openssl_hmac_private.h >index 25c8dda654fc..8ed76260dde9 100644 >--- a/contrib/libarchive/libarchive/archive_openssl_hmac_private.h >+++ b/contrib/libarchive/libarchive/archive_openssl_hmac_private.h >@@ -39,7 +39,7 @@ > #include <string.h> /* memset */ > static inline HMAC_CTX *HMAC_CTX_new(void) > { >- HMAC_CTX *ctx = (HMAC_CTX *)calloc(1, sizeof(HMAC_CTX)); >+ HMAC_CTX *ctx = calloc(1, sizeof(HMAC_CTX)); > return ctx; > } > >diff --git a/contrib/libarchive/libarchive/archive_ppmd7.c b/contrib/libarchive/libarchive/archive_ppmd7.c >index cc3f778203f9..30124f1743e5 100644 >--- a/contrib/libarchive/libarchive/archive_ppmd7.c >+++ b/contrib/libarchive/libarchive/archive_ppmd7.c >@@ -138,7 +138,7 @@ static Bool Ppmd7_Alloc(CPpmd7 *p, UInt32 size) > #else > 4 - (size & 3); > #endif >- if ((p->Base = (Byte *)malloc(p->AlignOffset + size >+ if ((p->Base = malloc(p->AlignOffset + size > #ifndef PPMD_32BIT > + UNIT_SIZE > #endif >diff --git a/contrib/libarchive/libarchive/archive_ppmd8.c b/contrib/libarchive/libarchive/archive_ppmd8.c >index d1779395dac5..2fb7f7141c36 100644 >--- a/contrib/libarchive/libarchive/archive_ppmd8.c >+++ b/contrib/libarchive/libarchive/archive_ppmd8.c >@@ -107,7 +107,7 @@ Bool Ppmd8_Alloc(CPpmd8 *p, UInt32 size) > #else > 4 - (size & 3); > #endif >- if ((p->Base = (Byte *)malloc(p->AlignOffset + size)) == 0) >+ if ((p->Base = malloc(p->AlignOffset + size)) == 0) > return False; > p->Size = size; > } >@@ -671,7 +671,7 @@ static CTX_PTR CreateSuccessors(CPpmd8 *p, Bool skip, CPpmd_State *s1, CTX_PTR c > upState.Freq = (Byte)(1 + ((2 * cf <= s0) ? (5 * cf > s0) : ((cf + 2 * s0 - 3) / s0))); > } > >- do >+ while (numPs != 0) > { > /* Create Child */ > CTX_PTR c1; /* = AllocContext(p); */ >@@ -692,8 +692,7 @@ static CTX_PTR CreateSuccessors(CPpmd8 *p, Bool skip, CPpmd_State *s1, CTX_PTR c > SetSuccessor(ps[--numPs], REF(c1)); > c = c1; > } >- while (numPs != 0); >- >+ > return c; > } > >diff --git a/contrib/libarchive/libarchive/archive_private.h b/contrib/libarchive/libarchive/archive_private.h >index 0f05169b7d25..050fc63c0b2e 100644 >--- a/contrib/libarchive/libarchive/archive_private.h >+++ b/contrib/libarchive/libarchive/archive_private.h >@@ -27,8 +27,10 @@ > #define ARCHIVE_PRIVATE_H_INCLUDED > > #ifndef __LIBARCHIVE_BUILD >+#ifndef __LIBARCHIVE_TEST > #error This header is only to be used internally to libarchive. > #endif >+#endif > > #if HAVE_ICONV_H > #include <iconv.h> >@@ -158,9 +160,9 @@ __LA_NORETURN void __archive_errx(int retvalue, const char *msg); > void __archive_ensure_cloexec_flag(int fd); > int __archive_mktemp(const char *tmpdir); > #if defined(_WIN32) && !defined(__CYGWIN__) >-int __archive_mkstemp(wchar_t *template); >+int __archive_mkstemp(wchar_t *templates); > #else >-int __archive_mkstemp(char *template); >+int __archive_mkstemp(char *templates); > #endif > > int __archive_clean(struct archive *); >diff --git a/contrib/libarchive/libarchive/archive_read.c b/contrib/libarchive/libarchive/archive_read.c >index d71fc2b7cc04..822c534b868a 100644 >--- a/contrib/libarchive/libarchive/archive_read.c >+++ b/contrib/libarchive/libarchive/archive_read.c >@@ -92,7 +92,7 @@ archive_read_new(void) > { > struct archive_read *a; > >- a = (struct archive_read *)calloc(1, sizeof(*a)); >+ a = calloc(1, sizeof(*a)); > if (a == NULL) > return (NULL); > a->archive.magic = ARCHIVE_READ_MAGIC; >@@ -582,7 +582,7 @@ choose_filters(struct archive_read *a) > } > > filter >- = (struct archive_read_filter *)calloc(1, sizeof(*filter)); >+ = calloc(1, sizeof(*filter)); > if (filter == NULL) > return (ARCHIVE_FATAL); > filter->bidder = best_bidder; >@@ -1382,7 +1382,7 @@ __archive_read_filter_ahead(struct archive_read_filter *filter, > if (filter->client_avail <= 0) { > if (filter->end_of_file) { > if (avail != NULL) >- *avail = 0; >+ *avail = filter->avail; > return (NULL); > } > bytes_read = (filter->vtable->read)(filter, >@@ -1451,7 +1451,7 @@ __archive_read_filter_ahead(struct archive_read_filter *filter, > s = t; > } > /* Now s >= min, so allocate a new buffer. */ >- p = (char *)malloc(s); >+ p = malloc(s); > if (p == NULL) { > archive_set_error( > &filter->archive->archive, >diff --git a/contrib/libarchive/libarchive/archive_read_append_filter.c b/contrib/libarchive/libarchive/archive_read_append_filter.c >index 74eead83e0e7..a3986e9b6e88 100644 >--- a/contrib/libarchive/libarchive/archive_read_append_filter.c >+++ b/contrib/libarchive/libarchive/archive_read_append_filter.c >@@ -111,7 +111,7 @@ archive_read_append_filter(struct archive *_a, int code) > number_bidders = sizeof(a->bidders) / sizeof(a->bidders[0]); > > bidder = a->bidders; >- for (i = 0; i < number_bidders; i++, bidder++) >+ for (i = 1; i < number_bidders; i++, bidder++) > { > if (!bidder->name || !strcmp(bidder->name, str)) > break; >@@ -123,8 +123,7 @@ archive_read_append_filter(struct archive *_a, int code) > return (ARCHIVE_FATAL); > } > >- filter >- = (struct archive_read_filter *)calloc(1, sizeof(*filter)); >+ filter = calloc(1, sizeof(*filter)); > if (filter == NULL) > { > archive_set_error(&a->archive, ENOMEM, "Out of memory"); >@@ -180,8 +179,7 @@ archive_read_append_filter_program_signature(struct archive *_a, > return (ARCHIVE_FATAL); > } > >- filter >- = (struct archive_read_filter *)calloc(1, sizeof(*filter)); >+ filter = calloc(1, sizeof(*filter)); > if (filter == NULL) > { > archive_set_error(&a->archive, ENOMEM, "Out of memory"); >diff --git a/contrib/libarchive/libarchive/archive_read_disk_entry_from_file.c b/contrib/libarchive/libarchive/archive_read_disk_entry_from_file.c >index d89f435554f6..3a4915eff406 100644 >--- a/contrib/libarchive/libarchive/archive_read_disk_entry_from_file.c >+++ b/contrib/libarchive/libarchive/archive_read_disk_entry_from_file.c >@@ -520,6 +520,7 @@ setup_xattr(struct archive_read_disk *a, > if (size == -1) { > archive_set_error(&a->archive, errno, > "Couldn't read extended attribute"); >+ free(value); > return (ARCHIVE_WARN); > } > >diff --git a/contrib/libarchive/libarchive/archive_read_disk_posix.c b/contrib/libarchive/libarchive/archive_read_disk_posix.c >index 76a4fa44de72..09965eb98a2e 100644 >--- a/contrib/libarchive/libarchive/archive_read_disk_posix.c >+++ b/contrib/libarchive/libarchive/archive_read_disk_posix.c >@@ -451,7 +451,7 @@ archive_read_disk_new(void) > { > struct archive_read_disk *a; > >- a = (struct archive_read_disk *)calloc(1, sizeof(*a)); >+ a = calloc(1, sizeof(*a)); > if (a == NULL) > return (NULL); > a->archive.magic = ARCHIVE_READ_DISK_MAGIC; >diff --git a/contrib/libarchive/libarchive/archive_read_extract2.c b/contrib/libarchive/libarchive/archive_read_extract2.c >index e11cac1590e9..7cf38c301176 100644 >--- a/contrib/libarchive/libarchive/archive_read_extract2.c >+++ b/contrib/libarchive/libarchive/archive_read_extract2.c >@@ -51,7 +51,7 @@ struct archive_read_extract * > __archive_read_get_extract(struct archive_read *a) > { > if (a->extract == NULL) { >- a->extract = (struct archive_read_extract *)calloc(1, sizeof(*a->extract)); >+ a->extract = calloc(1, sizeof(*a->extract)); > if (a->extract == NULL) { > archive_set_error(&a->archive, ENOMEM, "Can't extract"); > return (NULL); >diff --git a/contrib/libarchive/libarchive/archive_read_open_fd.c b/contrib/libarchive/libarchive/archive_read_open_fd.c >index 3ee2423d300e..debfde208687 100644 >--- a/contrib/libarchive/libarchive/archive_read_open_fd.c >+++ b/contrib/libarchive/libarchive/archive_read_open_fd.c >@@ -74,7 +74,7 @@ archive_read_open_fd(struct archive *a, int fd, size_t block_size) > return (ARCHIVE_FATAL); > } > >- mine = (struct read_fd_data *)calloc(1, sizeof(*mine)); >+ mine = calloc(1, sizeof(*mine)); > b = malloc(block_size); > if (mine == NULL || b == NULL) { > archive_set_error(a, ENOMEM, "No memory"); >diff --git a/contrib/libarchive/libarchive/archive_read_open_file.c b/contrib/libarchive/libarchive/archive_read_open_file.c >index dcf1d4698569..cf49ebd8fc9a 100644 >--- a/contrib/libarchive/libarchive/archive_read_open_file.c >+++ b/contrib/libarchive/libarchive/archive_read_open_file.c >@@ -69,7 +69,7 @@ archive_read_open_FILE(struct archive *a, FILE *f) > void *b; > > archive_clear_error(a); >- mine = (struct read_FILE_data *)malloc(sizeof(*mine)); >+ mine = malloc(sizeof(*mine)); > b = malloc(block_size); > if (mine == NULL || b == NULL) { > archive_set_error(a, ENOMEM, "No memory"); >diff --git a/contrib/libarchive/libarchive/archive_read_open_filename.c b/contrib/libarchive/libarchive/archive_read_open_filename.c >index dd2e16022844..8def020fff38 100644 >--- a/contrib/libarchive/libarchive/archive_read_open_filename.c >+++ b/contrib/libarchive/libarchive/archive_read_open_filename.c >@@ -122,7 +122,7 @@ archive_read_open_filenames(struct archive *a, const char **filenames, > { > if (filename == NULL) > filename = ""; >- mine = (struct read_file_data *)calloc(1, >+ mine = calloc(1, > sizeof(*mine) + strlen(filename)); > if (mine == NULL) > goto no_memory; >@@ -175,7 +175,7 @@ archive_read_open_filenames_w(struct archive *a, const wchar_t **wfilenames, > { > if (wfilename == NULL) > wfilename = L""; >- mine = (struct read_file_data *)calloc(1, >+ mine = calloc(1, > sizeof(*mine) + wcslen(wfilename) * sizeof(wchar_t)); > if (mine == NULL) > goto no_memory; >diff --git a/contrib/libarchive/libarchive/archive_read_open_memory.c b/contrib/libarchive/libarchive/archive_read_open_memory.c >index a057ce643890..460bb5ae6a4d 100644 >--- a/contrib/libarchive/libarchive/archive_read_open_memory.c >+++ b/contrib/libarchive/libarchive/archive_read_open_memory.c >@@ -69,7 +69,7 @@ archive_read_open_memory2(struct archive *a, const void *buff, > { > struct read_memory_data *mine; > >- mine = (struct read_memory_data *)calloc(1, sizeof(*mine)); >+ mine = calloc(1, sizeof(*mine)); > if (mine == NULL) { > archive_set_error(a, ENOMEM, "No memory"); > return (ARCHIVE_FATAL); >diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_bzip2.c b/contrib/libarchive/libarchive/archive_read_support_filter_bzip2.c >index 0392d450a203..479237c27792 100644 >--- a/contrib/libarchive/libarchive/archive_read_support_filter_bzip2.c >+++ b/contrib/libarchive/libarchive/archive_read_support_filter_bzip2.c >@@ -190,8 +190,8 @@ bzip2_reader_init(struct archive_read_filter *self) > self->code = ARCHIVE_FILTER_BZIP2; > self->name = "bzip2"; > >- state = (struct private_data *)calloc(1, sizeof(*state)); >- out_block = (unsigned char *)malloc(out_block_size); >+ state = calloc(1, sizeof(*state)); >+ out_block = malloc(out_block_size); > if (state == NULL || out_block == NULL) { > archive_set_error(&self->archive->archive, ENOMEM, > "Can't allocate data for bzip2 decompression"); >diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_compress.c b/contrib/libarchive/libarchive/archive_read_support_filter_compress.c >index 36a3dbdea23c..e139674df450 100644 >--- a/contrib/libarchive/libarchive/archive_read_support_filter_compress.c >+++ b/contrib/libarchive/libarchive/archive_read_support_filter_compress.c >@@ -217,7 +217,7 @@ compress_bidder_init(struct archive_read_filter *self) > self->code = ARCHIVE_FILTER_COMPRESS; > self->name = "compress (.Z)"; > >- state = (struct private_data *)calloc(1, sizeof(*state)); >+ state = calloc(1, sizeof(*state)); > out_block = malloc(out_block_size); > if (state == NULL || out_block == NULL) { > free(out_block); >diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_gzip.c b/contrib/libarchive/libarchive/archive_read_support_filter_gzip.c >index 152ea9bdbd7c..726385e328a0 100644 >--- a/contrib/libarchive/libarchive/archive_read_support_filter_gzip.c >+++ b/contrib/libarchive/libarchive/archive_read_support_filter_gzip.c >@@ -123,6 +123,8 @@ archive_read_support_filter_gzip(struct archive *_a) > * number of bytes in header. If pbits is non-NULL, it receives a > * count of bits verified, suitable for use by bidder. > */ >+#define MAX_FILENAME_LENGTH (1024 * 1024L) >+#define MAX_COMMENT_LENGTH (1024 * 1024L) > static ssize_t > peek_at_header(struct archive_read_filter *filter, int *pbits, > #ifdef HAVE_ZLIB_H >@@ -180,9 +182,13 @@ peek_at_header(struct archive_read_filter *filter, int *pbits, > #endif > do { > ++len; >- if (avail < len) >+ if (avail < len) { >+ if (avail > MAX_FILENAME_LENGTH) { >+ return (0); >+ } > p = __archive_read_filter_ahead(filter, > len, &avail); >+ } > if (p == NULL) > return (0); > } while (p[len - 1] != 0); >@@ -200,9 +206,13 @@ peek_at_header(struct archive_read_filter *filter, int *pbits, > if (header_flags & 16) { > do { > ++len; >- if (avail < len) >+ if (avail < len) { >+ if (avail > MAX_COMMENT_LENGTH) { >+ return (0); >+ } > p = __archive_read_filter_ahead(filter, > len, &avail); >+ } > if (p == NULL) > return (0); > } while (p[len - 1] != 0); >@@ -307,8 +317,8 @@ gzip_bidder_init(struct archive_read_filter *self) > self->code = ARCHIVE_FILTER_GZIP; > self->name = "gzip"; > >- state = (struct private_data *)calloc(1, sizeof(*state)); >- out_block = (unsigned char *)malloc(out_block_size); >+ state = calloc(1, sizeof(*state)); >+ out_block = malloc(out_block_size); > if (state == NULL || out_block == NULL) { > free(out_block); > free(state); >diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_lz4.c b/contrib/libarchive/libarchive/archive_read_support_filter_lz4.c >index bccf4fb8f82d..8c9777156409 100644 >--- a/contrib/libarchive/libarchive/archive_read_support_filter_lz4.c >+++ b/contrib/libarchive/libarchive/archive_read_support_filter_lz4.c >@@ -223,7 +223,7 @@ lz4_reader_init(struct archive_read_filter *self) > self->code = ARCHIVE_FILTER_LZ4; > self->name = "lz4"; > >- state = (struct private_data *)calloc(1, sizeof(*state)); >+ state = calloc(1, sizeof(*state)); > if (state == NULL) { > archive_set_error(&self->archive->archive, ENOMEM, > "Can't allocate data for lz4 decompression"); >@@ -248,7 +248,7 @@ lz4_allocate_out_block(struct archive_read_filter *self) > out_block_size += 64 * 1024; > if (state->out_block_size < out_block_size) { > free(state->out_block); >- out_block = (unsigned char *)malloc(out_block_size); >+ out_block = malloc(out_block_size); > state->out_block_size = out_block_size; > if (out_block == NULL) { > archive_set_error(&self->archive->archive, ENOMEM, >@@ -271,7 +271,7 @@ lz4_allocate_out_block_for_legacy(struct archive_read_filter *self) > > if (state->out_block_size < out_block_size) { > free(state->out_block); >- out_block = (unsigned char *)malloc(out_block_size); >+ out_block = malloc(out_block_size); > state->out_block_size = out_block_size; > if (out_block == NULL) { > archive_set_error(&self->archive->archive, ENOMEM, >diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_lzop.c b/contrib/libarchive/libarchive/archive_read_support_filter_lzop.c >index e971063dc68f..b0c4bb13e8b3 100644 >--- a/contrib/libarchive/libarchive/archive_read_support_filter_lzop.c >+++ b/contrib/libarchive/libarchive/archive_read_support_filter_lzop.c >@@ -185,7 +185,7 @@ lzop_bidder_init(struct archive_read_filter *self) > self->code = ARCHIVE_FILTER_LZOP; > self->name = "lzop"; > >- state = (struct read_lzop *)calloc(1, sizeof(*state)); >+ state = calloc(1, sizeof(*state)); > if (state == NULL) { > archive_set_error(&self->archive->archive, ENOMEM, > "Can't allocate data for lzop decompression"); >@@ -291,7 +291,8 @@ consume_header(struct archive_read_filter *self) > if (p == NULL) > goto truncated; > len = archive_be32dec(p); >- __archive_read_filter_consume(self->upstream, len + 4 + 4); >+ __archive_read_filter_consume(self->upstream, >+ (int64_t)len + 4 + 4); > } > state->flags = flags; > state->in_stream = 1; >diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_program.c b/contrib/libarchive/libarchive/archive_read_support_filter_program.c >index 0482c57c18eb..9e825223b26c 100644 >--- a/contrib/libarchive/libarchive/archive_read_support_filter_program.c >+++ b/contrib/libarchive/libarchive/archive_read_support_filter_program.c >@@ -139,7 +139,7 @@ archive_read_support_filter_program_signature(struct archive *_a, > /* > * Allocate our private state. > */ >- state = (struct program_bidder *)calloc(1, sizeof (*state)); >+ state = calloc(1, sizeof (*state)); > if (state == NULL) > goto memerr; > state->cmd = strdup(cmd); >@@ -398,8 +398,8 @@ __archive_read_program(struct archive_read_filter *self, const char *cmd) > size_t l; > > l = strlen(prefix) + strlen(cmd) + 1; >- state = (struct program_filter *)calloc(1, sizeof(*state)); >- out_buf = (char *)malloc(out_buf_len); >+ state = calloc(1, sizeof(*state)); >+ out_buf = malloc(out_buf_len); > if (state == NULL || out_buf == NULL || > archive_string_ensure(&state->description, l) == NULL) { > archive_set_error(&self->archive->archive, ENOMEM, >diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_rpm.c b/contrib/libarchive/libarchive/archive_read_support_filter_rpm.c >index 87e9f2ec1939..25ace4a25bc9 100644 >--- a/contrib/libarchive/libarchive/archive_read_support_filter_rpm.c >+++ b/contrib/libarchive/libarchive/archive_read_support_filter_rpm.c >@@ -39,8 +39,8 @@ > > struct rpm { > int64_t total_in; >- size_t hpos; >- size_t hlen; >+ uint64_t hpos; >+ uint64_t hlen; > unsigned char header[16]; > enum { > ST_LEAD, /* Skipping 'Lead' section. */ >@@ -53,7 +53,8 @@ struct rpm { > } state; > int first_header; > }; >-#define RPM_LEAD_SIZE 96 /* Size of 'Lead' section. */ >+#define RPM_LEAD_SIZE 96 /* Size of 'Lead' section. */ >+#define RPM_MIN_HEAD_SIZE 16 /* Minimum size of 'Head'. */ > > static int rpm_bidder_bid(struct archive_read_filter_bidder *, > struct archive_read_filter *); >@@ -63,6 +64,8 @@ static ssize_t rpm_filter_read(struct archive_read_filter *, > const void **); > static int rpm_filter_close(struct archive_read_filter *); > >+static inline size_t rpm_limit_bytes(uint64_t, size_t); >+ > #if ARCHIVE_VERSION_NUMBER < 4000000 > /* Deprecated; remove in libarchive 4.0 */ > int >@@ -141,7 +144,7 @@ rpm_bidder_init(struct archive_read_filter *self) > self->code = ARCHIVE_FILTER_RPM; > self->name = "rpm"; > >- rpm = (struct rpm *)calloc(1, sizeof(*rpm)); >+ rpm = calloc(1, sizeof(*rpm)); > if (rpm == NULL) { > archive_set_error(&self->archive->archive, ENOMEM, > "Can't allocate data for rpm"); >@@ -155,15 +158,21 @@ rpm_bidder_init(struct archive_read_filter *self) > return (ARCHIVE_OK); > } > >+static inline size_t >+rpm_limit_bytes(uint64_t bytes, size_t max) >+{ >+ return (bytes > max ? max : (size_t)bytes); >+} >+ > static ssize_t > rpm_filter_read(struct archive_read_filter *self, const void **buff) > { > struct rpm *rpm; > const unsigned char *b; >- ssize_t avail_in, total; >- size_t used, n; >- uint32_t section; >- uint32_t bytes; >+ ssize_t avail_in, total, used; >+ size_t n; >+ uint64_t section; >+ uint64_t bytes; > > rpm = (struct rpm *)self->data; > *buff = NULL; >@@ -197,15 +206,14 @@ rpm_filter_read(struct archive_read_filter *self, const void **buff) > } > break; > case ST_HEADER: >- n = 16 - rpm->hpos; >- if (n > avail_in - used) >- n = avail_in - used; >+ n = rpm_limit_bytes(RPM_MIN_HEAD_SIZE - rpm->hpos, >+ avail_in - used); > memcpy(rpm->header+rpm->hpos, b, n); > b += n; > used += n; > rpm->hpos += n; > >- if (rpm->hpos == 16) { >+ if (rpm->hpos == RPM_MIN_HEAD_SIZE) { > if (rpm->header[0] != 0x8e || > rpm->header[1] != 0xad || > rpm->header[2] != 0xe8 || >@@ -219,21 +227,20 @@ rpm_filter_read(struct archive_read_filter *self, const void **buff) > } > rpm->state = ST_ARCHIVE; > *buff = rpm->header; >- total = rpm->hpos; >+ total = RPM_MIN_HEAD_SIZE; > break; > } > /* Calculate 'Header' length. */ > section = archive_be32dec(rpm->header+8); > bytes = archive_be32dec(rpm->header+12); >- rpm->hlen = 16 + section * 16 + bytes; >+ rpm->hlen = rpm->hpos + section * 16 + bytes; > rpm->state = ST_HEADER_DATA; > rpm->first_header = 0; > } > break; > case ST_HEADER_DATA: >- n = rpm->hlen - rpm->hpos; >- if (n > avail_in - used) >- n = avail_in - used; >+ n = rpm_limit_bytes(rpm->hlen - rpm->hpos, >+ avail_in - used); > b += n; > used += n; > rpm->hpos += n; >@@ -241,7 +248,7 @@ rpm_filter_read(struct archive_read_filter *self, const void **buff) > rpm->state = ST_PADDING; > break; > case ST_PADDING: >- while (used < (size_t)avail_in) { >+ while (used < avail_in) { > if (*b != 0) { > /* Read next header. */ > rpm->state = ST_HEADER; >@@ -259,7 +266,7 @@ rpm_filter_read(struct archive_read_filter *self, const void **buff) > used = avail_in; > break; > } >- if (used == (size_t)avail_in) { >+ if (used == avail_in) { > rpm->total_in += used; > __archive_read_filter_consume(self->upstream, used); > b = NULL; >diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_uu.c b/contrib/libarchive/libarchive/archive_read_support_filter_uu.c >index 689ceb8f8760..d722fe343657 100644 >--- a/contrib/libarchive/libarchive/archive_read_support_filter_uu.c >+++ b/contrib/libarchive/libarchive/archive_read_support_filter_uu.c >@@ -43,11 +43,13 @@ > /* Maximum lookahead during bid phase */ > #define UUENCODE_BID_MAX_READ 128*1024 /* in bytes */ > >+#define UUENCODE_MAX_LINE_LENGTH 34*1024 /* in bytes */ >+ > struct uudecode { > int64_t total; > unsigned char *in_buff; > #define IN_BUFF_SIZE (1024) >- int in_cnt; >+ ssize_t in_cnt; > size_t in_allocated; > unsigned char *out_buff; > #define OUT_BUFF_SIZE (64 * 1024) >@@ -373,7 +375,7 @@ uudecode_bidder_init(struct archive_read_filter *self) > self->code = ARCHIVE_FILTER_UU; > self->name = "uu"; > >- uudecode = (struct uudecode *)calloc(1, sizeof(*uudecode)); >+ uudecode = calloc(1, sizeof(*uudecode)); > out_buff = malloc(OUT_BUFF_SIZE); > in_buff = malloc(IN_BUFF_SIZE); > if (uudecode == NULL || out_buff == NULL || in_buff == NULL) { >@@ -484,6 +486,12 @@ uudecode_filter_read(struct archive_read_filter *self, const void **buff) > goto finish; > } > if (uudecode->in_cnt) { >+ if (uudecode->in_cnt > UUENCODE_MAX_LINE_LENGTH) { >+ archive_set_error(&self->archive->archive, >+ ARCHIVE_ERRNO_FILE_FORMAT, >+ "Invalid format data"); >+ return (ARCHIVE_FATAL); >+ } > /* > * If there is remaining data which is saved by > * previous calling, use it first. >@@ -498,7 +506,7 @@ uudecode_filter_read(struct archive_read_filter *self, const void **buff) > uudecode->in_cnt = 0; > } > for (;used < avail_in; d += llen, used += llen) { >- int64_t l, body; >+ ssize_t l, body; > > b = d; > len = get_line(b, avail_in - used, &nl); >@@ -533,7 +541,7 @@ uudecode_filter_read(struct archive_read_filter *self, const void **buff) > return (ARCHIVE_FATAL); > if (uudecode->in_buff != b) > memmove(uudecode->in_buff, b, len); >- uudecode->in_cnt = (int)len; >+ uudecode->in_cnt = len; > if (total == 0) { > /* Do not return 0; it means end-of-file. > * We should try to read bytes more. */ >diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_xz.c b/contrib/libarchive/libarchive/archive_read_support_filter_xz.c >index e55fb00edb34..dcbf734ecacb 100644 >--- a/contrib/libarchive/libarchive/archive_read_support_filter_xz.c >+++ b/contrib/libarchive/libarchive/archive_read_support_filter_xz.c >@@ -476,8 +476,8 @@ xz_lzma_bidder_init(struct archive_read_filter *self) > struct private_data *state; > int ret; > >- state = (struct private_data *)calloc(1, sizeof(*state)); >- out_block = (unsigned char *)malloc(out_block_size); >+ state = calloc(1, sizeof(*state)); >+ out_block = malloc(out_block_size); > if (state == NULL || out_block == NULL) { > archive_set_error(&self->archive->archive, ENOMEM, > "Can't allocate data for xz decompression"); >diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_zstd.c b/contrib/libarchive/libarchive/archive_read_support_filter_zstd.c >index f7326d2430d3..9a1dd71abdf6 100644 >--- a/contrib/libarchive/libarchive/archive_read_support_filter_zstd.c >+++ b/contrib/libarchive/libarchive/archive_read_support_filter_zstd.c >@@ -175,8 +175,8 @@ zstd_bidder_init(struct archive_read_filter *self) > self->code = ARCHIVE_FILTER_ZSTD; > self->name = "zstd"; > >- state = (struct private_data *)calloc(1, sizeof(*state)); >- out_block = (unsigned char *)malloc(out_block_size); >+ state = calloc(1, sizeof(*state)); >+ out_block = malloc(out_block_size); > dstream = ZSTD_createDStream(); > > if (state == NULL || out_block == NULL || dstream == NULL) { >diff --git a/contrib/libarchive/libarchive/archive_read_support_format_7zip.c b/contrib/libarchive/libarchive/archive_read_support_format_7zip.c >index 7e465935c902..b4e34d68dbba 100644 >--- a/contrib/libarchive/libarchive/archive_read_support_format_7zip.c >+++ b/contrib/libarchive/libarchive/archive_read_support_format_7zip.c >@@ -767,29 +767,27 @@ archive_read_format_7zip_read_header(struct archive_read *a, > > if (zip_entry->attr & supported_attrs) { > char *fflags_text, *ptr; >- /* allocate for "rdonly,hidden,system," */ >- fflags_text = malloc(22 * sizeof(char)); >+ /* allocate for ",rdonly,hidden,system" */ >+ fflags_text = malloc(22 * sizeof(*fflags_text)); > if (fflags_text != NULL) { > ptr = fflags_text; >- if (zip_entry->attr & FILE_ATTRIBUTE_READONLY) { >- strcpy(ptr, "rdonly,"); >- ptr = ptr + 7; >- } >- if (zip_entry->attr & FILE_ATTRIBUTE_HIDDEN) { >- strcpy(ptr, "hidden,"); >- ptr = ptr + 7; >- } >- if (zip_entry->attr & FILE_ATTRIBUTE_SYSTEM) { >- strcpy(ptr, "system,"); >- ptr = ptr + 7; >- } >- if (ptr > fflags_text) { >- /* Delete trailing comma */ >- *(ptr - 1) = '\0'; >- archive_entry_copy_fflags_text(entry, >- fflags_text); >- } >- free(fflags_text); >+ if (zip_entry->attr & FILE_ATTRIBUTE_READONLY) { >+ strcpy(ptr, ",rdonly"); >+ ptr = ptr + 7; >+ } >+ if (zip_entry->attr & FILE_ATTRIBUTE_HIDDEN) { >+ strcpy(ptr, ",hidden"); >+ ptr = ptr + 7; >+ } >+ if (zip_entry->attr & FILE_ATTRIBUTE_SYSTEM) { >+ strcpy(ptr, ",system"); >+ ptr = ptr + 7; >+ } >+ if (ptr > fflags_text) { >+ archive_entry_copy_fflags_text(entry, >+ fflags_text + 1); >+ } >+ free(fflags_text); > } > } > >@@ -835,9 +833,20 @@ archive_read_format_7zip_read_header(struct archive_read *a, > zip_entry->mode |= AE_IFREG; > archive_entry_set_mode(entry, zip_entry->mode); > } else { >+ struct archive_string_conv* utf8_conv; >+ > symname[symsize] = '\0'; >- archive_entry_copy_symlink(entry, >- (const char *)symname); >+ >+ /* Symbolic links are embedded as UTF-8 strings */ >+ utf8_conv = archive_string_conversion_from_charset(&a->archive, >+ "UTF-8", 1); >+ if (utf8_conv == NULL) { >+ free(symname); >+ return ARCHIVE_FATAL; >+ } >+ >+ archive_entry_copy_symlink_l(entry, (const char*)symname, symsize, >+ utf8_conv); > } > free(symname); > archive_entry_set_size(entry, 0); >@@ -877,10 +886,9 @@ archive_read_format_7zip_read_data(struct archive_read *a, > if (zip->end_of_entry) > return (ARCHIVE_EOF); > >- const uint64_t max_read_size = 16 * 1024 * 1024; // Don't try to read more than 16 MB at a time >- size_t bytes_to_read = max_read_size; >+ size_t bytes_to_read = 16 * 1024 * 1024; // Don't try to read more than 16 MB at a time > if ((uint64_t)bytes_to_read > zip->entry_bytes_remaining) { >- bytes_to_read = zip->entry_bytes_remaining; >+ bytes_to_read = (size_t)zip->entry_bytes_remaining; > } > bytes = read_stream(a, buff, bytes_to_read, 0); > if (bytes < 0) >@@ -1063,8 +1071,8 @@ ppmd_read(void *p) > */ > ssize_t bytes_avail = 0; > const uint8_t* data = __archive_read_ahead(a, >- zip->ppstream.stream_in+1, &bytes_avail); >- if(bytes_avail < zip->ppstream.stream_in+1) { >+ (size_t)zip->ppstream.stream_in+1, &bytes_avail); >+ if(data == NULL || bytes_avail < zip->ppstream.stream_in+1) { > archive_set_error(&a->archive, > ARCHIVE_ERRNO_FILE_FORMAT, > "Truncated 7z file data"); >@@ -1766,6 +1774,10 @@ free_decompression(struct archive_read *a, struct _7zip *zip) > } > zip->stream_valid = 0; > } >+#endif >+#ifdef HAVE_ZSTD_H >+ if (zip->zstdstream_valid) >+ ZSTD_freeDStream(zip->zstd_dstream); > #endif > if (zip->ppmd7_valid) { > __archive_ppmd7_functions.Ppmd7_Free( >@@ -2308,7 +2320,7 @@ read_SubStreamsInfo(struct archive_read *a, struct _7z_substream_info *ss, > usizes = ss->unpackSizes; > for (i = 0; i < numFolders; i++) { > unsigned pack; >- uint64_t sum; >+ uint64_t size, sum; > > if (f[i].numUnpackStreams == 0) > continue; >@@ -2318,10 +2330,15 @@ read_SubStreamsInfo(struct archive_read *a, struct _7z_substream_info *ss, > for (pack = 1; pack < f[i].numUnpackStreams; pack++) { > if (parse_7zip_uint64(a, usizes) < 0) > return (-1); >+ if (*usizes > UINT64_MAX - sum) >+ return (-1); > sum += *usizes++; > } > } >- *usizes++ = folder_uncompressed_size(&f[i]) - sum; >+ size = folder_uncompressed_size(&f[i]); >+ if (size < sum) >+ return (-1); >+ *usizes++ = size - sum; > } > > if (type == kSize) { >@@ -2415,6 +2432,8 @@ read_StreamsInfo(struct archive_read *a, struct _7z_stream_info *si) > packPos = si->pi.pos; > for (i = 0; i < si->pi.numPackStreams; i++) { > si->pi.positions[i] = packPos; >+ if (packPos > UINT64_MAX - si->pi.sizes[i]) >+ return (-1); > packPos += si->pi.sizes[i]; > if (packPos > zip->header_offset) > return (-1); >@@ -2436,6 +2455,10 @@ read_StreamsInfo(struct archive_read *a, struct _7z_stream_info *si) > f = si->ci.folders; > for (i = 0; i < si->ci.numFolders; i++) { > f[i].packIndex = packIndex; >+ if (f[i].numPackedStreams > UINT32_MAX) >+ return (-1); >+ if (packIndex > UINT32_MAX - (uint32_t)f[i].numPackedStreams) >+ return (-1); > packIndex += (uint32_t)f[i].numPackedStreams; > if (packIndex > si->pi.numPackStreams) > return (-1); >@@ -3000,7 +3023,7 @@ slurp_central_directory(struct archive_read *a, struct _7zip *zip, > /* CRC check. */ > if (crc32(0, (const unsigned char *)p + 12, 20) > != archive_le32dec(p + 8)) { >-#ifdef DONT_FAIL_ON_CRC_ERROR >+#ifndef DONT_FAIL_ON_CRC_ERROR > archive_set_error(&a->archive, -1, "Header CRC error"); > return (ARCHIVE_FATAL); > #endif >@@ -3142,7 +3165,7 @@ get_uncompressed_data(struct archive_read *a, const void **buff, size_t size, > /* Copy mode. */ > > *buff = __archive_read_ahead(a, minimum, &bytes_avail); >- if (bytes_avail <= 0) { >+ if (*buff == NULL) { > archive_set_error(&a->archive, > ARCHIVE_ERRNO_FILE_FORMAT, > "Truncated 7-Zip file data"); >@@ -3448,7 +3471,7 @@ read_stream(struct archive_read *a, const void **buff, size_t size, > /* > * Skip the bytes we already has skipped in skip_stream(). > */ >- while (skip_bytes) { >+ while (1) { > ssize_t skipped; > > if (zip->uncompressed_buffer_bytes_remaining == 0) { >@@ -3468,6 +3491,10 @@ read_stream(struct archive_read *a, const void **buff, size_t size, > return (ARCHIVE_FATAL); > } > } >+ >+ if (!skip_bytes) >+ break; >+ > skipped = get_uncompressed_data( > a, buff, (size_t)skip_bytes, 0); > if (skipped < 0) >diff --git a/contrib/libarchive/libarchive/archive_read_support_format_ar.c b/contrib/libarchive/libarchive/archive_read_support_format_ar.c >index 6f1be8591fef..6dfe2939d090 100644 >--- a/contrib/libarchive/libarchive/archive_read_support_format_ar.c >+++ b/contrib/libarchive/libarchive/archive_read_support_format_ar.c >@@ -103,7 +103,7 @@ archive_read_support_format_ar(struct archive *_a) > archive_check_magic(_a, ARCHIVE_READ_MAGIC, > ARCHIVE_STATE_NEW, "archive_read_support_format_ar"); > >- ar = (struct ar *)calloc(1, sizeof(*ar)); >+ ar = calloc(1, sizeof(*ar)); > if (ar == NULL) { > archive_set_error(&a->archive, ENOMEM, > "Can't allocate ar data"); >@@ -368,7 +368,7 @@ _ar_read_header(struct archive_read *a, struct archive_entry *entry, > return (ARCHIVE_FATAL); > } > /* Store it in the entry. */ >- p = (char *)malloc(bsd_name_length + 1); >+ p = malloc(bsd_name_length + 1); > if (p == NULL) { > archive_set_error(&a->archive, ENOMEM, > "Can't allocate fname buffer"); >@@ -439,9 +439,9 @@ archive_read_format_ar_read_header(struct archive_read *a, > if ((header_data = __archive_read_ahead(a, 60, NULL)) == NULL) > /* Broken header. */ > return (ARCHIVE_EOF); >- >+ > unconsumed = 60; >- >+ > ret = _ar_read_header(a, entry, ar, (const char *)header_data, &unconsumed); > > if (unconsumed) >@@ -458,7 +458,6 @@ ar_parse_common_header(struct ar *ar, struct archive_entry *entry, > uint64_t n; > > /* Copy remaining header */ >- archive_entry_set_filetype(entry, AE_IFREG); > archive_entry_set_mtime(entry, > (time_t)ar_atol10(h + AR_date_offset, AR_date_size), 0L); > archive_entry_set_uid(entry, >@@ -467,6 +466,7 @@ ar_parse_common_header(struct ar *ar, struct archive_entry *entry, > (gid_t)ar_atol10(h + AR_gid_offset, AR_gid_size)); > archive_entry_set_mode(entry, > (mode_t)ar_atol8(h + AR_mode_offset, AR_mode_size)); >+ archive_entry_set_filetype(entry, AE_IFREG); > n = ar_atol10(h + AR_size_offset, AR_size_size); > > ar->entry_offset = 0; >diff --git a/contrib/libarchive/libarchive/archive_read_support_format_cab.c b/contrib/libarchive/libarchive/archive_read_support_format_cab.c >index 3b552a84de12..e012248a5bc2 100644 >--- a/contrib/libarchive/libarchive/archive_read_support_format_cab.c >+++ b/contrib/libarchive/libarchive/archive_read_support_format_cab.c >@@ -356,7 +356,7 @@ archive_read_support_format_cab(struct archive *_a) > archive_check_magic(_a, ARCHIVE_READ_MAGIC, > ARCHIVE_STATE_NEW, "archive_read_support_format_cab"); > >- cab = (struct cab *)calloc(1, sizeof(*cab)); >+ cab = calloc(1, sizeof(*cab)); > if (cab == NULL) { > archive_set_error(&a->archive, ENOMEM, > "Can't allocate CAB data"); >@@ -717,7 +717,7 @@ cab_read_header(struct archive_read *a) > /* > * Read CFFOLDER. > */ >- hd->folder_array = (struct cffolder *)calloc( >+ hd->folder_array = calloc( > hd->folder_count, sizeof(struct cffolder)); > if (hd->folder_array == NULL) > goto nomem; >@@ -780,7 +780,7 @@ cab_read_header(struct archive_read *a) > cab->cab_offset += skip; > } > /* Allocate memory for CFDATA */ >- hd->file_array = (struct cffile *)calloc( >+ hd->file_array = calloc( > hd->file_count, sizeof(struct cffile)); > if (hd->file_array == NULL) > goto nomem; >@@ -1412,7 +1412,7 @@ cab_read_ahead_cfdata_deflate(struct archive_read *a, ssize_t *avail) > if (cab->uncompressed_buffer == NULL) { > cab->uncompressed_buffer_size = 0x8000; > cab->uncompressed_buffer >- = (unsigned char *)malloc(cab->uncompressed_buffer_size); >+ = malloc(cab->uncompressed_buffer_size); > if (cab->uncompressed_buffer == NULL) { > archive_set_error(&a->archive, ENOMEM, > "No memory for CAB reader"); >@@ -1641,7 +1641,7 @@ cab_read_ahead_cfdata_lzx(struct archive_read *a, ssize_t *avail) > if (cab->uncompressed_buffer == NULL) { > cab->uncompressed_buffer_size = 0x8000; > cab->uncompressed_buffer >- = (unsigned char *)malloc(cab->uncompressed_buffer_size); >+ = malloc(cab->uncompressed_buffer_size); > if (cab->uncompressed_buffer == NULL) { > archive_set_error(&a->archive, ENOMEM, > "No memory for CAB reader"); >@@ -1682,7 +1682,7 @@ cab_read_ahead_cfdata_lzx(struct archive_read *a, ssize_t *avail) > cfdata->uncompressed_size - cab->xstrm.total_out; > > d = __archive_read_ahead(a, 1, &bytes_avail); >- if (bytes_avail <= 0) { >+ if (d == NULL) { > archive_set_error(&a->archive, > ARCHIVE_ERRNO_FILE_FORMAT, > "Truncated CAB file data"); >diff --git a/contrib/libarchive/libarchive/archive_read_support_format_cpio.c b/contrib/libarchive/libarchive/archive_read_support_format_cpio.c >index dcff23f694a7..42a89c1b69c4 100644 >--- a/contrib/libarchive/libarchive/archive_read_support_format_cpio.c >+++ b/contrib/libarchive/libarchive/archive_read_support_format_cpio.c >@@ -228,7 +228,7 @@ archive_read_support_format_cpio(struct archive *_a) > archive_check_magic(_a, ARCHIVE_READ_MAGIC, > ARCHIVE_STATE_NEW, "archive_read_support_format_cpio"); > >- cpio = (struct cpio *)calloc(1, sizeof(*cpio)); >+ cpio = calloc(1, sizeof(*cpio)); > if (cpio == NULL) { > archive_set_error(&a->archive, ENOMEM, "Can't allocate cpio data"); > return (ARCHIVE_FATAL); >@@ -834,6 +834,7 @@ static int > header_afiol(struct archive_read *a, struct cpio *cpio, > struct archive_entry *entry, size_t *namelength, size_t *name_pad) > { >+ int64_t t; > const void *h; > const char *header; > >@@ -850,7 +851,12 @@ header_afiol(struct archive_read *a, struct cpio *cpio, > > archive_entry_set_dev(entry, > (dev_t)atol16(header + afiol_dev_offset, afiol_dev_size)); >- archive_entry_set_ino(entry, atol16(header + afiol_ino_offset, afiol_ino_size)); >+ t = atol16(header + afiol_ino_offset, afiol_ino_size); >+ if (t < 0) { >+ archive_set_error(&a->archive, 0, "Nonsensical ino value"); >+ return (ARCHIVE_FATAL); >+ } >+ archive_entry_set_ino(entry, t); > archive_entry_set_mode(entry, > (mode_t)atol8(header + afiol_mode_offset, afiol_mode_size)); > archive_entry_set_uid(entry, atol16(header + afiol_uid_offset, afiol_uid_size)); >@@ -863,8 +869,12 @@ header_afiol(struct archive_read *a, struct cpio *cpio, > *namelength = (size_t)atol16(header + afiol_namesize_offset, afiol_namesize_size); > *name_pad = 0; /* No padding of filename. */ > >- cpio->entry_bytes_remaining = >- atol16(header + afiol_filesize_offset, afiol_filesize_size); >+ t = atol16(header + afiol_filesize_offset, afiol_filesize_size); >+ if (t < 0) { >+ archive_set_error(&a->archive, 0, "Nonsensical file size"); >+ return (ARCHIVE_FATAL); >+ } >+ cpio->entry_bytes_remaining = t; > archive_entry_set_size(entry, cpio->entry_bytes_remaining); > cpio->entry_padding = 0; > __archive_read_consume(a, afiol_header_size); >@@ -1002,7 +1012,7 @@ be4(const unsigned char *p) > static int64_t > atol8(const char *p, unsigned char_cnt) > { >- int64_t l; >+ uint64_t l; > int digit; > > l = 0; >@@ -1010,18 +1020,18 @@ atol8(const char *p, unsigned char_cnt) > if (*p >= '0' && *p <= '7') > digit = *p - '0'; > else >- return (l); >+ return ((int64_t)l); > p++; > l <<= 3; > l |= digit; > } >- return (l); >+ return ((int64_t)l); > } > > static int64_t > atol16(const char *p, unsigned char_cnt) > { >- int64_t l; >+ uint64_t l; > int digit; > > l = 0; >@@ -1033,12 +1043,12 @@ atol16(const char *p, unsigned char_cnt) > else if (*p >= '0' && *p <= '9') > digit = *p - '0'; > else >- return (l); >+ return ((int64_t)l); > p++; > l <<= 4; > l |= digit; > } >- return (l); >+ return ((int64_t)l); > } > > static int >@@ -1078,7 +1088,7 @@ record_hardlink(struct archive_read *a, > } > } > >- le = (struct links_entry *)malloc(sizeof(struct links_entry)); >+ le = malloc(sizeof(struct links_entry)); > if (le == NULL) { > archive_set_error(&a->archive, > ENOMEM, "Out of memory adding file to list"); >diff --git a/contrib/libarchive/libarchive/archive_read_support_format_iso9660.c b/contrib/libarchive/libarchive/archive_read_support_format_iso9660.c >index db5cdb67f1cf..baf265f46229 100644 >--- a/contrib/libarchive/libarchive/archive_read_support_format_iso9660.c >+++ b/contrib/libarchive/libarchive/archive_read_support_format_iso9660.c >@@ -273,7 +273,7 @@ struct file_info { > char re; /* Having RRIP "RE" extension. */ > char re_descendant; > uint64_t cl_offset; /* Having RRIP "CL" extension. */ >- int birthtime_is_set; >+ int time_is_set; /* Bitmask indicating which times are known */ > time_t birthtime; /* File created time. */ > time_t mtime; /* File last modified time. */ > time_t atime; /* File last accessed time. */ >@@ -306,6 +306,11 @@ struct file_info { > } rede_files; > }; > >+#define BIRTHTIME_IS_SET 1 >+#define MTIME_IS_SET 2 >+#define ATIME_IS_SET 4 >+#define CTIME_IS_SET 8 >+ > struct heap_queue { > struct file_info **files; > int allocated; >@@ -394,7 +399,9 @@ static void dump_isodirrec(FILE *, const unsigned char *isodirrec); > #endif > static time_t time_from_tm(struct tm *); > static time_t isodate17(const unsigned char *); >+static int isodate17_valid(const unsigned char *); > static time_t isodate7(const unsigned char *); >+static int isodate7_valid(const unsigned char *); > static int isBootRecord(struct iso9660 *, const unsigned char *); > static int isVolumePartition(struct iso9660 *, const unsigned char *); > static int isVDSetTerminator(struct iso9660 *, const unsigned char *); >@@ -402,6 +409,9 @@ static int isJolietSVD(struct iso9660 *, const unsigned char *); > static int isSVD(struct iso9660 *, const unsigned char *); > static int isEVD(struct iso9660 *, const unsigned char *); > static int isPVD(struct iso9660 *, const unsigned char *); >+static int isRootDirectoryRecord(const unsigned char *); >+static int isValid723Integer(const unsigned char *); >+static int isValid733Integer(const unsigned char *); > static int next_cache_entry(struct archive_read *, struct iso9660 *, > struct file_info **); > static int next_entry_seek(struct archive_read *, struct iso9660 *, >@@ -453,7 +463,7 @@ archive_read_support_format_iso9660(struct archive *_a) > archive_check_magic(_a, ARCHIVE_READ_MAGIC, > ARCHIVE_STATE_NEW, "archive_read_support_format_iso9660"); > >- iso9660 = (struct iso9660 *)calloc(1, sizeof(*iso9660)); >+ iso9660 = calloc(1, sizeof(*iso9660)); > if (iso9660 == NULL) { > archive_set_error(&a->archive, ENOMEM, > "Can't allocate iso9660 data"); >@@ -773,8 +783,9 @@ isSVD(struct iso9660 *iso9660, const unsigned char *h) > > /* Read Root Directory Record in Volume Descriptor. */ > p = h + SVD_root_directory_record_offset; >- if (p[DR_length_offset] != 34) >+ if (!isRootDirectoryRecord(p)) { > return (0); >+ } > > return (48); > } >@@ -851,8 +862,9 @@ isEVD(struct iso9660 *iso9660, const unsigned char *h) > > /* Read Root Directory Record in Volume Descriptor. */ > p = h + PVD_root_directory_record_offset; >- if (p[DR_length_offset] != 34) >+ if (!isRootDirectoryRecord(p)) { > return (0); >+ } > > return (48); > } >@@ -882,21 +894,43 @@ isPVD(struct iso9660 *iso9660, const unsigned char *h) > if (!isNull(iso9660, h, PVD_reserved2_offset, PVD_reserved2_size)) > return (0); > >+ /* Volume space size must be encoded according to 7.3.3 */ >+ if (!isValid733Integer(h + PVD_volume_space_size_offset)) { >+ return (0); >+ } >+ volume_block = archive_le32dec(h + PVD_volume_space_size_offset); >+ if (volume_block <= SYSTEM_AREA_BLOCK+4) >+ return (0); >+ > /* Reserved field must be 0. */ > if (!isNull(iso9660, h, PVD_reserved3_offset, PVD_reserved3_size)) > return (0); > >+ /* Volume set size must be encoded according to 7.2.3 */ >+ if (!isValid723Integer(h + PVD_volume_set_size_offset)) { >+ return (0); >+ } >+ >+ /* Volume sequence number must be encoded according to 7.2.3 */ >+ if (!isValid723Integer(h + PVD_volume_sequence_number_offset)) { >+ return (0); >+ } >+ > /* Logical block size must be > 0. */ > /* I've looked at Ecma 119 and can't find any stronger > * restriction on this field. */ >+ if (!isValid723Integer(h + PVD_logical_block_size_offset)) { >+ return (0); >+ } > logical_block_size = > archive_le16dec(h + PVD_logical_block_size_offset); > if (logical_block_size <= 0) > return (0); > >- volume_block = archive_le32dec(h + PVD_volume_space_size_offset); >- if (volume_block <= SYSTEM_AREA_BLOCK+4) >+ /* Path Table size must be encoded according to 7.3.3 */ >+ if (!isValid733Integer(h + PVD_path_table_size_offset)) { > return (0); >+ } > > /* File structure version must be 1 for ISO9660/ECMA119. */ > if (h[PVD_file_structure_version_offset] != 1) >@@ -935,8 +969,9 @@ isPVD(struct iso9660 *iso9660, const unsigned char *h) > > /* Read Root Directory Record in Volume Descriptor. */ > p = h + PVD_root_directory_record_offset; >- if (p[DR_length_offset] != 34) >+ if (!isRootDirectoryRecord(p)) { > return (0); >+ } > > if (!iso9660->primary.location) { > iso9660->logical_block_size = logical_block_size; >@@ -951,6 +986,51 @@ isPVD(struct iso9660 *iso9660, const unsigned char *h) > return (48); > } > >+static int >+isRootDirectoryRecord(const unsigned char *p) { >+ int flags; >+ >+ /* ECMA119/ISO9660 requires that the root directory record be _exactly_ 34 bytes. >+ * However, we've seen images that have root directory records up to 68 bytes. */ >+ if (p[DR_length_offset] < 34 || p[DR_length_offset] > 68) { >+ return (0); >+ } >+ >+ /* The root directory location must be a 7.3.3 32-bit integer. */ >+ if (!isValid733Integer(p + DR_extent_offset)) { >+ return (0); >+ } >+ >+ /* The root directory size must be a 7.3.3 integer. */ >+ if (!isValid733Integer(p + DR_size_offset)) { >+ return (0); >+ } >+ >+ /* According to the standard, certain bits must be one or zero: >+ * Bit 1: must be 1 (this is a directory) >+ * Bit 2: must be 0 (not an associated file) >+ * Bit 3: must be 0 (doesn't use extended attribute record) >+ * Bit 7: must be 0 (final directory record for this file) >+ */ >+ flags = p[DR_flags_offset]; >+ if ((flags & 0x8E) != 0x02) { >+ return (0); >+ } >+ >+ /* Volume sequence number must be a 7.2.3 integer. */ >+ if (!isValid723Integer(p + DR_volume_sequence_number_offset)) { >+ return (0); >+ } >+ >+ /* Root directory name is a single zero byte... */ >+ if (p[DR_name_len_offset] != 1 || p[DR_name_offset] != 0) { >+ return (0); >+ } >+ >+ /* Nothing looked wrong, so let's accept it. */ >+ return (1); >+} >+ > static int > read_children(struct archive_read *a, struct file_info *parent) > { >@@ -1212,7 +1292,7 @@ archive_read_format_iso9660_read_header(struct archive_read *a, > } > } > if (iso9660->utf16be_previous_path == NULL) { >- iso9660->utf16be_previous_path = malloc(UTF16_NAME_MAX); >+ iso9660->utf16be_previous_path = calloc(1, UTF16_NAME_MAX); > if (iso9660->utf16be_previous_path == NULL) { > archive_set_error(&a->archive, ENOMEM, > "No memory"); >@@ -1278,13 +1358,22 @@ archive_read_format_iso9660_read_header(struct archive_read *a, > archive_entry_set_uid(entry, file->uid); > archive_entry_set_gid(entry, file->gid); > archive_entry_set_nlink(entry, file->nlinks); >- if (file->birthtime_is_set) >+ if ((file->time_is_set & BIRTHTIME_IS_SET)) > archive_entry_set_birthtime(entry, file->birthtime, 0); > else > archive_entry_unset_birthtime(entry); >- archive_entry_set_mtime(entry, file->mtime, 0); >- archive_entry_set_ctime(entry, file->ctime, 0); >- archive_entry_set_atime(entry, file->atime, 0); >+ if ((file->time_is_set & MTIME_IS_SET)) >+ archive_entry_set_mtime(entry, file->mtime, 0); >+ else >+ archive_entry_unset_mtime(entry); >+ if ((file->time_is_set & CTIME_IS_SET)) >+ archive_entry_set_ctime(entry, file->ctime, 0); >+ else >+ archive_entry_unset_ctime(entry); >+ if ((file->time_is_set & ATIME_IS_SET)) >+ archive_entry_set_atime(entry, file->atime, 0); >+ else >+ archive_entry_unset_atime(entry); > /* N.B.: Rock Ridge supports 64-bit device numbers. */ > archive_entry_set_rdev(entry, (dev_t)file->rdev); > archive_entry_set_size(entry, iso9660->entry_bytes_remaining); >@@ -1816,7 +1905,7 @@ parse_file_info(struct archive_read *a, struct file_info *parent, > } > > /* Create a new file entry and copy data from the ISO dir record. */ >- file = (struct file_info *)calloc(1, sizeof(*file)); >+ file = calloc(1, sizeof(*file)); > if (file == NULL) { > archive_set_error(&a->archive, ENOMEM, > "No memory for file entry"); >@@ -1825,8 +1914,11 @@ parse_file_info(struct archive_read *a, struct file_info *parent, > file->parent = parent; > file->offset = offset; > file->size = fsize; >- file->mtime = isodate7(isodirrec + DR_date_offset); >- file->ctime = file->atime = file->mtime; >+ if (isodate7_valid(isodirrec + DR_date_offset)) { >+ file->time_is_set |= MTIME_IS_SET | ATIME_IS_SET | CTIME_IS_SET; >+ file->mtime = isodate7(isodirrec + DR_date_offset); >+ file->ctime = file->atime = file->mtime; >+ } > file->rede_files.first = NULL; > file->rede_files.last = &(file->rede_files.first); > >@@ -2500,51 +2592,73 @@ parse_rockridge_TF1(struct file_info *file, const unsigned char *data, > /* Use 17-byte time format. */ > if ((flag & 1) && data_length >= 17) { > /* Create time. */ >- file->birthtime_is_set = 1; >- file->birthtime = isodate17(data); >+ if (isodate17_valid(data)) { >+ file->time_is_set |= BIRTHTIME_IS_SET; >+ file->birthtime = isodate17(data); >+ } > data += 17; > data_length -= 17; > } > if ((flag & 2) && data_length >= 17) { > /* Modify time. */ >- file->mtime = isodate17(data); >+ if (isodate17_valid(data)) { >+ file->time_is_set |= MTIME_IS_SET; >+ file->mtime = isodate17(data); >+ } > data += 17; > data_length -= 17; > } > if ((flag & 4) && data_length >= 17) { > /* Access time. */ >- file->atime = isodate17(data); >+ if (isodate17_valid(data)) { >+ file->time_is_set |= ATIME_IS_SET; >+ file->atime = isodate17(data); >+ } > data += 17; > data_length -= 17; > } > if ((flag & 8) && data_length >= 17) { > /* Attribute change time. */ >- file->ctime = isodate17(data); >+ if (isodate17_valid(data)) { >+ file->time_is_set |= CTIME_IS_SET; >+ file->ctime = isodate17(data); >+ } > } > } else { > /* Use 7-byte time format. */ > if ((flag & 1) && data_length >= 7) { > /* Create time. */ >- file->birthtime_is_set = 1; >- file->birthtime = isodate7(data); >+ if (isodate7_valid(data)) { >+ file->time_is_set |= BIRTHTIME_IS_SET; >+ file->birthtime = isodate7(data); >+ } > data += 7; > data_length -= 7; > } > if ((flag & 2) && data_length >= 7) { > /* Modify time. */ >- file->mtime = isodate7(data); >+ if (isodate7_valid(data)) { >+ file->time_is_set |= MTIME_IS_SET; >+ file->mtime = isodate7(data); >+ } > data += 7; > data_length -= 7; > } > if ((flag & 4) && data_length >= 7) { > /* Access time. */ >- file->atime = isodate7(data); >+ if (isodate7_valid(data)) { >+ file->time_is_set |= ATIME_IS_SET; >+ file->atime = isodate7(data); >+ } > data += 7; > data_length -= 7; > } > if ((flag & 8) && data_length >= 7) { > /* Attribute change time. */ >- file->ctime = isodate7(data); >+ if (isodate7_valid(data)) { >+ file->time_is_set |= CTIME_IS_SET; >+ file->ctime = isodate7(data); >+ } > } > } > } >@@ -3033,7 +3147,7 @@ heap_add_entry(struct archive_read *a, struct heap_queue *heap, > return (ARCHIVE_FATAL); > } > new_pending_files = (struct file_info **) >- malloc(new_size * sizeof(new_pending_files[0])); >+ calloc(new_size, sizeof(new_pending_files[0])); > if (new_pending_files == NULL) { > archive_set_error(&a->archive, > ENOMEM, "Out of memory"); >@@ -3127,6 +3241,82 @@ toi(const void *p, int n) > return (0); > } > >+/* >+ * ECMA119/ISO9660 stores multi-byte integers in one of >+ * three different formats: >+ * * Little-endian (specified in section 7.2.1 and 7.3.1) >+ * * Big-endian (specified in section 7.2.2 and 7.3.2) >+ * * Both (specified in section 7.2.3 and 7.3.3) >+ * >+ * For values that follow section 7.2.3 (16-bit) or 7.3.3 (32-bit), we >+ * can check that the little-endian and big-endian forms agree with >+ * each other. This helps us avoid trying to decode files that are >+ * not really ISO images. >+ */ >+static int >+isValid723Integer(const unsigned char *p) { >+ return (p[0] == p[3] && p[1] == p[2]); >+} >+ >+static int >+isValid733Integer(const unsigned char *p) >+{ >+ return (p[0] == p[7] >+ && p[1] == p[6] >+ && p[2] == p[5] >+ && p[3] == p[4]); >+} >+ >+static int >+isodate7_valid(const unsigned char *v) >+{ >+ int year = v[0]; >+ int month = v[1]; >+ int day = v[2]; >+ int hour = v[3]; >+ int minute = v[4]; >+ int second = v[5]; >+ int gmt_off = (signed char)v[6]; >+ >+ /* ECMA-119 9.1.5 "If all seven values are zero, it shall mean >+ * that the date is unspecified" */ >+ if (year == 0 >+ && month == 0 >+ && day == 0 >+ && hour == 0 >+ && minute == 0 >+ && second == 0 >+ && gmt_off == 0) >+ return 0; >+ /* >+ * Sanity-test each individual field >+ */ >+ /* Year can have any value */ >+ /* Month must be 1-12 */ >+ if (month < 1 || month > 12) >+ return 0; >+ /* Day must be 1-31 */ >+ if (day < 1 || day > 31) >+ return 0; >+ /* Hour must be 0-23 */ >+ if (hour > 23) >+ return 0; >+ /* Minute must be 0-59 */ >+ if (minute > 59) >+ return 0; >+ /* second must be 0-59 according to ECMA-119 9.1.5 */ >+ /* BUT: we should probably allow for the time being in UTC, which >+ allows up to 61 seconds in a minute in certain cases */ >+ if (second > 61) >+ return 0; >+ /* Offset from GMT must be -48 to +52 */ >+ if (gmt_off < -48 || gmt_off > +52) >+ return 0; >+ >+ /* All tests pass, this is OK */ >+ return 1; >+} >+ > static time_t > isodate7(const unsigned char *v) > { >@@ -3153,6 +3343,67 @@ isodate7(const unsigned char *v) > return (t); > } > >+static int >+isodate17_valid(const unsigned char *v) >+{ >+ /* First 16 bytes are all ASCII digits */ >+ for (int i = 0; i < 16; i++) { >+ if (v[i] < '0' || v[i] > '9') >+ return 0; >+ } >+ >+ int year = (v[0] - '0') * 1000 + (v[1] - '0') * 100 >+ + (v[2] - '0') * 10 + (v[3] - '0'); >+ int month = (v[4] - '0') * 10 + (v[5] - '0'); >+ int day = (v[6] - '0') * 10 + (v[7] - '0'); >+ int hour = (v[8] - '0') * 10 + (v[9] - '0'); >+ int minute = (v[10] - '0') * 10 + (v[11] - '0'); >+ int second = (v[12] - '0') * 10 + (v[13] - '0'); >+ int hundredths = (v[14] - '0') * 10 + (v[15] - '0'); >+ int gmt_off = (signed char)v[16]; >+ >+ if (year == 0 && month == 0 && day == 0 >+ && hour == 0 && minute == 0 && second == 0 >+ && hundredths == 0 && gmt_off == 0) >+ return 0; >+ /* >+ * Sanity-test each individual field >+ */ >+ >+ /* Year must be 1900-2300 */ >+ /* (Not specified in ECMA-119, but these seem >+ like reasonable limits. */ >+ if (year < 1900 || year > 2300) >+ return 0; >+ /* Month must be 1-12 */ >+ if (month < 1 || month > 12) >+ return 0; >+ /* Day must be 1-31 */ >+ if (day < 1 || day > 31) >+ return 0; >+ /* Hour must be 0-23 */ >+ if (hour > 23) >+ return 0; >+ /* Minute must be 0-59 */ >+ if (minute > 59) >+ return 0; >+ /* second must be 0-59 according to ECMA-119 9.1.5 */ >+ /* BUT: we should probably allow for the time being in UTC, which >+ allows up to 61 seconds in a minute in certain cases */ >+ if (second > 61) >+ return 0; >+ /* Hundredths must be 0-99 */ >+ if (hundredths > 99) >+ return 0; >+ /* Offset from GMT must be -48 to +52 */ >+ if (gmt_off < -48 || gmt_off > +52) >+ return 0; >+ >+ /* All tests pass, this is OK */ >+ return 1; >+ >+} >+ > static time_t > isodate17(const unsigned char *v) > { >@@ -3164,7 +3415,7 @@ isodate17(const unsigned char *v) > tm.tm_year = (v[0] - '0') * 1000 + (v[1] - '0') * 100 > + (v[2] - '0') * 10 + (v[3] - '0') > - 1900; >- tm.tm_mon = (v[4] - '0') * 10 + (v[5] - '0'); >+ tm.tm_mon = (v[4] - '0') * 10 + (v[5] - '0') - 1; > tm.tm_mday = (v[6] - '0') * 10 + (v[7] - '0'); > tm.tm_hour = (v[8] - '0') * 10 + (v[9] - '0'); > tm.tm_min = (v[10] - '0') * 10 + (v[11] - '0'); >diff --git a/contrib/libarchive/libarchive/archive_read_support_format_lha.c b/contrib/libarchive/libarchive/archive_read_support_format_lha.c >index ae5a1d7d668e..c7cbad272ead 100644 >--- a/contrib/libarchive/libarchive/archive_read_support_format_lha.c >+++ b/contrib/libarchive/libarchive/archive_read_support_format_lha.c >@@ -227,7 +227,7 @@ static int lha_read_file_header_1(struct archive_read *, struct lha *); > static int lha_read_file_header_2(struct archive_read *, struct lha *); > static int lha_read_file_header_3(struct archive_read *, struct lha *); > static int lha_read_file_extended_header(struct archive_read *, >- struct lha *, uint16_t *, int, size_t, size_t *); >+ struct lha *, uint16_t *, int, uint64_t, size_t *); > static size_t lha_check_header_format(const void *); > static int lha_skip_sfx(struct archive_read *); > static time_t lha_dos_time(const unsigned char *); >@@ -265,7 +265,7 @@ archive_read_support_format_lha(struct archive *_a) > archive_check_magic(_a, ARCHIVE_READ_MAGIC, > ARCHIVE_STATE_NEW, "archive_read_support_format_lha"); > >- lha = (struct lha *)calloc(1, sizeof(*lha)); >+ lha = calloc(1, sizeof(*lha)); > if (lha == NULL) { > archive_set_error(&a->archive, ENOMEM, > "Can't allocate lha data"); >@@ -945,7 +945,7 @@ lha_read_file_header_1(struct archive_read *a, struct lha *lha) > > /* Read extended headers */ > err2 = lha_read_file_extended_header(a, lha, NULL, 2, >- (size_t)(lha->compsize + 2), &extdsize); >+ (uint64_t)(lha->compsize + 2), &extdsize); > if (err2 < ARCHIVE_WARN) > return (err2); > if (err2 < err) >@@ -1138,7 +1138,7 @@ lha_read_file_header_3(struct archive_read *a, struct lha *lha) > */ > static int > lha_read_file_extended_header(struct archive_read *a, struct lha *lha, >- uint16_t *crc, int sizefield_length, size_t limitsize, size_t *total_size) >+ uint16_t *crc, int sizefield_length, uint64_t limitsize, size_t *total_size) > { > const void *h; > const unsigned char *extdheader; >@@ -1187,8 +1187,7 @@ lha_read_file_extended_header(struct archive_read *a, struct lha *lha, > } > > /* Sanity check to the extended header size. */ >- if (((uint64_t)*total_size + extdsize) > >- (uint64_t)limitsize || >+ if (((uint64_t)*total_size + extdsize) > limitsize || > extdsize <= (size_t)sizefield_length) > goto invalid; > >diff --git a/contrib/libarchive/libarchive/archive_read_support_format_mtree.c b/contrib/libarchive/libarchive/archive_read_support_format_mtree.c >index 6971228eefad..ba0e49de2408 100644 >--- a/contrib/libarchive/libarchive/archive_read_support_format_mtree.c >+++ b/contrib/libarchive/libarchive/archive_read_support_format_mtree.c >@@ -273,7 +273,7 @@ archive_read_support_format_mtree(struct archive *_a) > archive_check_magic(_a, ARCHIVE_READ_MAGIC, > ARCHIVE_STATE_NEW, "archive_read_support_format_mtree"); > >- mtree = (struct mtree *)calloc(1, sizeof(*mtree)); >+ mtree = calloc(1, sizeof(*mtree)); > if (mtree == NULL) { > archive_set_error(&a->archive, ENOMEM, > "Can't allocate mtree data"); >diff --git a/contrib/libarchive/libarchive/archive_read_support_format_rar.c b/contrib/libarchive/libarchive/archive_read_support_format_rar.c >index 4fc6626cacfd..9cf4d639a79d 100644 >--- a/contrib/libarchive/libarchive/archive_read_support_format_rar.c >+++ b/contrib/libarchive/libarchive/archive_read_support_format_rar.c >@@ -432,7 +432,7 @@ static int make_table_recurse(struct archive_read *, struct huffman_code *, int, > struct huffman_table_entry *, int, int); > static int expand(struct archive_read *, int64_t *); > static int copy_from_lzss_window_to_unp(struct archive_read *, const void **, >- int64_t, int); >+ int64_t, size_t); > static const void *rar_read_ahead(struct archive_read *, size_t, ssize_t *); > static int parse_filter(struct archive_read *, const uint8_t *, uint16_t, > uint8_t); >@@ -734,7 +734,7 @@ archive_read_support_format_rar(struct archive *_a) > archive_check_magic(_a, ARCHIVE_READ_MAGIC, ARCHIVE_STATE_NEW, > "archive_read_support_format_rar"); > >- rar = (struct rar *)calloc(1, sizeof(*rar)); >+ rar = calloc(1, sizeof(*rar)); > if (rar == NULL) > { > archive_set_error(&a->archive, ENOMEM, "Can't allocate rar data"); >@@ -1371,8 +1371,10 @@ read_header(struct archive_read *a, struct archive_entry *entry, > char unp_size[8]; > int ttime; > struct archive_string_conv *sconv, *fn_sconv; >- unsigned long crc32_val; >+ uint32_t crc32_computed, crc32_read; > int ret = (ARCHIVE_OK), ret2; >+ char *newptr; >+ size_t newsize; > > rar = (struct rar *)(a->format->data); > >@@ -1400,7 +1402,7 @@ read_header(struct archive_read *a, struct archive_entry *entry, > "Invalid header size"); > return (ARCHIVE_FATAL); > } >- crc32_val = crc32(0, (const unsigned char *)p + 2, 7 - 2); >+ crc32_computed = crc32(0, (const unsigned char *)p + 2, 7 - 2); > __archive_read_consume(a, 7); > > if (!(rar->file_flags & FHD_SOLID)) >@@ -1434,8 +1436,9 @@ read_header(struct archive_read *a, struct archive_entry *entry, > return (ARCHIVE_FATAL); > > /* File Header CRC check. */ >- crc32_val = crc32(crc32_val, h, (unsigned)(header_size - 7)); >- if ((crc32_val & 0xffff) != archive_le16dec(rar_header.crc)) { >+ crc32_computed = crc32(crc32_computed, h, (unsigned)(header_size - 7)); >+ crc32_read = archive_le16dec(rar_header.crc); >+ if ((crc32_computed & 0xffff) != crc32_read) { > #ifndef DONT_FAIL_ON_CRC_ERROR > archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, > "Header CRC error"); >@@ -1469,6 +1472,11 @@ read_header(struct archive_read *a, struct archive_entry *entry, > > if (rar->file_flags & FHD_LARGE) > { >+ if (p + 8 > endp) { >+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, >+ "Invalid header size"); >+ return (ARCHIVE_FATAL); >+ } > memcpy(packed_size, file_header.pack_size, 4); > memcpy(packed_size + 4, p, 4); /* High pack size */ > p += 4; >@@ -1514,8 +1522,7 @@ read_header(struct archive_read *a, struct archive_entry *entry, > return (ARCHIVE_FATAL); > } > if (rar->filename_allocated < filename_size * 2 + 2) { >- char *newptr; >- size_t newsize = filename_size * 2 + 2; >+ newsize = filename_size * 2 + 2; > newptr = realloc(rar->filename, newsize); > if (newptr == NULL) { > archive_set_error(&a->archive, ENOMEM, >@@ -1539,7 +1546,7 @@ read_header(struct archive_read *a, struct archive_entry *entry, > fn_end = filename_size * 2; > filename_size = 0; > offset = (unsigned)strlen(filename) + 1; >- highbyte = *(p + offset++); >+ highbyte = offset >= end ? 0 : *(p + offset++); > flagbits = 0; > flagbyte = 0; > while (offset < end && filename_size < fn_end) >@@ -1554,14 +1561,22 @@ read_header(struct archive_read *a, struct archive_entry *entry, > switch((flagbyte >> flagbits) & 3) > { > case 0: >+ if (offset >= end) >+ continue; > filename[filename_size++] = '\0'; > filename[filename_size++] = *(p + offset++); > break; > case 1: >+ if (offset >= end) >+ continue; > filename[filename_size++] = highbyte; > filename[filename_size++] = *(p + offset++); > break; > case 2: >+ if (offset >= end - 1) { >+ offset = end; >+ continue; >+ } > filename[filename_size++] = *(p + offset + 1); > filename[filename_size++] = *(p + offset); > offset += 2; >@@ -1569,9 +1584,15 @@ read_header(struct archive_read *a, struct archive_entry *entry, > case 3: > { > char extra, high; >- uint8_t length = *(p + offset++); >+ uint8_t length; > >+ if (offset >= end) >+ continue; >+ >+ length = *(p + offset++); > if (length & 0x80) { >+ if (offset >= end) >+ continue; > extra = *(p + offset++); > high = (char)highbyte; > } else >@@ -1652,13 +1673,16 @@ read_header(struct archive_read *a, struct archive_entry *entry, > rar->cursor++; > if (rar->cursor >= rar->nodes) > { >- rar->nodes++; >- if ((rar->dbo = >- realloc(rar->dbo, sizeof(*rar->dbo) * rar->nodes)) == NULL) >+ struct data_block_offsets *newdbo; >+ >+ newsize = sizeof(*rar->dbo) * (rar->nodes + 1); >+ if ((newdbo = realloc(rar->dbo, newsize)) == NULL) > { > archive_set_error(&a->archive, ENOMEM, "Couldn't allocate memory."); > return (ARCHIVE_FATAL); > } >+ rar->dbo = newdbo; >+ rar->nodes++; > rar->dbo[rar->cursor].header_size = header_size; > rar->dbo[rar->cursor].start_offset = -1; > rar->dbo[rar->cursor].end_offset = -1; >@@ -1678,9 +1702,14 @@ read_header(struct archive_read *a, struct archive_entry *entry, > return (ARCHIVE_FATAL); > } > >- rar->filename_save = (char*)realloc(rar->filename_save, >- filename_size + 1); >- memcpy(rar->filename_save, rar->filename, filename_size + 1); >+ newsize = filename_size + 1; >+ if ((newptr = realloc(rar->filename_save, newsize)) == NULL) >+ { >+ archive_set_error(&a->archive, ENOMEM, "Couldn't allocate memory."); >+ return (ARCHIVE_FATAL); >+ } >+ rar->filename_save = newptr; >+ memcpy(rar->filename_save, rar->filename, newsize); > rar->filename_save_size = filename_size; > > /* Set info for seeking */ >@@ -2060,7 +2089,7 @@ read_data_compressed(struct archive_read *a, const void **buff, size_t *size, > bs = rar->unp_buffer_size - rar->unp_offset; > else > bs = (size_t)rar->bytes_uncopied; >- ret = copy_from_lzss_window_to_unp(a, buff, rar->offset, (int)bs); >+ ret = copy_from_lzss_window_to_unp(a, buff, rar->offset, bs); > if (ret != ARCHIVE_OK) > return (ret); > rar->offset += bs; >@@ -2213,7 +2242,7 @@ read_data_compressed(struct archive_read *a, const void **buff, size_t *size, > bs = rar->unp_buffer_size - rar->unp_offset; > else > bs = (size_t)rar->bytes_uncopied; >- ret = copy_from_lzss_window_to_unp(a, buff, rar->offset, (int)bs); >+ ret = copy_from_lzss_window_to_unp(a, buff, rar->offset, bs); > if (ret != ARCHIVE_OK) > return (ret); > rar->offset += bs; >@@ -2579,8 +2608,7 @@ read_next_symbol(struct archive_read *a, struct huffman_code *code) > rar_br_consume(br, code->tablesize); > > node = value; >- while (!(code->tree[node].branches[0] == >- code->tree[node].branches[1])) >+ while (code->tree[node].branches[0] != code->tree[node].branches[1]) > { > if (!rar_br_read_ahead(a, br, 1)) { > archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, >@@ -2775,9 +2803,7 @@ make_table(struct archive_read *a, struct huffman_code *code) > else > code->tablesize = code->maxlength; > >- code->table = >- (struct huffman_table_entry *)calloc(1, sizeof(*code->table) >- * ((size_t)1 << code->tablesize)); >+ code->table = calloc(1U << code->tablesize, sizeof(*code->table)); > > return make_table_recurse(a, code, 0, code->table, 0, code->tablesize); > } >@@ -2955,7 +2981,7 @@ expand(struct archive_read *a, int64_t *end) > > if ((lensymbol = read_next_symbol(a, &rar->lengthcode)) < 0) > goto bad_data; >- if (lensymbol > lengthb_min) >+ if (lensymbol >= lengthb_min) > goto bad_data; > len = lengthbases[lensymbol] + 2; > if (lengthbits[lensymbol] > 0) { >@@ -2987,7 +3013,7 @@ expand(struct archive_read *a, int64_t *end) > } > else > { >- if (symbol-271 > lengthb_min) >+ if (symbol-271 >= lengthb_min) > goto bad_data; > len = lengthbases[symbol-271]+3; > if(lengthbits[symbol-271] > 0) { >@@ -2999,7 +3025,7 @@ expand(struct archive_read *a, int64_t *end) > > if ((offssymbol = read_next_symbol(a, &rar->offsetcode)) < 0) > goto bad_data; >- if (offssymbol > offsetb_min) >+ if (offssymbol >= offsetb_min) > goto bad_data; > offs = offsetbases[offssymbol]+1; > if(offsetbits[offssymbol] > 0) >@@ -3094,11 +3120,16 @@ copy_from_lzss_window(struct archive_read *a, void *buffer, > > static int > copy_from_lzss_window_to_unp(struct archive_read *a, const void **buffer, >- int64_t startpos, int length) >+ int64_t startpos, size_t length) > { > int windowoffs, firstpart; > struct rar *rar = (struct rar *)(a->format->data); > >+ if (length > rar->unp_buffer_size) >+ { >+ goto fatal; >+ } >+ > if (!rar->unp_buffer) > { > if ((rar->unp_buffer = malloc(rar->unp_buffer_size)) == NULL) >@@ -3110,17 +3141,17 @@ copy_from_lzss_window_to_unp(struct archive_read *a, const void **buffer, > } > > windowoffs = lzss_offset_for_position(&rar->lzss, startpos); >- if(windowoffs + length <= lzss_size(&rar->lzss)) { >+ if(windowoffs + length <= (size_t)lzss_size(&rar->lzss)) { > memcpy(&rar->unp_buffer[rar->unp_offset], &rar->lzss.window[windowoffs], > length); >- } else if (length <= lzss_size(&rar->lzss)) { >+ } else if (length <= (size_t)lzss_size(&rar->lzss)) { > firstpart = lzss_size(&rar->lzss) - windowoffs; > if (firstpart < 0) { > archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, > "Bad RAR file data"); > return (ARCHIVE_FATAL); > } >- if (firstpart < length) { >+ if ((size_t)firstpart < length) { > memcpy(&rar->unp_buffer[rar->unp_offset], > &rar->lzss.window[windowoffs], firstpart); > memcpy(&rar->unp_buffer[rar->unp_offset + firstpart], >@@ -3130,16 +3161,19 @@ copy_from_lzss_window_to_unp(struct archive_read *a, const void **buffer, > &rar->lzss.window[windowoffs], length); > } > } else { >- archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, >- "Bad RAR file data"); >- return (ARCHIVE_FATAL); >+ goto fatal; > } >- rar->unp_offset += length; >+ rar->unp_offset += (unsigned int) length; > if (rar->unp_offset >= rar->unp_buffer_size) > *buffer = rar->unp_buffer; > else > *buffer = NULL; > return (ARCHIVE_OK); >+ >+fatal: >+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, >+ "Bad RAR file data"); >+ return (ARCHIVE_FATAL); > } > > static const void * >@@ -3325,7 +3359,10 @@ create_filter(struct rar_program_code *prog, const uint8_t *globaldata, uint32_t > filter->globaldatalen = globaldatalen > PROGRAM_SYSTEM_GLOBAL_SIZE ? globaldatalen : PROGRAM_SYSTEM_GLOBAL_SIZE; > filter->globaldata = calloc(1, filter->globaldatalen); > if (!filter->globaldata) >+ { >+ free(filter); > return NULL; >+ } > if (globaldata) > memcpy(filter->globaldata, globaldata, globaldatalen); > if (registers) >@@ -3352,7 +3389,7 @@ run_filters(struct archive_read *a) > if (filters == NULL || filter == NULL) > return (0); > >- start = filters->filterstart; >+ start = (size_t)filters->filterstart; > end = start + filter->blocklength; > > filters->filterstart = INT64_MAX; >@@ -3389,10 +3426,16 @@ run_filters(struct archive_read *a) > return 0; > } > >+ if (filter->blocklength > VM_MEMORY_SIZE) >+ { >+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, "Bad RAR file data"); >+ return 0; >+ } >+ > ret = copy_from_lzss_window(a, filters->vm->memory, start, filter->blocklength); > if (ret != ARCHIVE_OK) > return 0; >- if (!execute_filter(a, filter, filters->vm, rar->offset)) >+ if (!execute_filter(a, filter, filters->vm, (size_t)rar->offset)) > return 0; > > lastfilteraddress = filter->filteredblockaddress; >@@ -3404,7 +3447,7 @@ run_filters(struct archive_read *a) > while ((filter = filters->stack) != NULL && (int64_t)filter->blockstartpos == filters->filterstart && filter->blocklength == lastfilterlength) > { > memmove(&filters->vm->memory[0], &filters->vm->memory[lastfilteraddress], lastfilterlength); >- if (!execute_filter(a, filter, filters->vm, rar->offset)) >+ if (!execute_filter(a, filter, filters->vm, (size_t)rar->offset)) > return 0; > > lastfilteraddress = filter->filteredblockaddress; >@@ -3645,7 +3688,7 @@ execute_filter_e8(struct rar_filter *filter, struct rar_virtual_machine *vm, siz > { > uint32_t currpos = (uint32_t)pos + i + 1; > int32_t address = (int32_t)vm_read_32(vm, i + 1); >- if (address < 0 && currpos >= (uint32_t)-address) >+ if (address < 0 && currpos >= (~(uint32_t)address + 1)) > vm_write_32(vm, i + 1, address + filesize); > else if (address >= 0 && (uint32_t)address < filesize) > vm_write_32(vm, i + 1, address - currpos); >@@ -3668,7 +3711,7 @@ execute_filter_rgb(struct rar_filter *filter, struct rar_virtual_machine *vm) > uint8_t *src, *dst; > uint32_t i, j; > >- if (blocklength > PROGRAM_WORK_SIZE / 2 || stride > blocklength) >+ if (blocklength > PROGRAM_WORK_SIZE / 2 || stride > blocklength || blocklength < 3 || byteoffset > 2) > return 0; > > src = &vm->memory[0]; >@@ -3678,6 +3721,13 @@ execute_filter_rgb(struct rar_filter *filter, struct rar_virtual_machine *vm) > uint8_t *prev = dst + i - stride; > for (j = i; j < blocklength; j += 3) > { >+ /* >+ * The src block should not overlap with the dst block. >+ * If so it would be better to consider this archive is broken. >+ */ >+ if (src >= dst) >+ return 0; >+ > if (prev >= dst) > { > uint32_t delta1 = abs(prev[3] - prev[0]); >diff --git a/contrib/libarchive/libarchive/archive_read_support_format_rar5.c b/contrib/libarchive/libarchive/archive_read_support_format_rar5.c >index e8846a5b0d0d..b99105d0cd33 100644 >--- a/contrib/libarchive/libarchive/archive_read_support_format_rar5.c >+++ b/contrib/libarchive/libarchive/archive_read_support_format_rar5.c >@@ -210,7 +210,11 @@ struct comp_state { > or just a part of it. */ > uint8_t block_parsing_finished : 1; > >- signed int notused : 4; >+ /* Flag used to indicate that a previous file using this buffer was >+ encrypted, meaning no data in the buffer can be trusted */ >+ uint8_t data_encrypted : 1; >+ >+ signed int notused : 3; > > int flags; /* Uncompression flags. */ > int method; /* Uncompression algorithm method. */ >@@ -220,7 +224,7 @@ struct comp_state { > decompression. */ > uint8_t* filtered_buf; /* Buffer used when applying filters. */ > const uint8_t* block_buf; /* Buffer used when merging blocks. */ >- size_t window_mask; /* Convenience field; window_size - 1. */ >+ ssize_t window_mask; /* Convenience field; window_size - 1. */ > int64_t write_ptr; /* This amount of data has been unpacked > in the window buffer. */ > int64_t last_write_ptr; /* This amount of data has been stored in >@@ -352,6 +356,12 @@ struct rar5 { > /* The header of currently processed RARv5 block. Used in main > * decompression logic loop. */ > struct compressed_block_header last_block_hdr; >+ >+ /* >+ * Custom field to denote that this archive contains encrypted entries >+ */ >+ int has_encrypted_entries; >+ int headers_are_encrypted; > }; > > /* Forward function declarations. */ >@@ -361,6 +371,7 @@ static int verify_global_checksums(struct archive_read* a); > static int rar5_read_data_skip(struct archive_read *a); > static int push_data_ready(struct archive_read* a, struct rar5* rar, > const uint8_t* buf, size_t size, int64_t offset); >+static void clear_data_ready_stack(struct rar5* rar); > > /* CDE_xxx = Circular Double Ended (Queue) return values. */ > enum CDE_RETURN_VALUES { >@@ -505,7 +516,7 @@ static inline struct rar5* get_context(struct archive_read* a) { > } > > /* Convenience functions used by filter implementations. */ >-static void circular_memcpy(uint8_t* dst, uint8_t* window, const uint64_t mask, >+static void circular_memcpy(uint8_t* dst, uint8_t* window, const ssize_t mask, > int64_t start, int64_t end) > { > if((start & mask) > (end & mask)) { >@@ -534,8 +545,7 @@ static void write_filter_data(struct rar5* rar, uint32_t offset, > > /* Allocates a new filter descriptor and adds it to the filter array. */ > static struct filter_info* add_new_filter(struct rar5* rar) { >- struct filter_info* f = >- (struct filter_info*) calloc(1, sizeof(struct filter_info)); >+ struct filter_info* f = calloc(1, sizeof(*f)); > > if(!f) { > return NULL; >@@ -652,6 +662,7 @@ static int run_filter(struct archive_read* a, struct filter_info* flt) { > int ret; > struct rar5* rar = get_context(a); > >+ clear_data_ready_stack(rar); > free(rar->cstate.filtered_buf); > > rar->cstate.filtered_buf = malloc(flt->block_length); >@@ -709,7 +720,7 @@ static int run_filter(struct archive_read* a, struct filter_info* flt) { > static void push_data(struct archive_read* a, struct rar5* rar, > const uint8_t* buf, int64_t idx_begin, int64_t idx_end) > { >- const uint64_t wmask = rar->cstate.window_mask; >+ const ssize_t wmask = rar->cstate.window_mask; > const ssize_t solid_write_ptr = (rar->cstate.solid_offset + > rar->cstate.last_write_ptr) & wmask; > >@@ -1246,7 +1257,7 @@ static int process_main_locator_extra_block(struct archive_read* a, > } > > static int parse_file_extra_hash(struct archive_read* a, struct rar5* rar, >- ssize_t* extra_data_size) >+ int64_t* extra_data_size) > { > size_t hash_type = 0; > size_t value_len; >@@ -1296,7 +1307,7 @@ static uint64_t time_win_to_unix(uint64_t win_time) { > } > > static int parse_htime_item(struct archive_read* a, char unix_time, >- uint64_t* where, ssize_t* extra_data_size) >+ uint64_t* where, int64_t* extra_data_size) > { > if(unix_time) { > uint32_t time_val; >@@ -1318,7 +1329,7 @@ static int parse_htime_item(struct archive_read* a, char unix_time, > } > > static int parse_file_extra_version(struct archive_read* a, >- struct archive_entry* e, ssize_t* extra_data_size) >+ struct archive_entry* e, int64_t* extra_data_size) > { > size_t flags = 0; > size_t version = 0; >@@ -1372,7 +1383,7 @@ static int parse_file_extra_version(struct archive_read* a, > } > > static int parse_file_extra_htime(struct archive_read* a, >- struct archive_entry* e, struct rar5* rar, ssize_t* extra_data_size) >+ struct archive_entry* e, struct rar5* rar, int64_t* extra_data_size) > { > char unix_time = 0; > size_t flags = 0; >@@ -1425,7 +1436,7 @@ static int parse_file_extra_htime(struct archive_read* a, > } > > static int parse_file_extra_redir(struct archive_read* a, >- struct archive_entry* e, struct rar5* rar, ssize_t* extra_data_size) >+ struct archive_entry* e, struct rar5* rar, int64_t* extra_data_size) > { > uint64_t value_size = 0; > size_t target_size = 0; >@@ -1448,9 +1459,6 @@ static int parse_file_extra_redir(struct archive_read* a, > return ARCHIVE_EOF; > *extra_data_size -= target_size + 1; > >- if(!read_ahead(a, target_size, &p)) >- return ARCHIVE_EOF; >- > if(target_size > (MAX_NAME_IN_CHARS - 1)) { > archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, > "Link target is too long"); >@@ -1463,6 +1471,9 @@ static int parse_file_extra_redir(struct archive_read* a, > return ARCHIVE_FATAL; > } > >+ if(!read_ahead(a, target_size, &p)) >+ return ARCHIVE_EOF; >+ > memcpy(target_utf8_buf, p, target_size); > target_utf8_buf[target_size] = 0; > >@@ -1496,7 +1507,7 @@ static int parse_file_extra_redir(struct archive_read* a, > } > > static int parse_file_extra_owner(struct archive_read* a, >- struct archive_entry* e, ssize_t* extra_data_size) >+ struct archive_entry* e, int64_t* extra_data_size) > { > uint64_t flags = 0; > uint64_t value_size = 0; >@@ -1576,15 +1587,15 @@ static int parse_file_extra_owner(struct archive_read* a, > } > > static int process_head_file_extra(struct archive_read* a, >- struct archive_entry* e, struct rar5* rar, ssize_t extra_data_size) >+ struct archive_entry* e, struct rar5* rar, int64_t extra_data_size) > { >- size_t extra_field_size; >- size_t extra_field_id = 0; >+ uint64_t extra_field_size; >+ uint64_t extra_field_id = 0; > int ret = ARCHIVE_FATAL; >- size_t var_size; >+ uint64_t var_size; > > while(extra_data_size > 0) { >- if(!read_var_sized(a, &extra_field_size, &var_size)) >+ if(!read_var(a, &extra_field_size, &var_size)) > return ARCHIVE_EOF; > > extra_data_size -= var_size; >@@ -1592,9 +1603,10 @@ static int process_head_file_extra(struct archive_read* a, > return ARCHIVE_EOF; > } > >- if(!read_var_sized(a, &extra_field_id, &var_size)) >+ if(!read_var(a, &extra_field_id, &var_size)) > return ARCHIVE_EOF; > >+ extra_field_size -= var_size; > extra_data_size -= var_size; > if(ARCHIVE_OK != consume(a, var_size)) { > return ARCHIVE_EOF; >@@ -1622,12 +1634,19 @@ static int process_head_file_extra(struct archive_read* a, > &extra_data_size); > break; > case EX_CRYPT: >+ /* Mark the entry as encrypted */ >+ archive_entry_set_is_data_encrypted(e, 1); >+ rar->has_encrypted_entries = 1; >+ rar->cstate.data_encrypted = 1; > /* fallthrough */ > case EX_SUBDATA: > /* fallthrough */ > default: > /* Skip unsupported entry. */ >- return consume(a, extra_data_size); >+ extra_data_size -= extra_field_size; >+ if (ARCHIVE_OK != consume(a, extra_field_size)) { >+ return ARCHIVE_EOF; >+ } > } > } > >@@ -1642,7 +1661,7 @@ static int process_head_file_extra(struct archive_read* a, > static int process_head_file(struct archive_read* a, struct rar5* rar, > struct archive_entry* entry, size_t block_flags) > { >- ssize_t extra_data_size = 0; >+ int64_t extra_data_size = 0; > size_t data_size = 0; > size_t file_flags = 0; > size_t file_attr = 0; >@@ -1682,12 +1701,12 @@ static int process_head_file(struct archive_read* a, struct rar5* rar, > } > > if(block_flags & HFL_EXTRA_DATA) { >- size_t edata_size = 0; >- if(!read_var_sized(a, &edata_size, NULL)) >+ uint64_t edata_size = 0; >+ if(!read_var(a, &edata_size, NULL)) > return ARCHIVE_EOF; > > /* Intentional type cast from unsigned to signed. */ >- extra_data_size = (ssize_t) edata_size; >+ extra_data_size = (int64_t) edata_size; > } > > if(block_flags & HFL_DATA) { >@@ -1745,9 +1764,11 @@ static int process_head_file(struct archive_read* a, struct rar5* rar, > rar->file.solid = (compression_info & SOLID) > 0; > > /* Archives which declare solid files without initializing the window >- * buffer first are invalid. */ >+ * buffer first are invalid, unless previous data was encrypted, in >+ * which case we may never have had the chance */ > >- if(rar->file.solid > 0 && rar->cstate.window_buf == NULL) { >+ if(rar->file.solid > 0 && rar->cstate.data_encrypted == 0 && >+ rar->cstate.window_buf == NULL) { > archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, > "Declared solid file, but no window buffer " > "initialized yet."); >@@ -1776,15 +1797,24 @@ static int process_head_file(struct archive_read* a, struct rar5* rar, > return ARCHIVE_FATAL; > } > } >+ else >+ rar->cstate.data_encrypted = 0; /* Reset for new buffer */ > > if(rar->cstate.window_size < (ssize_t) window_size && > rar->cstate.window_buf) > { >+ /* The `data_ready` stack contains pointers to the `window_buf` or >+ * `filtered_buf` buffers. Since we're about to reallocate the first >+ * buffer, some of those pointers could become invalid. Therefore, we >+ * need to dispose of all entries from the stack before attempting the >+ * realloc. */ >+ clear_data_ready_stack(rar); >+ > /* If window_buf has been allocated before, reallocate it, so > * that its size will match new window_size. */ > > uint8_t* new_window_buf = >- realloc(rar->cstate.window_buf, window_size); >+ realloc(rar->cstate.window_buf, (size_t) window_size); > > if(!new_window_buf) { > archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER, >@@ -1837,27 +1867,25 @@ static int process_head_file(struct archive_read* a, struct rar5* rar, > > if (file_attr & (ATTR_READONLY | ATTR_HIDDEN | ATTR_SYSTEM)) { > char *fflags_text, *ptr; >- /* allocate for "rdonly,hidden,system," */ >- fflags_text = malloc(22 * sizeof(char)); >+ /* allocate for ",rdonly,hidden,system" */ >+ fflags_text = malloc(22 * sizeof(*fflags_text)); > if (fflags_text != NULL) { > ptr = fflags_text; > if (file_attr & ATTR_READONLY) { >- strcpy(ptr, "rdonly,"); >+ strcpy(ptr, ",rdonly"); > ptr = ptr + 7; > } > if (file_attr & ATTR_HIDDEN) { >- strcpy(ptr, "hidden,"); >+ strcpy(ptr, ",hidden"); > ptr = ptr + 7; > } > if (file_attr & ATTR_SYSTEM) { >- strcpy(ptr, "system,"); >+ strcpy(ptr, ",system"); > ptr = ptr + 7; > } > if (ptr > fflags_text) { >- /* Delete trailing comma */ >- *(ptr - 1) = '\0'; > archive_entry_copy_fflags_text(entry, >- fflags_text); >+ fflags_text + 1); > } > free(fflags_text); > } >@@ -1876,9 +1904,6 @@ static int process_head_file(struct archive_read* a, struct rar5* rar, > if(!read_var_sized(a, &name_size, NULL)) > return ARCHIVE_EOF; > >- if(!read_ahead(a, name_size, &p)) >- return ARCHIVE_EOF; >- > if(name_size > (MAX_NAME_IN_CHARS - 1)) { > archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, > "Filename is too long"); >@@ -1893,6 +1918,9 @@ static int process_head_file(struct archive_read* a, struct rar5* rar, > return ARCHIVE_FATAL; > } > >+ if(!read_ahead(a, name_size, &p)) >+ return ARCHIVE_EOF; >+ > memcpy(name_utf8_buf, p, name_size); > name_utf8_buf[name_size] = 0; > if(ARCHIVE_OK != consume(a, name_size)) { >@@ -1980,7 +2008,7 @@ static int process_head_main(struct archive_read* a, struct rar5* rar, > struct archive_entry* entry, size_t block_flags) > { > int ret; >- size_t extra_data_size = 0; >+ uint64_t extra_data_size = 0; > size_t extra_field_size = 0; > size_t extra_field_id = 0; > size_t archive_flags = 0; >@@ -2002,7 +2030,7 @@ static int process_head_main(struct archive_read* a, struct rar5* rar, > (void) entry; > > if(block_flags & HFL_EXTRA_DATA) { >- if(!read_var_sized(a, &extra_data_size, NULL)) >+ if(!read_var(a, &extra_data_size, NULL)) > return ARCHIVE_EOF; > } else { > extra_data_size = 0; >@@ -2229,10 +2257,12 @@ static int process_base_block(struct archive_read* a, > /* Verify the CRC32 of the header data. */ > computed_crc = (uint32_t) crc32(0, p, (int) hdr_size); > if(computed_crc != hdr_crc) { >+#ifndef DONT_FAIL_ON_CRC_ERROR > archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, > "Header CRC error"); > > return ARCHIVE_FATAL; >+#endif > } > > /* If the checksum is OK, we proceed with parsing. */ >@@ -2271,6 +2301,10 @@ static int process_base_block(struct archive_read* a, > ret = process_head_file(a, rar, entry, header_flags); > return ret; > case HEAD_CRYPT: >+ archive_entry_set_is_metadata_encrypted(entry, 1); >+ archive_entry_set_is_data_encrypted(entry, 1); >+ rar->has_encrypted_entries = 1; >+ rar->headers_are_encrypted = 1; > archive_set_error(&a->archive, > ARCHIVE_ERRNO_FILE_FORMAT, > "Encryption is not supported"); >@@ -2415,6 +2449,14 @@ static int rar5_read_header(struct archive_read *a, > struct rar5* rar = get_context(a); > int ret; > >+ /* >+ * It should be sufficient to call archive_read_next_header() for >+ * a reader to determine if an entry is encrypted or not. >+ */ >+ if (rar->has_encrypted_entries == ARCHIVE_READ_FORMAT_ENCRYPTION_DONT_KNOW) { >+ rar->has_encrypted_entries = 0; >+ } >+ > if(rar->header_initialized == 0) { > init_header(a); > if ((ret = try_skip_sfx(a)) < ARCHIVE_WARN) >@@ -2453,6 +2495,8 @@ static void init_unpack(struct rar5* rar) { > rar->cstate.filtered_buf = NULL; > } > >+ clear_data_ready_stack(rar); >+ > rar->cstate.write_ptr = 0; > rar->cstate.last_write_ptr = 0; > >@@ -2983,7 +3027,7 @@ static int decode_code_length(struct archive_read* a, struct rar5* rar, > > static int copy_string(struct archive_read* a, int len, int dist) { > struct rar5* rar = get_context(a); >- const uint64_t cmask = rar->cstate.window_mask; >+ const ssize_t cmask = rar->cstate.window_mask; > const uint64_t write_ptr = rar->cstate.write_ptr + > rar->cstate.solid_offset; > int i; >@@ -3627,6 +3671,10 @@ static int use_data(struct rar5* rar, const void** buf, size_t* size, > return ARCHIVE_RETRY; > } > >+static void clear_data_ready_stack(struct rar5* rar) { >+ memset(&rar->cstate.dready, 0, sizeof(rar->cstate.dready)); >+} >+ > /* Pushes the `buf`, `size` and `offset` arguments to the rar->cstate.dready > * FIFO stack. Those values will be popped from this stack by the `use_data` > * function. */ >@@ -4069,6 +4117,16 @@ static int rar5_read_data(struct archive_read *a, const void **buff, > if (size) > *size = 0; > >+ if (rar->has_encrypted_entries == ARCHIVE_READ_FORMAT_ENCRYPTION_DONT_KNOW) { >+ rar->has_encrypted_entries = 0; >+ } >+ >+ if (rar->headers_are_encrypted || rar->cstate.data_encrypted) { >+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, >+ "Reading encrypted data is not currently supported"); >+ return ARCHIVE_FATAL; >+ } >+ > if(rar->file.dir > 0) { > /* Don't process any data if this file entry was declared > * as a directory. This is needed, because entries marked as >@@ -4120,11 +4178,14 @@ static int rar5_read_data(struct archive_read *a, const void **buff, > static int rar5_read_data_skip(struct archive_read *a) { > struct rar5* rar = get_context(a); > >- if(rar->main.solid) { >+ if(rar->main.solid && (rar->cstate.data_encrypted == 0)) { > /* In solid archives, instead of skipping the data, we need to > * extract it, and dispose the result. The side effect of this > * operation will be setting up the initial window buffer state >- * needed to be able to extract the selected file. */ >+ * needed to be able to extract the selected file. Note that >+ * this is only possible when data withing this solid block is >+ * not encrypted, in which case we'll skip and fail if the user >+ * tries to read data. */ > > int ret; > >@@ -4185,6 +4246,7 @@ static int rar5_cleanup(struct archive_read *a) { > > free(rar->cstate.window_buf); > free(rar->cstate.filtered_buf); >+ clear_data_ready_stack(rar); > > free(rar->vol.push_buf); > >@@ -4199,14 +4261,19 @@ static int rar5_cleanup(struct archive_read *a) { > > static int rar5_capabilities(struct archive_read * a) { > (void) a; >- return 0; >+ return (ARCHIVE_READ_FORMAT_CAPS_ENCRYPT_DATA >+ | ARCHIVE_READ_FORMAT_CAPS_ENCRYPT_METADATA); > } > > static int rar5_has_encrypted_entries(struct archive_read *_a) { >- (void) _a; >+ if (_a && _a->format) { >+ struct rar5 *rar = (struct rar5 *)_a->format->data; >+ if (rar) { >+ return rar->has_encrypted_entries; >+ } >+ } > >- /* Unsupported for now. */ >- return ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED; >+ return ARCHIVE_READ_FORMAT_ENCRYPTION_DONT_KNOW; > } > > static int rar5_init(struct rar5* rar) { >@@ -4215,6 +4282,12 @@ static int rar5_init(struct rar5* rar) { > if(CDE_OK != cdeque_init(&rar->cstate.filters, 8192)) > return ARCHIVE_FATAL; > >+ /* >+ * Until enough data has been read, we cannot tell about >+ * any encrypted entries yet. >+ */ >+ rar->has_encrypted_entries = ARCHIVE_READ_FORMAT_ENCRYPTION_DONT_KNOW; >+ > return ARCHIVE_OK; > } > >diff --git a/contrib/libarchive/libarchive/archive_read_support_format_raw.c b/contrib/libarchive/libarchive/archive_read_support_format_raw.c >index efdbf276baf7..e935396dda6f 100644 >--- a/contrib/libarchive/libarchive/archive_read_support_format_raw.c >+++ b/contrib/libarchive/libarchive/archive_read_support_format_raw.c >@@ -61,7 +61,7 @@ archive_read_support_format_raw(struct archive *_a) > archive_check_magic(_a, ARCHIVE_READ_MAGIC, > ARCHIVE_STATE_NEW, "archive_read_support_format_raw"); > >- info = (struct raw_info *)calloc(1, sizeof(*info)); >+ info = calloc(1, sizeof(*info)); > if (info == NULL) { > archive_set_error(&a->archive, ENOMEM, > "Can't allocate raw_info data"); >diff --git a/contrib/libarchive/libarchive/archive_read_support_format_tar.c b/contrib/libarchive/libarchive/archive_read_support_format_tar.c >index db36b9e07767..ecaf6c392d9a 100644 >--- a/contrib/libarchive/libarchive/archive_read_support_format_tar.c >+++ b/contrib/libarchive/libarchive/archive_read_support_format_tar.c >@@ -1,5 +1,5 @@ > /*- >- * Copyright (c) 2003-2007 Tim Kientzle >+ * Copyright (c) 2003-2023 Tim Kientzle > * Copyright (c) 2011-2012 Michihiro NAKAJIMA > * Copyright (c) 2016 Martin Matuska > * All rights reserved. >@@ -117,33 +117,27 @@ struct sparse_block { > }; > > struct tar { >- struct archive_string acl_text; > struct archive_string entry_pathname; > /* For "GNU.sparse.name" and other similar path extensions. */ > struct archive_string entry_pathname_override; >- struct archive_string entry_linkpath; > struct archive_string entry_uname; > struct archive_string entry_gname; >- struct archive_string longlink; >- struct archive_string longname; >- struct archive_string pax_header; >- struct archive_string pax_global; >+ struct archive_string entry_linkpath; > struct archive_string line; >- int pax_hdrcharset_binary; >- int header_recursion_depth; >+ int pax_hdrcharset_utf8; > int64_t entry_bytes_remaining; > int64_t entry_offset; > int64_t entry_padding; > int64_t entry_bytes_unconsumed; > int64_t realsize; >- int sparse_allowed; > struct sparse_block *sparse_list; > struct sparse_block *sparse_last; > int64_t sparse_offset; > int64_t sparse_numbytes; > int sparse_gnu_major; > int sparse_gnu_minor; >- char sparse_gnu_pending; >+ char sparse_gnu_attributes_seen; >+ char filetype; > > struct archive_string localname; > struct archive_string_conv *opt_sconv; >@@ -168,25 +162,26 @@ static int gnu_sparse_old_read(struct archive_read *, struct tar *, > static int gnu_sparse_old_parse(struct archive_read *, struct tar *, > const struct gnu_sparse *sparse, int length); > static int gnu_sparse_01_parse(struct archive_read *, struct tar *, >- const char *); >+ const char *, size_t); > static ssize_t gnu_sparse_10_read(struct archive_read *, struct tar *, >- size_t *); >+ size_t *); > static int header_Solaris_ACL(struct archive_read *, struct tar *, > struct archive_entry *, const void *, size_t *); > static int header_common(struct archive_read *, struct tar *, > struct archive_entry *, const void *); > static int header_old_tar(struct archive_read *, struct tar *, > struct archive_entry *, const void *); >-static int header_pax_extensions(struct archive_read *, struct tar *, >+static int header_pax_extension(struct archive_read *, struct tar *, > struct archive_entry *, const void *, size_t *); > static int header_pax_global(struct archive_read *, struct tar *, > struct archive_entry *, const void *h, size_t *); >-static int header_longlink(struct archive_read *, struct tar *, >- struct archive_entry *, const void *h, size_t *); >-static int header_longname(struct archive_read *, struct tar *, >+static int header_gnu_longlink(struct archive_read *, struct tar *, > struct archive_entry *, const void *h, size_t *); >-static int read_mac_metadata_blob(struct archive_read *, struct tar *, >+static int header_gnu_longname(struct archive_read *, struct tar *, > struct archive_entry *, const void *h, size_t *); >+static int is_mac_metadata_entry(struct archive_entry *entry); >+static int read_mac_metadata_blob(struct archive_read *, >+ struct archive_entry *, size_t *); > static int header_volume(struct archive_read *, struct tar *, > struct archive_entry *, const void *h, size_t *); > static int header_ustar(struct archive_read *, struct tar *, >@@ -204,21 +199,21 @@ static int archive_read_format_tar_read_header(struct archive_read *, > struct archive_entry *); > static int checksum(struct archive_read *, const void *); > static int pax_attribute(struct archive_read *, struct tar *, >- struct archive_entry *, const char *key, const char *value, >- size_t value_length); >-static int pax_attribute_acl(struct archive_read *, struct tar *, >- struct archive_entry *, const char *, int); >-static int pax_attribute_xattr(struct archive_entry *, const char *, >- const char *); >-static int pax_header(struct archive_read *, struct tar *, >- struct archive_entry *, struct archive_string *); >-static void pax_time(const char *, int64_t *sec, long *nanos); >+ struct archive_entry *, const char *key, size_t key_length, >+ size_t value_length, size_t *unconsumed); >+static int pax_attribute_LIBARCHIVE_xattr(struct archive_entry *, >+ const char *, size_t, const char *, size_t); >+static int pax_attribute_SCHILY_acl(struct archive_read *, struct tar *, >+ struct archive_entry *, size_t, int); >+static int pax_attribute_SUN_holesdata(struct archive_read *, struct tar *, >+ struct archive_entry *, const char *, size_t); >+static void pax_time(const char *, size_t, int64_t *sec, long *nanos); > static ssize_t readline(struct archive_read *, struct tar *, const char **, > ssize_t limit, size_t *); > static int read_body_to_string(struct archive_read *, struct tar *, > struct archive_string *, const void *h, size_t *); >-static int solaris_sparse_parse(struct archive_read *, struct tar *, >- struct archive_entry *, const char *); >+static int read_bytes_to_string(struct archive_read *, >+ struct archive_string *, size_t, size_t *); > static int64_t tar_atol(const char *, size_t); > static int64_t tar_atol10(const char *, size_t); > static int64_t tar_atol256(const char *, size_t); >@@ -226,9 +221,21 @@ static int64_t tar_atol8(const char *, size_t); > static int tar_read_header(struct archive_read *, struct tar *, > struct archive_entry *, size_t *); > static int tohex(int c); >-static char *url_decode(const char *); >+static char *url_decode(const char *, size_t); > static void tar_flush_unconsumed(struct archive_read *, size_t *); > >+/* Sanity limits: These numbers should be low enough to >+ * prevent a maliciously-crafted archive from forcing us to >+ * allocate extreme amounts of memory. But of course, they >+ * need to be high enough for any correct value. These >+ * will likely need some adjustment as we get more experience. */ >+static const size_t guname_limit = 65536; /* Longest uname or gname: 64kiB */ >+static const size_t pathname_limit = 1048576; /* Longest path name: 1MiB */ >+static const size_t sparse_map_limit = 8 * 1048576; /* Longest sparse map: 8MiB */ >+static const size_t xattr_limit = 16 * 1048576; /* Longest xattr: 16MiB */ >+static const size_t fflags_limit = 512; /* Longest fflags */ >+static const size_t acl_limit = 131072; /* Longest textual ACL: 128kiB */ >+static const int64_t entry_limit = 0xfffffffffffffffLL; /* 2^60 bytes = 1 ExbiByte */ > > int > archive_read_support_format_gnutar(struct archive *a) >@@ -249,7 +256,7 @@ archive_read_support_format_tar(struct archive *_a) > archive_check_magic(_a, ARCHIVE_READ_MAGIC, > ARCHIVE_STATE_NEW, "archive_read_support_format_tar"); > >- tar = (struct tar *)calloc(1, sizeof(*tar)); >+ tar = calloc(1, sizeof(*tar)); > if (tar == NULL) { > archive_set_error(&a->archive, ENOMEM, > "Can't allocate tar data"); >@@ -283,17 +290,12 @@ archive_read_format_tar_cleanup(struct archive_read *a) > > tar = (struct tar *)(a->format->data); > gnu_clear_sparse_list(tar); >- archive_string_free(&tar->acl_text); > archive_string_free(&tar->entry_pathname); > archive_string_free(&tar->entry_pathname_override); >- archive_string_free(&tar->entry_linkpath); > archive_string_free(&tar->entry_uname); > archive_string_free(&tar->entry_gname); >+ archive_string_free(&tar->entry_linkpath); > archive_string_free(&tar->line); >- archive_string_free(&tar->pax_global); >- archive_string_free(&tar->pax_header); >- archive_string_free(&tar->longname); >- archive_string_free(&tar->longlink); > archive_string_free(&tar->localname); > free(tar); > (a->format->data) = NULL; >@@ -505,6 +507,8 @@ archive_read_format_tar_read_header(struct archive_read *a, > * probably not worthwhile just to support the relatively > * obscure tar->cpio conversion case. > */ >+ /* TODO: Move this into `struct tar` to avoid conflicts >+ * when reading multiple archives */ > static int default_inode; > static int default_dev; > struct tar *tar; >@@ -623,11 +627,10 @@ archive_read_format_tar_read_data(struct archive_read *a, > } > > *buff = __archive_read_ahead(a, 1, &bytes_read); >- if (bytes_read < 0) >- return (ARCHIVE_FATAL); > if (*buff == NULL) { > archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, >- "Truncated tar archive"); >+ "Truncated tar archive" >+ " detected while reading data"); > return (ARCHIVE_FATAL); > } > if (bytes_read > tar->entry_bytes_remaining) >@@ -688,7 +691,7 @@ archive_read_format_tar_skip(struct archive_read *a) > } > > /* >- * This function recursively interprets all of the headers associated >+ * This function reads and interprets all of the headers associated > * with a single entry. > */ > static int >@@ -696,190 +699,258 @@ tar_read_header(struct archive_read *a, struct tar *tar, > struct archive_entry *entry, size_t *unconsumed) > { > ssize_t bytes; >- int err, eof_vol_header; >+ int err = ARCHIVE_OK, err2; >+ int eof_fatal = 0; /* EOF is okay at some points... */ > const char *h; > const struct archive_entry_header_ustar *header; > const struct archive_entry_header_gnutar *gnuheader; > >- eof_vol_header = 0; >- >- /* Loop until we find a workable header record. */ >- for (;;) { >- tar_flush_unconsumed(a, unconsumed); >+ /* Bitmask of what header types we've seen. */ >+ int32_t seen_headers = 0; >+ static const int32_t seen_A_header = 1; >+ static const int32_t seen_g_header = 2; >+ static const int32_t seen_K_header = 4; >+ static const int32_t seen_L_header = 8; >+ static const int32_t seen_V_header = 16; >+ static const int32_t seen_x_header = 32; /* Also X */ >+ static const int32_t seen_mac_metadata = 512; >+ >+ tar->pax_hdrcharset_utf8 = 1; >+ tar->sparse_gnu_attributes_seen = 0; >+ archive_string_empty(&(tar->entry_gname)); >+ archive_string_empty(&(tar->entry_pathname)); >+ archive_string_empty(&(tar->entry_pathname_override)); >+ archive_string_empty(&(tar->entry_uname)); >+ archive_string_empty(&tar->entry_linkpath); > >- /* Read 512-byte header record */ >- h = __archive_read_ahead(a, 512, &bytes); >- if (bytes < 0) >- return ((int)bytes); >- if (bytes == 0) { /* EOF at a block boundary. */ >- /* Some writers do omit the block of nulls. <sigh> */ >- return (ARCHIVE_EOF); >- } >- if (bytes < 512) { /* Short block at EOF; this is bad. */ >- archive_set_error(&a->archive, >- ARCHIVE_ERRNO_FILE_FORMAT, >- "Truncated tar archive"); >- return (ARCHIVE_FATAL); >- } >- *unconsumed = 512; >+ /* Ensure format is set. */ >+ if (a->archive.archive_format_name == NULL) { >+ a->archive.archive_format = ARCHIVE_FORMAT_TAR; >+ a->archive.archive_format_name = "tar"; >+ } > >- /* Header is workable if it's not an end-of-archive mark. */ >- if (h[0] != 0 || !archive_block_is_null(h)) >- break; >+ /* >+ * TODO: Write global/default pax options into >+ * 'entry' struct here before overwriting with >+ * file-specific options. >+ */ > >- /* Ensure format is set for archives with only null blocks. */ >- if (a->archive.archive_format_name == NULL) { >- a->archive.archive_format = ARCHIVE_FORMAT_TAR; >- a->archive.archive_format_name = "tar"; >- } >+ /* Loop over all the headers needed for the next entry */ >+ for (;;) { > >- if (!tar->read_concatenated_archives) { >- /* Try to consume a second all-null record, as well. */ >+ /* Find the next valid header record. */ >+ while (1) { > tar_flush_unconsumed(a, unconsumed); >- h = __archive_read_ahead(a, 512, NULL); >- if (h != NULL && h[0] == 0 && archive_block_is_null(h)) >- __archive_read_consume(a, 512); >- archive_clear_error(&a->archive); >- return (ARCHIVE_EOF); >- } > >- /* >- * We're reading concatenated archives, ignore this block and >- * loop to get the next. >- */ >- } >+ /* Read 512-byte header record */ >+ h = __archive_read_ahead(a, 512, &bytes); >+ if (bytes == 0) { /* EOF at a block boundary. */ >+ if (eof_fatal) { >+ /* We've read a special header already; >+ * if there's no regular header, then this is >+ * a premature EOF. */ >+ archive_set_error(&a->archive, EINVAL, >+ "Damaged tar archive"); >+ return (ARCHIVE_FATAL); >+ } else { >+ return (ARCHIVE_EOF); >+ } >+ } >+ if (h == NULL) { /* Short block at EOF; this is bad. */ >+ archive_set_error(&a->archive, >+ ARCHIVE_ERRNO_FILE_FORMAT, >+ "Truncated tar archive" >+ " detected while reading next heaader"); >+ return (ARCHIVE_FATAL); >+ } >+ *unconsumed += 512; > >- /* >- * Note: If the checksum fails and we return ARCHIVE_RETRY, >- * then the client is likely to just retry. This is a very >- * crude way to search for the next valid header! >- * >- * TODO: Improve this by implementing a real header scan. >- */ >- if (!checksum(a, h)) { >- tar_flush_unconsumed(a, unconsumed); >- archive_set_error(&a->archive, EINVAL, "Damaged tar archive"); >- return (ARCHIVE_RETRY); /* Retryable: Invalid header */ >- } >+ if (h[0] == 0 && archive_block_is_null(h)) { >+ /* We found a NULL block which indicates end-of-archive */ > >- if (++tar->header_recursion_depth > 32) { >- tar_flush_unconsumed(a, unconsumed); >- archive_set_error(&a->archive, EINVAL, "Too many special headers"); >- return (ARCHIVE_WARN); >- } >+ if (tar->read_concatenated_archives) { >+ /* We're ignoring NULL blocks, so keep going. */ >+ continue; >+ } > >- /* Determine the format variant. */ >- header = (const struct archive_entry_header_ustar *)h; >+ /* Try to consume a second all-null record, as well. */ >+ /* If we can't, that's okay. */ >+ tar_flush_unconsumed(a, unconsumed); >+ h = __archive_read_ahead(a, 512, NULL); >+ if (h != NULL && h[0] == 0 && archive_block_is_null(h)) >+ __archive_read_consume(a, 512); > >- switch(header->typeflag[0]) { >- case 'A': /* Solaris tar ACL */ >- a->archive.archive_format = ARCHIVE_FORMAT_TAR_PAX_INTERCHANGE; >- a->archive.archive_format_name = "Solaris tar"; >- err = header_Solaris_ACL(a, tar, entry, h, unconsumed); >- break; >- case 'g': /* POSIX-standard 'g' header. */ >- a->archive.archive_format = ARCHIVE_FORMAT_TAR_PAX_INTERCHANGE; >- a->archive.archive_format_name = "POSIX pax interchange format"; >- err = header_pax_global(a, tar, entry, h, unconsumed); >- if (err == ARCHIVE_EOF) >- return (err); >- break; >- case 'K': /* Long link name (GNU tar, others) */ >- err = header_longlink(a, tar, entry, h, unconsumed); >- break; >- case 'L': /* Long filename (GNU tar, others) */ >- err = header_longname(a, tar, entry, h, unconsumed); >- break; >- case 'V': /* GNU volume header */ >- err = header_volume(a, tar, entry, h, unconsumed); >- if (err == ARCHIVE_EOF) >- eof_vol_header = 1; >- break; >- case 'X': /* Used by SUN tar; same as 'x'. */ >- a->archive.archive_format = ARCHIVE_FORMAT_TAR_PAX_INTERCHANGE; >- a->archive.archive_format_name = >- "POSIX pax interchange format (Sun variant)"; >- err = header_pax_extensions(a, tar, entry, h, unconsumed); >- break; >- case 'x': /* POSIX-standard 'x' header. */ >- a->archive.archive_format = ARCHIVE_FORMAT_TAR_PAX_INTERCHANGE; >- a->archive.archive_format_name = "POSIX pax interchange format"; >- err = header_pax_extensions(a, tar, entry, h, unconsumed); >- break; >- default: >- gnuheader = (const struct archive_entry_header_gnutar *)h; >- if (memcmp(gnuheader->magic, "ustar \0", 8) == 0) { >- a->archive.archive_format = ARCHIVE_FORMAT_TAR_GNUTAR; >- a->archive.archive_format_name = "GNU tar format"; >- err = header_gnutar(a, tar, entry, h, unconsumed); >- } else if (memcmp(header->magic, "ustar", 5) == 0) { >- if (a->archive.archive_format != ARCHIVE_FORMAT_TAR_PAX_INTERCHANGE) { >- a->archive.archive_format = ARCHIVE_FORMAT_TAR_USTAR; >- a->archive.archive_format_name = "POSIX ustar format"; >+ archive_clear_error(&a->archive); >+ return (ARCHIVE_EOF); > } >- err = header_ustar(a, tar, entry, h); >- } else { >- a->archive.archive_format = ARCHIVE_FORMAT_TAR; >- a->archive.archive_format_name = "tar (non-POSIX)"; >- err = header_old_tar(a, tar, entry, h); >- } >- } >- if (err == ARCHIVE_FATAL) >- return (err); >- >- tar_flush_unconsumed(a, unconsumed); > >- h = NULL; >- header = NULL; >+ /* This is NOT a null block, so it must be a valid header. */ >+ if (!checksum(a, h)) { >+ tar_flush_unconsumed(a, unconsumed); >+ archive_set_error(&a->archive, EINVAL, "Damaged tar archive"); >+ /* If we've read some critical information (pax headers, etc) >+ * and _then_ see a bad header, we can't really recover. */ >+ if (eof_fatal) { >+ return (ARCHIVE_FATAL); >+ } else { >+ return (ARCHIVE_RETRY); >+ } >+ } >+ break; >+ } > >- --tar->header_recursion_depth; >- /* Yuck. Apple's design here ends up storing long pathname >- * extensions for both the AppleDouble extension entry and the >- * regular entry. >- */ >- if ((err == ARCHIVE_WARN || err == ARCHIVE_OK) && >- tar->header_recursion_depth == 0 && >- tar->process_mac_extensions) { >- int err2 = read_mac_metadata_blob(a, tar, entry, h, unconsumed); >- if (err2 < err) >- err = err2; >- } >- >- /* We return warnings or success as-is. Anything else is fatal. */ >- if (err == ARCHIVE_WARN || err == ARCHIVE_OK) { >- if (tar->sparse_gnu_pending) { >- if (tar->sparse_gnu_major == 1 && >- tar->sparse_gnu_minor == 0) { >- ssize_t bytes_read; >- >- tar->sparse_gnu_pending = 0; >- /* Read initial sparse map. */ >- bytes_read = gnu_sparse_10_read(a, tar, unconsumed); >- if (bytes_read < 0) >- return ((int)bytes_read); >- tar->entry_bytes_remaining -= bytes_read; >+ /* Determine the format variant. */ >+ header = (const struct archive_entry_header_ustar *)h; >+ switch(header->typeflag[0]) { >+ case 'A': /* Solaris tar ACL */ >+ if (seen_headers & seen_A_header) { >+ return (ARCHIVE_FATAL); >+ } >+ seen_headers |= seen_A_header; >+ a->archive.archive_format = ARCHIVE_FORMAT_TAR_PAX_INTERCHANGE; >+ a->archive.archive_format_name = "Solaris tar"; >+ err2 = header_Solaris_ACL(a, tar, entry, h, unconsumed); >+ break; >+ case 'g': /* POSIX-standard 'g' header. */ >+ if (seen_headers & seen_g_header) { >+ return (ARCHIVE_FATAL); >+ } >+ seen_headers |= seen_g_header; >+ a->archive.archive_format = ARCHIVE_FORMAT_TAR_PAX_INTERCHANGE; >+ a->archive.archive_format_name = "POSIX pax interchange format"; >+ err2 = header_pax_global(a, tar, entry, h, unconsumed); >+ break; >+ case 'K': /* Long link name (GNU tar, others) */ >+ if (seen_headers & seen_K_header) { >+ return (ARCHIVE_FATAL); >+ } >+ seen_headers |= seen_K_header; >+ err2 = header_gnu_longlink(a, tar, entry, h, unconsumed); >+ break; >+ case 'L': /* Long filename (GNU tar, others) */ >+ if (seen_headers & seen_L_header) { >+ return (ARCHIVE_FATAL); >+ } >+ seen_headers |= seen_L_header; >+ err2 = header_gnu_longname(a, tar, entry, h, unconsumed); >+ break; >+ case 'V': /* GNU volume header */ >+ if (seen_headers & seen_V_header) { >+ return (ARCHIVE_FATAL); >+ } >+ seen_headers |= seen_V_header; >+ err2 = header_volume(a, tar, entry, h, unconsumed); >+ break; >+ case 'X': /* Used by SUN tar; same as 'x'. */ >+ if (seen_headers & seen_x_header) { >+ return (ARCHIVE_FATAL); >+ } >+ seen_headers |= seen_x_header; >+ a->archive.archive_format = ARCHIVE_FORMAT_TAR_PAX_INTERCHANGE; >+ a->archive.archive_format_name = >+ "POSIX pax interchange format (Sun variant)"; >+ err2 = header_pax_extension(a, tar, entry, h, unconsumed); >+ break; >+ case 'x': /* POSIX-standard 'x' header. */ >+ if (seen_headers & seen_x_header) { >+ return (ARCHIVE_FATAL); >+ } >+ seen_headers |= seen_x_header; >+ a->archive.archive_format = ARCHIVE_FORMAT_TAR_PAX_INTERCHANGE; >+ a->archive.archive_format_name = "POSIX pax interchange format"; >+ err2 = header_pax_extension(a, tar, entry, h, unconsumed); >+ break; >+ default: /* Regular header: Legacy tar, GNU tar, or ustar */ >+ gnuheader = (const struct archive_entry_header_gnutar *)h; >+ if (memcmp(gnuheader->magic, "ustar \0", 8) == 0) { >+ a->archive.archive_format = ARCHIVE_FORMAT_TAR_GNUTAR; >+ a->archive.archive_format_name = "GNU tar format"; >+ err2 = header_gnutar(a, tar, entry, h, unconsumed); >+ } else if (memcmp(header->magic, "ustar", 5) == 0) { >+ if (a->archive.archive_format != ARCHIVE_FORMAT_TAR_PAX_INTERCHANGE) { >+ a->archive.archive_format = ARCHIVE_FORMAT_TAR_USTAR; >+ a->archive.archive_format_name = "POSIX ustar format"; >+ } >+ err2 = header_ustar(a, tar, entry, h); > } else { >- archive_set_error(&a->archive, >- ARCHIVE_ERRNO_MISC, >- "Unrecognized GNU sparse file format"); >- return (ARCHIVE_WARN); >+ a->archive.archive_format = ARCHIVE_FORMAT_TAR; >+ a->archive.archive_format_name = "tar (non-POSIX)"; >+ err2 = header_old_tar(a, tar, entry, h); >+ } >+ err = err_combine(err, err2); >+ /* We return warnings or success as-is. Anything else is fatal. */ >+ if (err < ARCHIVE_WARN) { >+ return (ARCHIVE_FATAL); >+ } >+ /* Filename of the form `._filename` is an AppleDouble >+ * extension entry. The body is the macOS metadata blob; >+ * this is followed by another entry with the actual >+ * regular file data. >+ * This design has two drawbacks: >+ * = it's brittle; you might just have a file with such a name >+ * = it duplicates any long pathname extensions >+ * >+ * TODO: This probably shouldn't be here at all. Consider >+ * just returning the contents as a regular entry here and >+ * then dealing with it when we write data to disk. >+ */ >+ if (tar->process_mac_extensions >+ && ((seen_headers & seen_mac_metadata) == 0) >+ && is_mac_metadata_entry(entry)) { >+ err2 = read_mac_metadata_blob(a, entry, unconsumed); >+ if (err2 < ARCHIVE_WARN) { >+ return (ARCHIVE_FATAL); >+ } >+ err = err_combine(err, err2); >+ /* Note: Other headers can appear again. */ >+ seen_headers = seen_mac_metadata; >+ break; >+ } >+ >+ /* Reconcile GNU sparse attributes */ >+ if (tar->sparse_gnu_attributes_seen) { >+ /* Only 'S' (GNU sparse) and ustar '0' regular files can be sparse */ >+ if (tar->filetype != 'S' && tar->filetype != '0') { >+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, >+ "Non-regular file cannot be sparse"); >+ return (ARCHIVE_WARN); >+ } else if (tar->sparse_gnu_major == 0 && >+ tar->sparse_gnu_minor == 0) { >+ /* Sparse map already parsed from 'x' header */ >+ } else if (tar->sparse_gnu_major == 0 && >+ tar->sparse_gnu_minor == 1) { >+ /* Sparse map already parsed from 'x' header */ >+ } else if (tar->sparse_gnu_major == 1 && >+ tar->sparse_gnu_minor == 0) { >+ /* Sparse map is prepended to file contents */ >+ ssize_t bytes_read; >+ bytes_read = gnu_sparse_10_read(a, tar, unconsumed); >+ if (bytes_read < 0) >+ return ((int)bytes_read); >+ tar->entry_bytes_remaining -= bytes_read; >+ } else { >+ archive_set_error(&a->archive, >+ ARCHIVE_ERRNO_MISC, >+ "Unrecognized GNU sparse file format"); >+ return (ARCHIVE_WARN); >+ } > } >- tar->sparse_gnu_pending = 0; >+ return (err); > } >- return (err); >- } >- if (err == ARCHIVE_EOF) { >- if (!eof_vol_header) { >- /* EOF when recursively reading a header is bad. */ >- archive_set_error(&a->archive, EINVAL, >- "Damaged tar archive"); >- } else { >- /* If we encounter just a GNU volume header treat >- * this situation as an empty archive */ >- return (ARCHIVE_EOF); >+ >+ /* We're between headers ... */ >+ err = err_combine(err, err2); >+ if (err == ARCHIVE_FATAL) >+ return (err); >+ >+ /* The GNU volume header and the pax `g` global header >+ * are both allowed to be the only header in an >+ * archive. If we've seen any other header, a >+ * following EOF is fatal. */ >+ if ((seen_headers & ~seen_V_header & ~seen_g_header) != 0) { >+ eof_fatal = 1; > } > } >- return (ARCHIVE_FATAL); > } > > /* >@@ -934,7 +1005,12 @@ checksum(struct archive_read *a, const void *h) > if (sum == check) > return (1); > >+#if DONT_FAIL_ON_CRC_ERROR >+ /* Speed up fuzzing by pretending the checksum is always right. */ >+ return (1); >+#else > return (0); >+#endif > } > > /* >@@ -959,25 +1035,20 @@ header_Solaris_ACL(struct archive_read *a, struct tar *tar, > struct archive_entry *entry, const void *h, size_t *unconsumed) > { > const struct archive_entry_header_ustar *header; >+ struct archive_string acl_text; > size_t size; > int err, acl_type; > int64_t type; > char *acl, *p; > >- /* >- * read_body_to_string adds a NUL terminator, but we need a little >- * more to make sure that we don't overrun acl_text later. >- */ > header = (const struct archive_entry_header_ustar *)h; > size = (size_t)tar_atol(header->size, sizeof(header->size)); >- err = read_body_to_string(a, tar, &(tar->acl_text), h, unconsumed); >- if (err != ARCHIVE_OK) >- return (err); >- >- /* Recursively read next header */ >- err = tar_read_header(a, tar, entry, unconsumed); >- if ((err != ARCHIVE_OK) && (err != ARCHIVE_WARN)) >+ archive_string_init(&acl_text); >+ err = read_body_to_string(a, tar, &acl_text, h, unconsumed); >+ if (err != ARCHIVE_OK) { >+ archive_string_free(&acl_text); > return (err); >+ } > > /* TODO: Examine the first characters to see if this > * is an AIX ACL descriptor. We'll likely never support >@@ -985,12 +1056,13 @@ header_Solaris_ACL(struct archive_read *a, struct tar *tar, > * we do see them. */ > > /* Leading octal number indicates ACL type and number of entries. */ >- p = acl = tar->acl_text.s; >+ p = acl = acl_text.s; > type = 0; > while (*p != '\0' && p < acl + size) { > if (*p < '0' || *p > '7') { > archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, > "Malformed Solaris ACL attribute (invalid digit)"); >+ archive_string_free(&acl_text); > return(ARCHIVE_WARN); > } > type <<= 3; >@@ -998,6 +1070,7 @@ header_Solaris_ACL(struct archive_read *a, struct tar *tar, > if (type > 077777777) { > archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, > "Malformed Solaris ACL attribute (count too large)"); >+ archive_string_free(&acl_text); > return (ARCHIVE_WARN); > } > p++; >@@ -1015,6 +1088,7 @@ header_Solaris_ACL(struct archive_read *a, struct tar *tar, > archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, > "Malformed Solaris ACL attribute (unsupported type %o)", > (int)type); >+ archive_string_free(&acl_text); > return (ARCHIVE_WARN); > } > p++; >@@ -1022,6 +1096,7 @@ header_Solaris_ACL(struct archive_read *a, struct tar *tar, > if (p >= acl + size) { > archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, > "Malformed Solaris ACL attribute (body overflow)"); >+ archive_string_free(&acl_text); > return(ARCHIVE_WARN); > } > >@@ -1035,12 +1110,17 @@ header_Solaris_ACL(struct archive_read *a, struct tar *tar, > if (tar->sconv_acl == NULL) { > tar->sconv_acl = archive_string_conversion_from_charset( > &(a->archive), "UTF-8", 1); >- if (tar->sconv_acl == NULL) >+ if (tar->sconv_acl == NULL) { >+ archive_string_free(&acl_text); > return (ARCHIVE_FATAL); >+ } > } > archive_strncpy(&(tar->localname), acl, p - acl); > err = archive_acl_from_text_l(archive_entry_acl(entry), > tar->localname.s, acl_type, tar->sconv_acl); >+ /* Workaround: Force perm_is_set() to be correct */ >+ /* If this bit were stored in the ACL, this wouldn't be needed */ >+ archive_entry_set_perm(entry, archive_entry_perm(entry)); > if (err != ARCHIVE_OK) { > if (errno == ENOMEM) { > archive_set_error(&a->archive, ENOMEM, >@@ -1049,6 +1129,7 @@ header_Solaris_ACL(struct archive_read *a, struct tar *tar, > archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, > "Malformed Solaris ACL attribute (unparsable)"); > } >+ archive_string_free(&acl_text); > return (err); > } > >@@ -1056,20 +1137,17 @@ header_Solaris_ACL(struct archive_read *a, struct tar *tar, > * Interpret 'K' long linkname header. > */ > static int >-header_longlink(struct archive_read *a, struct tar *tar, >+header_gnu_longlink(struct archive_read *a, struct tar *tar, > struct archive_entry *entry, const void *h, size_t *unconsumed) > { > int err; > >- err = read_body_to_string(a, tar, &(tar->longlink), h, unconsumed); >- if (err != ARCHIVE_OK) >- return (err); >- err = tar_read_header(a, tar, entry, unconsumed); >- if ((err != ARCHIVE_OK) && (err != ARCHIVE_WARN)) >- return (err); >- /* Set symlink if symlink already set, else hardlink. */ >- archive_entry_copy_link(entry, tar->longlink.s); >- return (ARCHIVE_OK); >+ struct archive_string linkpath; >+ archive_string_init(&linkpath); >+ err = read_body_to_string(a, tar, &linkpath, h, unconsumed); >+ archive_entry_set_link(entry, linkpath.s); >+ archive_string_free(&linkpath); >+ return (err); > } > > static int >@@ -1091,25 +1169,23 @@ set_conversion_failed_error(struct archive_read *a, > * Interpret 'L' long filename header. > */ > static int >-header_longname(struct archive_read *a, struct tar *tar, >+header_gnu_longname(struct archive_read *a, struct tar *tar, > struct archive_entry *entry, const void *h, size_t *unconsumed) > { > int err; >+ struct archive_string longname; > >- err = read_body_to_string(a, tar, &(tar->longname), h, unconsumed); >- if (err != ARCHIVE_OK) >- return (err); >- /* Read and parse "real" header, then override name. */ >- err = tar_read_header(a, tar, entry, unconsumed); >- if ((err != ARCHIVE_OK) && (err != ARCHIVE_WARN)) >- return (err); >- if (archive_entry_copy_pathname_l(entry, tar->longname.s, >- archive_strlen(&(tar->longname)), tar->sconv) != 0) >- err = set_conversion_failed_error(a, tar->sconv, "Pathname"); >+ archive_string_init(&longname); >+ err = read_body_to_string(a, tar, &longname, h, unconsumed); >+ if (err == ARCHIVE_OK) { >+ if (archive_entry_copy_pathname_l(entry, longname.s, >+ archive_strlen(&longname), tar->sconv) != 0) >+ err = set_conversion_failed_error(a, tar->sconv, "Pathname"); >+ } >+ archive_string_free(&longname); > return (err); > } > >- > /* > * Interpret 'V' GNU tar volume header. > */ >@@ -1117,32 +1193,33 @@ static int > header_volume(struct archive_read *a, struct tar *tar, > struct archive_entry *entry, const void *h, size_t *unconsumed) > { >- (void)h; >+ const struct archive_entry_header_ustar *header; >+ int64_t size, to_consume; >+ >+ (void)a; /* UNUSED */ >+ (void)tar; /* UNUSED */ >+ (void)entry; /* UNUSED */ > >- /* Just skip this and read the next header. */ >- return (tar_read_header(a, tar, entry, unconsumed)); >+ header = (const struct archive_entry_header_ustar *)h; >+ size = tar_atol(header->size, sizeof(header->size)); >+ if (size > (int64_t)pathname_limit) { >+ return (ARCHIVE_FATAL); >+ } >+ to_consume = ((size + 511) & ~511); >+ *unconsumed += to_consume; >+ return (ARCHIVE_OK); > } > > /* >- * Read body of an archive entry into an archive_string object. >+ * Read the next `size` bytes into the provided string. >+ * Null-terminate the string. > */ > static int >-read_body_to_string(struct archive_read *a, struct tar *tar, >- struct archive_string *as, const void *h, size_t *unconsumed) >-{ >- int64_t size; >- const struct archive_entry_header_ustar *header; >+read_bytes_to_string(struct archive_read *a, >+ struct archive_string *as, size_t size, >+ size_t *unconsumed) { > const void *src; > >- (void)tar; /* UNUSED */ >- header = (const struct archive_entry_header_ustar *)h; >- size = tar_atol(header->size, sizeof(header->size)); >- if ((size > 1048576) || (size < 0)) { >- archive_set_error(&a->archive, EINVAL, >- "Special header too large"); >- return (ARCHIVE_FATAL); >- } >- > /* Fail if we can't make our buffer big enough. */ > if (archive_string_ensure(as, (size_t)size+1) == NULL) { > archive_set_error(&a->archive, ENOMEM, >@@ -1153,18 +1230,54 @@ read_body_to_string(struct archive_read *a, struct tar *tar, > tar_flush_unconsumed(a, unconsumed); > > /* Read the body into the string. */ >- *unconsumed = (size_t)((size + 511) & ~ 511); >- src = __archive_read_ahead(a, *unconsumed, NULL); >+ src = __archive_read_ahead(a, size, NULL); > if (src == NULL) { >+ archive_set_error(&a->archive, EINVAL, >+ "Truncated archive" >+ " detected while reading metadata"); > *unconsumed = 0; > return (ARCHIVE_FATAL); > } > memcpy(as->s, src, (size_t)size); > as->s[size] = '\0'; > as->length = (size_t)size; >+ *unconsumed += size; > return (ARCHIVE_OK); > } > >+/* >+ * Read body of an archive entry into an archive_string object. >+ */ >+static int >+read_body_to_string(struct archive_read *a, struct tar *tar, >+ struct archive_string *as, const void *h, size_t *unconsumed) >+{ >+ int64_t size; >+ const struct archive_entry_header_ustar *header; >+ int r; >+ >+ (void)tar; /* UNUSED */ >+ header = (const struct archive_entry_header_ustar *)h; >+ size = tar_atol(header->size, sizeof(header->size)); >+ if (size > entry_limit) { >+ return (ARCHIVE_FATAL); >+ } >+ if ((size > (int64_t)pathname_limit) || (size < 0)) { >+ archive_string_empty(as); >+ int64_t to_consume = ((size + 511) & ~511); >+ if (to_consume != __archive_read_consume(a, to_consume)) { >+ return (ARCHIVE_FATAL); >+ } >+ archive_set_error(&a->archive, EINVAL, >+ "Special header too large: %d > 1MiB", >+ (int)size); >+ return (ARCHIVE_WARN); >+ } >+ r = read_bytes_to_string(a, as, size, unconsumed); >+ *unconsumed += 0x1ff & (-size); >+ return(r); >+} >+ > /* > * Parse out common header elements. > * >@@ -1180,21 +1293,28 @@ header_common(struct archive_read *a, struct tar *tar, > struct archive_entry *entry, const void *h) > { > const struct archive_entry_header_ustar *header; >- char tartype; >+ const char *existing_linkpath; >+ const wchar_t *existing_wcs_linkpath; > int err = ARCHIVE_OK; > > header = (const struct archive_entry_header_ustar *)h; >- if (header->linkname[0]) >- archive_strncpy(&(tar->entry_linkpath), >- header->linkname, sizeof(header->linkname)); >- else >- archive_string_empty(&(tar->entry_linkpath)); > > /* Parse out the numeric fields (all are octal) */ >- archive_entry_set_mode(entry, >- (mode_t)tar_atol(header->mode, sizeof(header->mode))); >- archive_entry_set_uid(entry, tar_atol(header->uid, sizeof(header->uid))); >- archive_entry_set_gid(entry, tar_atol(header->gid, sizeof(header->gid))); >+ >+ /* Split mode handling: Set filetype always, perm only if not already set */ >+ archive_entry_set_filetype(entry, >+ (mode_t)tar_atol(header->mode, sizeof(header->mode))); >+ if (!archive_entry_perm_is_set(entry)) { >+ archive_entry_set_perm(entry, >+ (mode_t)tar_atol(header->mode, sizeof(header->mode))); >+ } >+ if (!archive_entry_uid_is_set(entry)) { >+ archive_entry_set_uid(entry, tar_atol(header->uid, sizeof(header->uid))); >+ } >+ if (!archive_entry_gid_is_set(entry)) { >+ archive_entry_set_gid(entry, tar_atol(header->gid, sizeof(header->gid))); >+ } >+ > tar->entry_bytes_remaining = tar_atol(header->size, sizeof(header->size)); > if (tar->entry_bytes_remaining < 0) { > tar->entry_bytes_remaining = 0; >@@ -1202,28 +1322,49 @@ header_common(struct archive_read *a, struct tar *tar, > "Tar entry has negative size"); > return (ARCHIVE_FATAL); > } >- if (tar->entry_bytes_remaining == INT64_MAX) { >- /* Note: tar_atol returns INT64_MAX on overflow */ >+ if (tar->entry_bytes_remaining > entry_limit) { > tar->entry_bytes_remaining = 0; > archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, > "Tar entry size overflow"); > return (ARCHIVE_FATAL); > } >- tar->realsize = tar->entry_bytes_remaining; >- archive_entry_set_size(entry, tar->entry_bytes_remaining); >- archive_entry_set_mtime(entry, tar_atol(header->mtime, sizeof(header->mtime)), 0); >+ if (!tar->realsize_override) { >+ tar->realsize = tar->entry_bytes_remaining; >+ } >+ archive_entry_set_size(entry, tar->realsize); >+ >+ if (!archive_entry_mtime_is_set(entry)) { >+ archive_entry_set_mtime(entry, tar_atol(header->mtime, sizeof(header->mtime)), 0); >+ } > > /* Handle the tar type flag appropriately. */ >- tartype = header->typeflag[0]; >+ tar->filetype = header->typeflag[0]; > >- switch (tartype) { >+ /* >+ * TODO: If the linkpath came from Pax extension header, then >+ * we should obey the hdrcharset_utf8 flag when converting these. >+ */ >+ switch (tar->filetype) { > case '1': /* Hard link */ >- if (archive_entry_copy_hardlink_l(entry, tar->entry_linkpath.s, >- archive_strlen(&(tar->entry_linkpath)), tar->sconv) != 0) { >- err = set_conversion_failed_error(a, tar->sconv, >- "Linkname"); >- if (err == ARCHIVE_FATAL) >- return (err); >+ archive_entry_set_link_to_hardlink(entry); >+ existing_wcs_linkpath = archive_entry_hardlink_w(entry); >+ existing_linkpath = archive_entry_hardlink(entry); >+ if ((existing_linkpath == NULL || existing_linkpath[0] == '\0') >+ && (existing_wcs_linkpath == NULL || existing_wcs_linkpath[0] == '\0')) { >+ struct archive_string linkpath; >+ archive_string_init(&linkpath); >+ archive_strncpy(&linkpath, >+ header->linkname, sizeof(header->linkname)); >+ if (archive_entry_copy_hardlink_l(entry, linkpath.s, >+ archive_strlen(&linkpath), tar->sconv) != 0) { >+ err = set_conversion_failed_error(a, tar->sconv, >+ "Linkname"); >+ if (err == ARCHIVE_FATAL) { >+ archive_string_free(&linkpath); >+ return (err); >+ } >+ } >+ archive_string_free(&linkpath); > } > /* > * The following may seem odd, but: Technically, tar >@@ -1283,16 +1424,29 @@ header_common(struct archive_read *a, struct tar *tar, > */ > break; > case '2': /* Symlink */ >+ archive_entry_set_link_to_symlink(entry); >+ existing_wcs_linkpath = archive_entry_symlink_w(entry); >+ existing_linkpath = archive_entry_symlink(entry); >+ if ((existing_linkpath == NULL || existing_linkpath[0] == '\0') >+ && (existing_wcs_linkpath == NULL || existing_wcs_linkpath[0] == '\0')) { >+ struct archive_string linkpath; >+ archive_string_init(&linkpath); >+ archive_strncpy(&linkpath, >+ header->linkname, sizeof(header->linkname)); >+ if (archive_entry_copy_symlink_l(entry, linkpath.s, >+ archive_strlen(&linkpath), tar->sconv) != 0) { >+ err = set_conversion_failed_error(a, tar->sconv, >+ "Linkname"); >+ if (err == ARCHIVE_FATAL) { >+ archive_string_free(&linkpath); >+ return (err); >+ } >+ } >+ archive_string_free(&linkpath); >+ } > archive_entry_set_filetype(entry, AE_IFLNK); > archive_entry_set_size(entry, 0); > tar->entry_bytes_remaining = 0; >- if (archive_entry_copy_symlink_l(entry, tar->entry_linkpath.s, >- archive_strlen(&(tar->entry_linkpath)), tar->sconv) != 0) { >- err = set_conversion_failed_error(a, tar->sconv, >- "Linkname"); >- if (err == ARCHIVE_FATAL) >- return (err); >- } > break; > case '3': /* Character device */ > archive_entry_set_filetype(entry, AE_IFCHR); >@@ -1342,15 +1496,9 @@ header_common(struct archive_read *a, struct tar *tar, > * sparse information in the extended area. > */ > /* FALLTHROUGH */ >- case '0': >- /* >- * Enable sparse file "read" support only for regular >- * files and explicit GNU sparse files. However, we >- * don't allow non-standard file types to be sparse. >- */ >- tar->sparse_allowed = 1; >+ case '0': /* ustar "regular" file */ > /* FALLTHROUGH */ >- default: /* Regular file and non-standard types */ >+ default: /* Non-standard file types */ > /* > * Per POSIX: non-recognized types should always be > * treated as regular files. >@@ -1371,9 +1519,17 @@ header_old_tar(struct archive_read *a, struct tar *tar, > const struct archive_entry_header_ustar *header; > int err = ARCHIVE_OK, err2; > >- /* Copy filename over (to ensure null termination). */ >+ /* >+ * Copy filename over (to ensure null termination). >+ * Skip if pathname was already set e.g. by header_gnu_longname() >+ */ > header = (const struct archive_entry_header_ustar *)h; >- if (archive_entry_copy_pathname_l(entry, >+ >+ const char *existing_pathname = archive_entry_pathname(entry); >+ const wchar_t *existing_wcs_pathname = archive_entry_pathname_w(entry); >+ if ((existing_pathname == NULL || existing_pathname[0] == '\0') >+ && (existing_wcs_pathname == NULL || existing_wcs_pathname[0] == '\0') && >+ archive_entry_copy_pathname_l(entry, > header->name, sizeof(header->name), tar->sconv) != 0) { > err = set_conversion_failed_error(a, tar->sconv, "Pathname"); > if (err == ARCHIVE_FATAL) >@@ -1390,21 +1546,13 @@ header_old_tar(struct archive_read *a, struct tar *tar, > } > > /* >- * Read a Mac AppleDouble-encoded blob of file metadata, >- * if there is one. >+ * Is this likely an AppleDouble extension? > */ > static int >-read_mac_metadata_blob(struct archive_read *a, struct tar *tar, >- struct archive_entry *entry, const void *h, size_t *unconsumed) >-{ >- int64_t size; >- size_t msize; >- const void *data; >+is_mac_metadata_entry(struct archive_entry *entry) { > const char *p, *name; > const wchar_t *wp, *wname; > >- (void)h; /* UNUSED */ >- > wname = wp = archive_entry_pathname_w(entry); > if (wp != NULL) { > /* Find the last path element. */ >@@ -1416,8 +1564,8 @@ read_mac_metadata_blob(struct archive_read *a, struct tar *tar, > * If last path element starts with "._", then > * this is a Mac extension. > */ >- if (wname[0] != L'.' || wname[1] != L'_' || wname[2] == L'\0') >- return ARCHIVE_OK; >+ if (wname[0] == L'.' && wname[1] == L'_' && wname[2] != L'\0') >+ return 1; > } else { > /* Find the last path element. */ > name = p = archive_entry_pathname(entry); >@@ -1431,9 +1579,29 @@ read_mac_metadata_blob(struct archive_read *a, struct tar *tar, > * If last path element starts with "._", then > * this is a Mac extension. > */ >- if (name[0] != '.' || name[1] != '_' || name[2] == '\0') >- return ARCHIVE_OK; >+ if (name[0] == '.' && name[1] == '_' && name[2] != '\0') >+ return 1; > } >+ /* Not a mac extension */ >+ return 0; >+} >+ >+/* >+ * Read a Mac AppleDouble-encoded blob of file metadata, >+ * if there is one. >+ * >+ * TODO: In Libarchive 4, we should consider ripping this >+ * out -- instead, return a file starting with `._` as >+ * a regular file and let the client (or archive_write logic) >+ * handle it. >+ */ >+static int >+read_mac_metadata_blob(struct archive_read *a, >+ struct archive_entry *entry, size_t *unconsumed) >+{ >+ int64_t size; >+ size_t msize; >+ const void *data; > > /* Read the body as a Mac OS metadata blob. */ > size = archive_entry_size(entry); >@@ -1443,6 +1611,17 @@ read_mac_metadata_blob(struct archive_read *a, struct tar *tar, > return (ARCHIVE_FATAL); > } > >+ /* TODO: Should this merely skip the overlarge entry and >+ * WARN? Or is xattr_limit sufficiently large that we can >+ * safely assume anything larger is malicious? */ >+ if (size > (int64_t)xattr_limit) { >+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, >+ "Oversized AppleDouble extension has size %llu > %llu", >+ (unsigned long long)size, >+ (unsigned long long)xattr_limit); >+ return (ARCHIVE_FATAL); >+ } >+ > /* > * TODO: Look beyond the body here to peek at the next header. > * If it's a regular header (not an extension header) >@@ -1455,15 +1634,19 @@ read_mac_metadata_blob(struct archive_read *a, struct tar *tar, > * Q: Is the above idea really possible? Even > * when there are GNU or pax extension entries? > */ >+ tar_flush_unconsumed(a, unconsumed); > data = __archive_read_ahead(a, msize, NULL); > if (data == NULL) { >+ archive_set_error(&a->archive, EINVAL, >+ "Truncated archive" >+ " detected while reading macOS metadata"); > *unconsumed = 0; > return (ARCHIVE_FATAL); > } >+ archive_entry_clear(entry); > archive_entry_copy_mac_metadata(entry, data, msize); > *unconsumed = (msize + 511) & ~ 511; >- tar_flush_unconsumed(a, unconsumed); >- return (tar_read_header(a, tar, entry, unconsumed)); >+ return (ARCHIVE_OK); > } > > /* >@@ -1473,76 +1656,62 @@ static int > header_pax_global(struct archive_read *a, struct tar *tar, > struct archive_entry *entry, const void *h, size_t *unconsumed) > { >- int err; >+ const struct archive_entry_header_ustar *header; >+ int64_t size, to_consume; > >- err = read_body_to_string(a, tar, &(tar->pax_global), h, unconsumed); >- if (err != ARCHIVE_OK) >- return (err); >- err = tar_read_header(a, tar, entry, unconsumed); >- return (err); >+ (void)a; /* UNUSED */ >+ (void)tar; /* UNUSED */ >+ (void)entry; /* UNUSED */ >+ >+ header = (const struct archive_entry_header_ustar *)h; >+ size = tar_atol(header->size, sizeof(header->size)); >+ if (size > entry_limit) { >+ return (ARCHIVE_FATAL); >+ } >+ to_consume = ((size + 511) & ~511); >+ *unconsumed += to_consume; >+ return (ARCHIVE_OK); > } > >+/* >+ * Parse a file header for a Posix "ustar" archive entry. This also >+ * handles "pax" or "extended ustar" entries. >+ * >+ * In order to correctly handle pax attributes (which precede this), >+ * we have to skip parsing any field for which the entry already has >+ * contents. >+ */ > static int >-header_pax_extensions(struct archive_read *a, struct tar *tar, >- struct archive_entry *entry, const void *h, size_t *unconsumed) >+header_ustar(struct archive_read *a, struct tar *tar, >+ struct archive_entry *entry, const void *h) > { >- int err, err2; >- >- err = read_body_to_string(a, tar, &(tar->pax_header), h, unconsumed); >- if (err != ARCHIVE_OK) >- return (err); >- >- /* Parse the next header. */ >- err = tar_read_header(a, tar, entry, unconsumed); >- if ((err != ARCHIVE_OK) && (err != ARCHIVE_WARN)) >- return (err); >- >- /* >- * TODO: Parse global/default options into 'entry' struct here >- * before handling file-specific options. >- * >- * This design (parse standard header, then overwrite with pax >- * extended attribute data) usually works well, but isn't ideal; >- * it would be better to parse the pax extended attributes first >- * and then skip any fields in the standard header that were >- * defined in the pax header. >- */ >- err2 = pax_header(a, tar, entry, &tar->pax_header); >- err = err_combine(err, err2); >- tar->entry_padding = 0x1ff & (-tar->entry_bytes_remaining); >- return (err); >-} >- >- >-/* >- * Parse a file header for a Posix "ustar" archive entry. This also >- * handles "pax" or "extended ustar" entries. >- */ >-static int >-header_ustar(struct archive_read *a, struct tar *tar, >- struct archive_entry *entry, const void *h) >-{ >- const struct archive_entry_header_ustar *header; >- struct archive_string *as; >- int err = ARCHIVE_OK, r; >+ const struct archive_entry_header_ustar *header; >+ struct archive_string as; >+ int err = ARCHIVE_OK, r; > > header = (const struct archive_entry_header_ustar *)h; > > /* Copy name into an internal buffer to ensure null-termination. */ >- as = &(tar->entry_pathname); >- if (header->prefix[0]) { >- archive_strncpy(as, header->prefix, sizeof(header->prefix)); >- if (as->s[archive_strlen(as) - 1] != '/') >- archive_strappend_char(as, '/'); >- archive_strncat(as, header->name, sizeof(header->name)); >- } else { >- archive_strncpy(as, header->name, sizeof(header->name)); >- } >- if (archive_entry_copy_pathname_l(entry, as->s, archive_strlen(as), >- tar->sconv) != 0) { >- err = set_conversion_failed_error(a, tar->sconv, "Pathname"); >- if (err == ARCHIVE_FATAL) >- return (err); >+ const char *existing_pathname = archive_entry_pathname(entry); >+ const wchar_t *existing_wcs_pathname = archive_entry_pathname_w(entry); >+ if ((existing_pathname == NULL || existing_pathname[0] == '\0') >+ && (existing_wcs_pathname == NULL || existing_wcs_pathname[0] == '\0')) { >+ archive_string_init(&as); >+ if (header->prefix[0]) { >+ archive_strncpy(&as, header->prefix, sizeof(header->prefix)); >+ if (as.s[archive_strlen(&as) - 1] != '/') >+ archive_strappend_char(&as, '/'); >+ archive_strncat(&as, header->name, sizeof(header->name)); >+ } else { >+ archive_strncpy(&as, header->name, sizeof(header->name)); >+ } >+ if (archive_entry_copy_pathname_l(entry, as.s, archive_strlen(&as), >+ tar->sconv) != 0) { >+ err = set_conversion_failed_error(a, tar->sconv, "Pathname"); >+ if (err == ARCHIVE_FATAL) >+ return (err); >+ } >+ archive_string_free(&as); > } > > /* Handle rest of common fields. */ >@@ -1553,26 +1722,36 @@ header_ustar(struct archive_read *a, struct tar *tar, > err = r; > > /* Handle POSIX ustar fields. */ >- if (archive_entry_copy_uname_l(entry, >- header->uname, sizeof(header->uname), tar->sconv) != 0) { >- err = set_conversion_failed_error(a, tar->sconv, "Uname"); >- if (err == ARCHIVE_FATAL) >- return (err); >+ const char *existing_uname = archive_entry_uname(entry); >+ if (existing_uname == NULL || existing_uname[0] == '\0') { >+ if (archive_entry_copy_uname_l(entry, >+ header->uname, sizeof(header->uname), tar->sconv) != 0) { >+ err = set_conversion_failed_error(a, tar->sconv, "Uname"); >+ if (err == ARCHIVE_FATAL) >+ return (err); >+ } > } > >- if (archive_entry_copy_gname_l(entry, >- header->gname, sizeof(header->gname), tar->sconv) != 0) { >- err = set_conversion_failed_error(a, tar->sconv, "Gname"); >- if (err == ARCHIVE_FATAL) >- return (err); >+ const char *existing_gname = archive_entry_gname(entry); >+ if (existing_gname == NULL || existing_gname[0] == '\0') { >+ if (archive_entry_copy_gname_l(entry, >+ header->gname, sizeof(header->gname), tar->sconv) != 0) { >+ err = set_conversion_failed_error(a, tar->sconv, "Gname"); >+ if (err == ARCHIVE_FATAL) >+ return (err); >+ } > } > > /* Parse out device numbers only for char and block specials. */ > if (header->typeflag[0] == '3' || header->typeflag[0] == '4') { >- archive_entry_set_rdevmajor(entry, (dev_t) >- tar_atol(header->rdevmajor, sizeof(header->rdevmajor))); >- archive_entry_set_rdevminor(entry, (dev_t) >- tar_atol(header->rdevminor, sizeof(header->rdevminor))); >+ if (!archive_entry_rdev_is_set(entry)) { >+ archive_entry_set_rdevmajor(entry, (dev_t) >+ tar_atol(header->rdevmajor, sizeof(header->rdevmajor))); >+ archive_entry_set_rdevminor(entry, (dev_t) >+ tar_atol(header->rdevminor, sizeof(header->rdevminor))); >+ } >+ } else { >+ archive_entry_set_rdev(entry, 0); > } > > tar->entry_padding = 0x1ff & (-tar->entry_bytes_remaining); >@@ -1580,117 +1759,203 @@ header_ustar(struct archive_read *a, struct tar *tar, > return (err); > } > >- >-/* >- * Parse the pax extended attributes record. >- * >- * Returns non-zero if there's an error in the data. >- */ > static int >-pax_header(struct archive_read *a, struct tar *tar, >- struct archive_entry *entry, struct archive_string *in_as) >+header_pax_extension(struct archive_read *a, struct tar *tar, >+ struct archive_entry *entry, const void *h, size_t *unconsumed) > { >- size_t attr_length, l, line_length, value_length; >- char *p; >- char *key, *value; >- struct archive_string *as; >+ /* Sanity checks: The largest `x` body I've ever heard of was >+ * a little over 4MB. So I doubt there has ever been a >+ * well-formed archive with an `x` body over 1GiB. Similarly, >+ * it seems plausible that no single attribute has ever been >+ * larger than 100MB. So if we see a larger value here, it's >+ * almost certainly a sign of a corrupted/malicious archive. */ >+ >+ /* Maximum sane size for extension body: 1 GiB */ >+ /* This cannot be raised to larger than 8GiB without >+ * exceeding the maximum size for a standard ustar >+ * entry. */ >+ const int64_t ext_size_limit = 1024 * 1024 * (int64_t)1024; >+ /* Maximum size for a single line/attr: 100 million characters */ >+ /* This cannot be raised to more than 2GiB without exceeding >+ * a `size_t` on 32-bit platforms. */ >+ const size_t max_parsed_line_length = 99999999ULL; >+ /* Largest attribute prolog: size + name. */ >+ const size_t max_size_name = 512; >+ >+ /* Size and padding of the full extension body */ >+ int64_t ext_size, ext_padding; >+ size_t line_length, value_length, name_length; >+ ssize_t to_read, did_read; >+ const struct archive_entry_header_ustar *header; >+ const char *p, *attr_start, *name_start; > struct archive_string_conv *sconv; >- int err, err2; >- char *attr = in_as->s; >+ struct archive_string *pas = NULL; >+ struct archive_string attr_name; >+ int err = ARCHIVE_OK, r; > >- attr_length = in_as->length; >- tar->pax_hdrcharset_binary = 0; >- archive_string_empty(&(tar->entry_gname)); >- archive_string_empty(&(tar->entry_linkpath)); >- archive_string_empty(&(tar->entry_pathname)); >- archive_string_empty(&(tar->entry_pathname_override)); >- archive_string_empty(&(tar->entry_uname)); >- err = ARCHIVE_OK; >- while (attr_length > 0) { >- /* Parse decimal length field at start of line. */ >+ header = (const struct archive_entry_header_ustar *)h; >+ ext_size = tar_atol(header->size, sizeof(header->size)); >+ if (ext_size > entry_limit) { >+ return (ARCHIVE_FATAL); >+ } >+ if (ext_size < 0) { >+ archive_set_error(&a->archive, EINVAL, >+ "pax extension header has invalid size: %lld", >+ (long long)ext_size); >+ return (ARCHIVE_FATAL); >+ } >+ >+ ext_padding = 0x1ff & (-ext_size); >+ if (ext_size > ext_size_limit) { >+ /* Consume the pax extension body and return an error */ >+ if (ext_size + ext_padding != __archive_read_consume(a, ext_size + ext_padding)) { >+ return (ARCHIVE_FATAL); >+ } >+ archive_set_error(&a->archive, EINVAL, >+ "Ignoring oversized pax extensions: %d > %d", >+ (int)ext_size, (int)ext_size_limit); >+ return (ARCHIVE_WARN); >+ } >+ tar_flush_unconsumed(a, unconsumed); >+ >+ /* Parse the size/name of each pax attribute in the body */ >+ archive_string_init(&attr_name); >+ while (ext_size > 0) { >+ /* Read enough bytes to parse the size/name of the next attribute */ >+ to_read = max_size_name; >+ if (to_read > ext_size) { >+ to_read = ext_size; >+ } >+ p = __archive_read_ahead(a, to_read, &did_read); >+ if (p == NULL) { /* EOF */ >+ archive_set_error(&a->archive, EINVAL, >+ "Truncated tar archive" >+ " detected while reading pax attribute name"); >+ return (ARCHIVE_FATAL); >+ } >+ if (did_read > ext_size) { >+ did_read = ext_size; >+ } >+ >+ /* Parse size of attribute */ > line_length = 0; >- l = attr_length; >- p = attr; /* Record start of line. */ >- while (l>0) { >+ attr_start = p; >+ while (1) { >+ if (p >= attr_start + did_read) { >+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, >+ "Ignoring malformed pax attributes: overlarge attribute size field"); >+ *unconsumed += ext_size + ext_padding; >+ return (ARCHIVE_WARN); >+ } > if (*p == ' ') { > p++; >- l--; > break; > } > if (*p < '0' || *p > '9') { > archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, >- "Ignoring malformed pax extended attributes"); >+ "Ignoring malformed pax attributes: malformed attribute size field"); >+ *unconsumed += ext_size + ext_padding; > return (ARCHIVE_WARN); > } > line_length *= 10; > line_length += *p - '0'; >- if (line_length > 999999) { >+ if (line_length > max_parsed_line_length) { > archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, >- "Rejecting pax extended attribute > 1MB"); >+ "Ignoring malformed pax attribute: size > %lld", >+ (long long)max_parsed_line_length); >+ *unconsumed += ext_size + ext_padding; > return (ARCHIVE_WARN); > } > p++; >- l--; > } > >- /* >- * Parsed length must be no bigger than available data, >- * at least 1, and the last character of the line must >- * be '\n'. >- */ >- if (line_length > attr_length >- || line_length < 1 >- || attr[line_length - 1] != '\n') >- { >- archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, >- "Ignoring malformed pax extended attribute"); >- return (ARCHIVE_WARN); >+ if ((int64_t)line_length > ext_size) { >+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, >+ "Ignoring malformed pax attribute: %lld > %lld", >+ (long long)line_length, (long long)ext_size); >+ *unconsumed += ext_size + ext_padding; >+ return (ARCHIVE_WARN); > } > >- /* Null-terminate the line. */ >- attr[line_length - 1] = '\0'; >- >- /* Find end of key and null terminate it. */ >- key = p; >- if (key[0] == '=') >- return (-1); >- while (*p && *p != '=') >- ++p; >- if (*p == '\0') { >+ /* Parse name of attribute */ >+ if (p >= attr_start + did_read >+ || p >= attr_start + line_length >+ || *p == '=') { > archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, >- "Invalid pax extended attributes"); >+ "Ignoring malformed pax attributes: empty name found"); >+ *unconsumed += ext_size + ext_padding; > return (ARCHIVE_WARN); > } >- *p = '\0'; >+ name_start = p; >+ while (1) { >+ if (p >= attr_start + did_read || p >= attr_start + line_length) { >+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, >+ "Ignoring malformed pax attributes: overlarge attribute name"); >+ *unconsumed += ext_size + ext_padding; >+ return (ARCHIVE_WARN); >+ } >+ if (*p == '=') { >+ break; >+ } >+ p++; >+ } >+ name_length = p - name_start; >+ p++; // Skip '=' > >- value = p + 1; >+ // Save the name before we consume it >+ archive_strncpy(&attr_name, name_start, name_length); > >- /* Some values may be binary data */ >- value_length = attr + line_length - 1 - value; >+ ext_size -= p - attr_start; >+ value_length = line_length - (p - attr_start); > >- /* Identify this attribute and set it in the entry. */ >- err2 = pax_attribute(a, tar, entry, key, value, value_length); >- if (err2 == ARCHIVE_FATAL) >- return (err2); >- err = err_combine(err, err2); >+ /* Consume size, name, and `=` */ >+ *unconsumed += p - attr_start; >+ tar_flush_unconsumed(a, unconsumed); >+ >+ /* pax_attribute will consume value_length - 1 */ >+ r = pax_attribute(a, tar, entry, attr_name.s, archive_strlen(&attr_name), value_length - 1, unconsumed); >+ ext_size -= value_length - 1; >+ >+ // Release the allocated attr_name (either here or before every return in this function) >+ archive_string_free(&attr_name); > >- /* Skip to next line */ >- attr += line_length; >- attr_length -= line_length; >+ if (r < ARCHIVE_WARN) { >+ *unconsumed += ext_size + ext_padding; >+ return (r); >+ } >+ err = err_combine(err, r); >+ >+ /* Consume the `\n` that follows the pax attribute value. */ >+ tar_flush_unconsumed(a, unconsumed); >+ p = __archive_read_ahead(a, 1, &did_read); >+ if (p == NULL) { >+ archive_set_error(&a->archive, EINVAL, >+ "Truncated tar archive" >+ " detected while completing pax attribute"); >+ return (ARCHIVE_FATAL); >+ } >+ if (p[0] != '\n') { >+ archive_set_error(&a->archive, EINVAL, >+ "Malformed pax attributes"); >+ *unconsumed += ext_size + ext_padding; >+ return (ARCHIVE_WARN); >+ } >+ ext_size -= 1; >+ *unconsumed += 1; >+ tar_flush_unconsumed(a, unconsumed); > } >+ *unconsumed += ext_size + ext_padding; > > /* >- * PAX format uses UTF-8 as default charset for its metadata >- * unless hdrcharset=BINARY is present in its header. >- * We apply the charset specified by the hdrcharset option only >- * when the hdrcharset attribute(in PAX header) is BINARY because >- * we respect the charset described in PAX header and BINARY also >- * means that metadata(filename,uname and gname) character-set >- * is unknown. >+ * Some PAX values -- pathname, linkpath, uname, gname -- >+ * can't be copied into the entry until we know the character >+ * set to use: > */ >- if (tar->pax_hdrcharset_binary) >+ if (!tar->pax_hdrcharset_utf8) >+ /* PAX specified "BINARY", so use the default charset */ > sconv = tar->opt_sconv; > else { >+ /* PAX default UTF-8 */ > sconv = archive_string_conversion_from_charset( > &(a->archive), "UTF-8", 1); > if (sconv == NULL) >@@ -1700,83 +1965,85 @@ pax_header(struct archive_read *a, struct tar *tar, > SCONV_SET_OPT_UTF8_LIBARCHIVE2X); > } > >+ /* Pathname */ >+ pas = NULL; >+ if (archive_strlen(&(tar->entry_pathname_override)) > 0) { >+ /* Prefer GNU.sparse.name attribute if present */ >+ /* GNU sparse files store a fake name under the standard >+ * "pathname" key. */ >+ pas = &(tar->entry_pathname_override); >+ } else if (archive_strlen(&(tar->entry_pathname)) > 0) { >+ /* Use standard "pathname" PAX extension */ >+ pas = &(tar->entry_pathname); >+ } >+ if (pas != NULL) { >+ if (archive_entry_copy_pathname_l(entry, pas->s, >+ archive_strlen(pas), sconv) != 0) { >+ err = set_conversion_failed_error(a, sconv, "Pathname"); >+ if (err == ARCHIVE_FATAL) >+ return (err); >+ /* Use raw name without conversion */ >+ archive_entry_copy_pathname(entry, pas->s); >+ } >+ } >+ /* Uname */ >+ if (archive_strlen(&(tar->entry_uname)) > 0) { >+ if (archive_entry_copy_uname_l(entry, tar->entry_uname.s, >+ archive_strlen(&(tar->entry_uname)), sconv) != 0) { >+ err = set_conversion_failed_error(a, sconv, "Uname"); >+ if (err == ARCHIVE_FATAL) >+ return (err); >+ /* Use raw name without conversion */ >+ archive_entry_copy_uname(entry, tar->entry_uname.s); >+ } >+ } >+ /* Gname */ > if (archive_strlen(&(tar->entry_gname)) > 0) { > if (archive_entry_copy_gname_l(entry, tar->entry_gname.s, > archive_strlen(&(tar->entry_gname)), sconv) != 0) { > err = set_conversion_failed_error(a, sconv, "Gname"); > if (err == ARCHIVE_FATAL) > return (err); >- /* Use a converted an original name. */ >+ /* Use raw name without conversion */ > archive_entry_copy_gname(entry, tar->entry_gname.s); > } > } >+ /* Linkpath */ > if (archive_strlen(&(tar->entry_linkpath)) > 0) { > if (archive_entry_copy_link_l(entry, tar->entry_linkpath.s, > archive_strlen(&(tar->entry_linkpath)), sconv) != 0) { >- err = set_conversion_failed_error(a, sconv, "Linkname"); >+ err = set_conversion_failed_error(a, sconv, "Linkpath"); > if (err == ARCHIVE_FATAL) > return (err); >- /* Use a converted an original name. */ >+ /* Use raw name without conversion */ > archive_entry_copy_link(entry, tar->entry_linkpath.s); > } > } >- /* >- * Some extensions (such as the GNU sparse file extensions) >- * deliberately store a synthetic name under the regular 'path' >- * attribute and the real file name under a different attribute. >- * Since we're supposed to not care about the order, we >- * have no choice but to store all of the various filenames >- * we find and figure it all out afterwards. This is the >- * figuring out part. >- */ >- as = NULL; >- if (archive_strlen(&(tar->entry_pathname_override)) > 0) >- as = &(tar->entry_pathname_override); >- else if (archive_strlen(&(tar->entry_pathname)) > 0) >- as = &(tar->entry_pathname); >- if (as != NULL) { >- if (archive_entry_copy_pathname_l(entry, as->s, >- archive_strlen(as), sconv) != 0) { >- err = set_conversion_failed_error(a, sconv, "Pathname"); >- if (err == ARCHIVE_FATAL) >- return (err); >- /* Use a converted an original name. */ >- archive_entry_copy_pathname(entry, as->s); >- } >- } >- if (archive_strlen(&(tar->entry_uname)) > 0) { >- if (archive_entry_copy_uname_l(entry, tar->entry_uname.s, >- archive_strlen(&(tar->entry_uname)), sconv) != 0) { >- err = set_conversion_failed_error(a, sconv, "Uname"); >- if (err == ARCHIVE_FATAL) >- return (err); >- /* Use a converted an original name. */ >- archive_entry_copy_uname(entry, tar->entry_uname.s); >- } >- } >+ >+ /* Extension may have given us a corrected `entry_bytes_remaining` for >+ * the main entry; update the padding appropriately. */ >+ tar->entry_padding = 0x1ff & (-tar->entry_bytes_remaining); > return (err); > } > > static int >-pax_attribute_xattr(struct archive_entry *entry, >- const char *name, const char *value) >+pax_attribute_LIBARCHIVE_xattr(struct archive_entry *entry, >+ const char *name, size_t name_length, const char *value, size_t value_length) > { > char *name_decoded; > void *value_decoded; > size_t value_len; > >- if (strlen(name) < 18 || (memcmp(name, "LIBARCHIVE.xattr.", 17)) != 0) >+ if (name_length < 1) > return 3; > >- name += 17; >- > /* URL-decode name */ >- name_decoded = url_decode(name); >+ name_decoded = url_decode(name, name_length); > if (name_decoded == NULL) > return 2; > > /* Base-64 decode value */ >- value_decoded = base64_decode(value, strlen(value), &value_len); >+ value_decoded = base64_decode(value, value_length, &value_len); > if (value_decoded == NULL) { > free(name_decoded); > return 1; >@@ -1791,21 +2058,26 @@ pax_attribute_xattr(struct archive_entry *entry, > } > > static int >-pax_attribute_schily_xattr(struct archive_entry *entry, >- const char *name, const char *value, size_t value_length) >+pax_attribute_SCHILY_xattr(struct archive_entry *entry, >+ const char *name, size_t name_length, const char *value, size_t value_length) > { >- if (strlen(name) < 14 || (memcmp(name, "SCHILY.xattr.", 13)) != 0) >+ if (name_length < 1 || name_length > 128) { > return 1; >+ } > >- name += 13; >- >- archive_entry_xattr_add_entry(entry, name, value, value_length); >+ char * null_terminated_name = malloc(name_length + 1); >+ if (null_terminated_name != NULL) { >+ memcpy(null_terminated_name, name, name_length); >+ null_terminated_name[name_length] = '\0'; >+ archive_entry_xattr_add_entry(entry, null_terminated_name, value, value_length); >+ free(null_terminated_name); >+ } > > return 0; > } > > static int >-pax_attribute_rht_security_selinux(struct archive_entry *entry, >+pax_attribute_RHT_security_selinux(struct archive_entry *entry, > const char *value, size_t value_length) > { > archive_entry_xattr_add_entry(entry, "security.selinux", >@@ -1815,10 +2087,11 @@ pax_attribute_rht_security_selinux(struct archive_entry *entry, > } > > static int >-pax_attribute_acl(struct archive_read *a, struct tar *tar, >- struct archive_entry *entry, const char *value, int type) >+pax_attribute_SCHILY_acl(struct archive_read *a, struct tar *tar, >+ struct archive_entry *entry, size_t value_length, int type) > { > int r; >+ const char *p; > const char* errstr; > > switch (type) { >@@ -1845,8 +2118,28 @@ pax_attribute_acl(struct archive_read *a, struct tar *tar, > return (ARCHIVE_FATAL); > } > >- r = archive_acl_from_text_l(archive_entry_acl(entry), value, type, >- tar->sconv_acl); >+ if (value_length > acl_limit) { >+ __archive_read_consume(a, value_length); >+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, >+ "Unreasonably large ACL: %d > %d", >+ (int)value_length, (int)acl_limit); >+ return (ARCHIVE_WARN); >+ } >+ >+ p = __archive_read_ahead(a, value_length, NULL); >+ if (p == NULL) { >+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, >+ "Truncated tar archive " >+ "detected while reading ACL data"); >+ return (ARCHIVE_FATAL); >+ } >+ >+ r = archive_acl_from_text_nl(archive_entry_acl(entry), p, value_length, >+ type, tar->sconv_acl); >+ __archive_read_consume(a, value_length); >+ /* Workaround: Force perm_is_set() to be correct */ >+ /* If this bit were stored in the ACL, this wouldn't be needed */ >+ archive_entry_set_perm(entry, archive_entry_perm(entry)); > if (r != ARCHIVE_OK) { > if (r == ARCHIVE_FATAL) { > archive_set_error(&a->archive, ENOMEM, >@@ -1860,242 +2153,559 @@ pax_attribute_acl(struct archive_read *a, struct tar *tar, > return (r); > } > >+static int >+pax_attribute_read_time(struct archive_read *a, size_t value_length, int64_t *ps, long *pn, size_t *unconsumed) { >+ struct archive_string as; >+ int r; >+ >+ if (value_length > 128) { >+ __archive_read_consume(a, value_length); >+ *ps = 0; >+ *pn = 0; >+ return (ARCHIVE_FATAL); >+ } >+ >+ archive_string_init(&as); >+ r = read_bytes_to_string(a, &as, value_length, unconsumed); >+ if (r < ARCHIVE_OK) { >+ archive_string_free(&as); >+ return (r); >+ } >+ >+ pax_time(as.s, archive_strlen(&as), ps, pn); >+ archive_string_free(&as); >+ if (*ps < 0 || *ps == INT64_MAX) { >+ return (ARCHIVE_WARN); >+ } >+ return (ARCHIVE_OK); >+} >+ >+static int >+pax_attribute_read_number(struct archive_read *a, size_t value_length, int64_t *result) { >+ struct archive_string as; >+ size_t unconsumed = 0; >+ int r; >+ >+ if (value_length > 64) { >+ __archive_read_consume(a, value_length); >+ *result = 0; >+ return (ARCHIVE_FATAL); >+ } >+ >+ archive_string_init(&as); >+ r = read_bytes_to_string(a, &as, value_length, &unconsumed); >+ tar_flush_unconsumed(a, &unconsumed); >+ if (r < ARCHIVE_OK) { >+ archive_string_free(&as); >+ return (r); >+ } >+ >+ *result = tar_atol10(as.s, archive_strlen(&as)); >+ archive_string_free(&as); >+ if (*result < 0 || *result == INT64_MAX) { >+ *result = INT64_MAX; >+ return (ARCHIVE_WARN); >+ } >+ return (ARCHIVE_OK); >+} >+ > /* >- * Parse a single key=value attribute. key/value pointers are >- * assumed to point into reasonably long-lived storage. >+ * Parse a single key=value attribute. > * >- * Note that POSIX reserves all-lowercase keywords. Vendor-specific >- * extensions should always have keywords of the form "VENDOR.attribute" >- * In particular, it's quite feasible to support many different >- * vendor extensions here. I'm using "LIBARCHIVE" for extensions >- * unique to this library. >+ * POSIX reserves all-lowercase keywords. Vendor-specific extensions >+ * should always have keywords of the form "VENDOR.attribute" In >+ * particular, it's quite feasible to support many different vendor >+ * extensions here. I'm using "LIBARCHIVE" for extensions unique to >+ * this library. > * >- * Investigate other vendor-specific extensions and see if >+ * TODO: Investigate other vendor-specific extensions and see if > * any of them look useful. > */ > static int >-pax_attribute(struct archive_read *a, struct tar *tar, >- struct archive_entry *entry, const char *key, const char *value, size_t value_length) >+pax_attribute(struct archive_read *a, struct tar *tar, struct archive_entry *entry, >+ const char *key, size_t key_length, size_t value_length, size_t *unconsumed) > { >- int64_t s; >+ int64_t t; > long n; >- int err = ARCHIVE_OK, r; >+ const char *p; >+ ssize_t bytes_read; >+ int err = ARCHIVE_OK; > >-#ifndef __FreeBSD__ >- if (value == NULL) >- value = ""; /* Disable compiler warning; do not pass >- * NULL pointer to strlen(). */ >-#endif > switch (key[0]) { > case 'G': >- /* Reject GNU.sparse.* headers on non-regular files. */ >- if (strncmp(key, "GNU.sparse", 10) == 0 && >- !tar->sparse_allowed) { >- archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, >- "Non-regular file cannot be sparse"); >- return (ARCHIVE_FATAL); >- } >- >- /* GNU "0.0" sparse pax format. */ >- if (strcmp(key, "GNU.sparse.numblocks") == 0) { >- tar->sparse_offset = -1; >- tar->sparse_numbytes = -1; >- tar->sparse_gnu_major = 0; >- tar->sparse_gnu_minor = 0; >- } >- if (strcmp(key, "GNU.sparse.offset") == 0) { >- tar->sparse_offset = tar_atol10(value, strlen(value)); >- if (tar->sparse_numbytes != -1) { >- if (gnu_add_sparse_entry(a, tar, >- tar->sparse_offset, tar->sparse_numbytes) >- != ARCHIVE_OK) >- return (ARCHIVE_FATAL); >- tar->sparse_offset = -1; >- tar->sparse_numbytes = -1; >+ /* GNU.* extensions */ >+ if (key_length > 4 && memcmp(key, "GNU.", 4) == 0) { >+ key += 4; >+ key_length -= 4; >+ >+ /* GNU.sparse marks the existence of GNU sparse information */ >+ if (key_length == 6 && memcmp(key, "sparse", 6) == 0) { >+ tar->sparse_gnu_attributes_seen = 1; > } >- } >- if (strcmp(key, "GNU.sparse.numbytes") == 0) { >- tar->sparse_numbytes = tar_atol10(value, strlen(value)); >- if (tar->sparse_offset != -1) { >- if (gnu_add_sparse_entry(a, tar, >- tar->sparse_offset, tar->sparse_numbytes) >- != ARCHIVE_OK) >- return (ARCHIVE_FATAL); >- tar->sparse_offset = -1; >- tar->sparse_numbytes = -1; >- } >- } >- if (strcmp(key, "GNU.sparse.size") == 0) { >- tar->realsize = tar_atol10(value, strlen(value)); >- archive_entry_set_size(entry, tar->realsize); >- tar->realsize_override = 1; >- } > >- /* GNU "0.1" sparse pax format. */ >- if (strcmp(key, "GNU.sparse.map") == 0) { >- tar->sparse_gnu_major = 0; >- tar->sparse_gnu_minor = 1; >- if (gnu_sparse_01_parse(a, tar, value) != ARCHIVE_OK) >- return (ARCHIVE_WARN); >- } >- >- /* GNU "1.0" sparse pax format */ >- if (strcmp(key, "GNU.sparse.major") == 0) { >- tar->sparse_gnu_major = (int)tar_atol10(value, strlen(value)); >- tar->sparse_gnu_pending = 1; >- } >- if (strcmp(key, "GNU.sparse.minor") == 0) { >- tar->sparse_gnu_minor = (int)tar_atol10(value, strlen(value)); >- tar->sparse_gnu_pending = 1; >- } >- if (strcmp(key, "GNU.sparse.name") == 0) { >- /* >- * The real filename; when storing sparse >- * files, GNU tar puts a synthesized name into >- * the regular 'path' attribute in an attempt >- * to limit confusion. ;-) >- */ >- archive_strcpy(&(tar->entry_pathname_override), value); >- } >- if (strcmp(key, "GNU.sparse.realsize") == 0) { >- tar->realsize = tar_atol10(value, strlen(value)); >- archive_entry_set_size(entry, tar->realsize); >- tar->realsize_override = 1; >+ /* GNU.sparse.* extensions */ >+ else if (key_length > 7 && memcmp(key, "sparse.", 7) == 0) { >+ tar->sparse_gnu_attributes_seen = 1; >+ key += 7; >+ key_length -= 7; >+ >+ /* GNU "0.0" sparse pax format. */ >+ if (key_length == 9 && memcmp(key, "numblocks", 9) == 0) { >+ /* GNU.sparse.numblocks */ >+ tar->sparse_offset = -1; >+ tar->sparse_numbytes = -1; >+ tar->sparse_gnu_major = 0; >+ tar->sparse_gnu_minor = 0; >+ } >+ else if (key_length == 6 && memcmp(key, "offset", 6) == 0) { >+ /* GNU.sparse.offset */ >+ if ((err = pax_attribute_read_number(a, value_length, &t)) == ARCHIVE_OK) { >+ tar->sparse_offset = t; >+ if (tar->sparse_numbytes != -1) { >+ if (gnu_add_sparse_entry(a, tar, >+ tar->sparse_offset, tar->sparse_numbytes) >+ != ARCHIVE_OK) >+ return (ARCHIVE_FATAL); >+ tar->sparse_offset = -1; >+ tar->sparse_numbytes = -1; >+ } >+ } >+ return (err); >+ } >+ else if (key_length == 8 && memcmp(key, "numbytes", 8) == 0) { >+ /* GNU.sparse.numbytes */ >+ if ((err = pax_attribute_read_number(a, value_length, &t)) == ARCHIVE_OK) { >+ tar->sparse_numbytes = t; >+ if (tar->sparse_offset != -1) { >+ if (gnu_add_sparse_entry(a, tar, >+ tar->sparse_offset, tar->sparse_numbytes) >+ != ARCHIVE_OK) >+ return (ARCHIVE_FATAL); >+ tar->sparse_offset = -1; >+ tar->sparse_numbytes = -1; >+ } >+ } >+ return (err); >+ } >+ else if (key_length == 4 && memcmp(key, "size", 4) == 0) { >+ /* GNU.sparse.size */ >+ if ((err = pax_attribute_read_number(a, value_length, &t)) == ARCHIVE_OK) { >+ tar->realsize = t; >+ archive_entry_set_size(entry, tar->realsize); >+ tar->realsize_override = 1; >+ } >+ return (err); >+ } >+ >+ /* GNU "0.1" sparse pax format. */ >+ else if (key_length == 3 && memcmp(key, "map", 3) == 0) { >+ /* GNU.sparse.map */ >+ tar->sparse_gnu_major = 0; >+ tar->sparse_gnu_minor = 1; >+ if (value_length > sparse_map_limit) { >+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, >+ "Unreasonably large sparse map: %d > %d", >+ (int)value_length, (int)sparse_map_limit); >+ err = ARCHIVE_FAILED; >+ } else { >+ p = __archive_read_ahead(a, value_length, &bytes_read); >+ if (p == NULL) { >+ archive_set_error(&a->archive, EINVAL, >+ "Truncated archive" >+ " detected while reading GNU sparse data"); >+ return (ARCHIVE_FATAL); >+ } >+ if (gnu_sparse_01_parse(a, tar, p, value_length) != ARCHIVE_OK) { >+ err = ARCHIVE_WARN; >+ } >+ } >+ __archive_read_consume(a, value_length); >+ return (err); >+ } >+ >+ /* GNU "1.0" sparse pax format */ >+ else if (key_length == 5 && memcmp(key, "major", 5) == 0) { >+ /* GNU.sparse.major */ >+ if ((err = pax_attribute_read_number(a, value_length, &t)) == ARCHIVE_OK >+ && t >= 0 >+ && t <= 10) { >+ tar->sparse_gnu_major = (int)t; >+ } >+ return (err); >+ } >+ else if (key_length == 5 && memcmp(key, "minor", 5) == 0) { >+ /* GNU.sparse.minor */ >+ if ((err = pax_attribute_read_number(a, value_length, &t)) == ARCHIVE_OK >+ && t >= 0 >+ && t <= 10) { >+ tar->sparse_gnu_minor = (int)t; >+ } >+ return (err); >+ } >+ else if (key_length == 4 && memcmp(key, "name", 4) == 0) { >+ /* GNU.sparse.name */ >+ /* >+ * The real filename; when storing sparse >+ * files, GNU tar puts a synthesized name into >+ * the regular 'path' attribute in an attempt >+ * to limit confusion. ;-) >+ */ >+ if (value_length > pathname_limit) { >+ *unconsumed += value_length; >+ err = ARCHIVE_WARN; >+ } else { >+ err = read_bytes_to_string(a, &(tar->entry_pathname_override), >+ value_length, unconsumed); >+ } >+ return (err); >+ } >+ else if (key_length == 8 && memcmp(key, "realsize", 8) == 0) { >+ /* GNU.sparse.realsize */ >+ if ((err = pax_attribute_read_number(a, value_length, &t)) == ARCHIVE_OK) { >+ tar->realsize = t; >+ archive_entry_set_size(entry, tar->realsize); >+ tar->realsize_override = 1; >+ } >+ return (err); >+ } >+ } > } > break; > case 'L': >- /* Our extensions */ >-/* TODO: Handle arbitrary extended attributes... */ >-/* >- if (strcmp(key, "LIBARCHIVE.xxxxxxx") == 0) >- archive_entry_set_xxxxxx(entry, value); >-*/ >- if (strcmp(key, "LIBARCHIVE.creationtime") == 0) { >- pax_time(value, &s, &n); >- archive_entry_set_birthtime(entry, s, n); >- } >- if (strcmp(key, "LIBARCHIVE.symlinktype") == 0) { >- if (strcmp(value, "file") == 0) { >- archive_entry_set_symlink_type(entry, >- AE_SYMLINK_TYPE_FILE); >- } else if (strcmp(value, "dir") == 0) { >- archive_entry_set_symlink_type(entry, >- AE_SYMLINK_TYPE_DIRECTORY); >+ /* LIBARCHIVE extensions */ >+ if (key_length > 11 && memcmp(key, "LIBARCHIVE.", 11) == 0) { >+ key_length -= 11; >+ key += 11; >+ >+ /* TODO: Handle arbitrary extended attributes... */ >+ /* >+ if (strcmp(key, "LIBARCHIVE.xxxxxxx") == 0) >+ archive_entry_set_xxxxxx(entry, value); >+ */ >+ if (key_length == 12 && memcmp(key, "creationtime", 12) == 0) { >+ /* LIBARCHIVE.creationtime */ >+ if ((err = pax_attribute_read_time(a, value_length, &t, &n, unconsumed)) == ARCHIVE_OK) { >+ archive_entry_set_birthtime(entry, t, n); >+ } >+ return (err); >+ } >+ else if (key_length == 11 && memcmp(key, "symlinktype", 11) == 0) { >+ /* LIBARCHIVE.symlinktype */ >+ if (value_length < 16) { >+ p = __archive_read_ahead(a, value_length, &bytes_read); >+ if (p == NULL) { >+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, >+ "Truncated tar archive " >+ "detected while reading `symlinktype` attribute"); >+ return (ARCHIVE_FATAL); >+ } >+ if (value_length == 4 && memcmp(p, "file", 4) == 0) { >+ archive_entry_set_symlink_type(entry, >+ AE_SYMLINK_TYPE_FILE); >+ } else if (value_length == 3 && memcmp(p, "dir", 3) == 0) { >+ archive_entry_set_symlink_type(entry, >+ AE_SYMLINK_TYPE_DIRECTORY); >+ } else { >+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, >+ "Unrecognized symlink type"); >+ err = ARCHIVE_WARN; >+ } >+ } else { >+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, >+ "symlink type is very long" >+ "(longest recognized value is 4 bytes, this is %d)", >+ (int)value_length); >+ err = ARCHIVE_WARN; >+ } >+ __archive_read_consume(a, value_length); >+ return (err); >+ } >+ else if (key_length > 6 && memcmp(key, "xattr.", 6) == 0) { >+ key_length -= 6; >+ key += 6; >+ if (value_length > xattr_limit) { >+ err = ARCHIVE_WARN; >+ } else { >+ p = __archive_read_ahead(a, value_length, &bytes_read); >+ if (p == NULL) { >+ archive_set_error(&a->archive, EINVAL, >+ "Truncated archive" >+ " detected while reading xattr information"); >+ return (ARCHIVE_FATAL); >+ } >+ if (pax_attribute_LIBARCHIVE_xattr(entry, key, key_length, p, value_length)) { >+ /* TODO: Unable to parse xattr */ >+ err = ARCHIVE_WARN; >+ } >+ } >+ __archive_read_consume(a, value_length); >+ return (err); > } > } >- if (memcmp(key, "LIBARCHIVE.xattr.", 17) == 0) >- pax_attribute_xattr(entry, key, value); > break; > case 'R': > /* GNU tar uses RHT.security header to store SELinux xattrs > * SCHILY.xattr.security.selinux == RHT.security.selinux */ >- if (strcmp(key, "RHT.security.selinux") == 0) { >- pax_attribute_rht_security_selinux(entry, value, >- value_length); >+ if (key_length == 20 && memcmp(key, "RHT.security.selinux", 20) == 0) { >+ if (value_length > xattr_limit) { >+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, >+ "Ignoring unreasonably large security.selinux attribute:" >+ " %d > %d", >+ (int)value_length, (int)xattr_limit); >+ /* TODO: Should this be FAILED instead? */ >+ err = ARCHIVE_WARN; >+ } else { >+ p = __archive_read_ahead(a, value_length, &bytes_read); >+ if (p == NULL) { >+ archive_set_error(&a->archive, EINVAL, >+ "Truncated archive" >+ " detected while reading selinux data"); >+ return (ARCHIVE_FATAL); >+ } >+ if (pax_attribute_RHT_security_selinux(entry, p, value_length)) { >+ /* TODO: Unable to parse xattr */ >+ err = ARCHIVE_WARN; >+ } > } >+ __archive_read_consume(a, value_length); >+ return (err); >+ } > break; > case 'S': >- /* We support some keys used by the "star" archiver */ >- if (strcmp(key, "SCHILY.acl.access") == 0) { >- r = pax_attribute_acl(a, tar, entry, value, >- ARCHIVE_ENTRY_ACL_TYPE_ACCESS); >- if (r == ARCHIVE_FATAL) >- return (r); >- } else if (strcmp(key, "SCHILY.acl.default") == 0) { >- r = pax_attribute_acl(a, tar, entry, value, >- ARCHIVE_ENTRY_ACL_TYPE_DEFAULT); >- if (r == ARCHIVE_FATAL) >- return (r); >- } else if (strcmp(key, "SCHILY.acl.ace") == 0) { >- r = pax_attribute_acl(a, tar, entry, value, >- ARCHIVE_ENTRY_ACL_TYPE_NFS4); >- if (r == ARCHIVE_FATAL) >- return (r); >- } else if (strcmp(key, "SCHILY.devmajor") == 0) { >- archive_entry_set_rdevmajor(entry, >- (dev_t)tar_atol10(value, strlen(value))); >- } else if (strcmp(key, "SCHILY.devminor") == 0) { >- archive_entry_set_rdevminor(entry, >- (dev_t)tar_atol10(value, strlen(value))); >- } else if (strcmp(key, "SCHILY.fflags") == 0) { >- archive_entry_copy_fflags_text(entry, value); >- } else if (strcmp(key, "SCHILY.dev") == 0) { >- archive_entry_set_dev(entry, >- (dev_t)tar_atol10(value, strlen(value))); >- } else if (strcmp(key, "SCHILY.ino") == 0) { >- archive_entry_set_ino(entry, >- tar_atol10(value, strlen(value))); >- } else if (strcmp(key, "SCHILY.nlink") == 0) { >- archive_entry_set_nlink(entry, (unsigned) >- tar_atol10(value, strlen(value))); >- } else if (strcmp(key, "SCHILY.realsize") == 0) { >- tar->realsize = tar_atol10(value, strlen(value)); >- tar->realsize_override = 1; >- archive_entry_set_size(entry, tar->realsize); >- } else if (strncmp(key, "SCHILY.xattr.", 13) == 0) { >- pax_attribute_schily_xattr(entry, key, value, >- value_length); >- } else if (strcmp(key, "SUN.holesdata") == 0) { >- /* A Solaris extension for sparse. */ >- r = solaris_sparse_parse(a, tar, entry, value); >- if (r < err) { >- if (r == ARCHIVE_FATAL) >- return (r); >- err = r; >- archive_set_error(&a->archive, >- ARCHIVE_ERRNO_MISC, >- "Parse error: SUN.holesdata"); >+ /* SCHILY.* extensions used by "star" archiver */ >+ if (key_length > 7 && memcmp(key, "SCHILY.", 7) == 0) { >+ key_length -= 7; >+ key += 7; >+ >+ if (key_length == 10 && memcmp(key, "acl.access", 10) == 0) { >+ err = pax_attribute_SCHILY_acl(a, tar, entry, value_length, >+ ARCHIVE_ENTRY_ACL_TYPE_ACCESS); >+ // TODO: Mark mode as set >+ return (err); >+ } >+ else if (key_length == 11 && memcmp(key, "acl.default", 11) == 0) { >+ err = pax_attribute_SCHILY_acl(a, tar, entry, value_length, >+ ARCHIVE_ENTRY_ACL_TYPE_DEFAULT); >+ return (err); >+ } >+ else if (key_length == 7 && memcmp(key, "acl.ace", 7) == 0) { >+ err = pax_attribute_SCHILY_acl(a, tar, entry, value_length, >+ ARCHIVE_ENTRY_ACL_TYPE_NFS4); >+ // TODO: Mark mode as set >+ return (err); >+ } >+ else if (key_length == 8 && memcmp(key, "devmajor", 8) == 0) { >+ if ((err = pax_attribute_read_number(a, value_length, &t)) == ARCHIVE_OK) { >+ archive_entry_set_rdevmajor(entry, (dev_t)t); >+ } >+ return (err); >+ } >+ else if (key_length == 8 && memcmp(key, "devminor", 8) == 0) { >+ if ((err = pax_attribute_read_number(a, value_length, &t)) == ARCHIVE_OK) { >+ archive_entry_set_rdevminor(entry, (dev_t)t); >+ } >+ return (err); >+ } >+ else if (key_length == 6 && memcmp(key, "fflags", 6) == 0) { >+ if (value_length < fflags_limit) { >+ p = __archive_read_ahead(a, value_length, &bytes_read); >+ if (p == NULL) { >+ /* Truncated archive */ >+ archive_set_error(&a->archive, EINVAL, >+ "Truncated archive" >+ " detected while reading SCHILY.fflags"); >+ return (ARCHIVE_FATAL); >+ } >+ archive_entry_copy_fflags_text_len(entry, p, value_length); >+ err = ARCHIVE_OK; >+ } else { >+ /* Overlong fflags field */ >+ err = ARCHIVE_WARN; >+ } >+ __archive_read_consume(a, value_length); >+ return (err); >+ } >+ else if (key_length == 3 && memcmp(key, "dev", 3) == 0) { >+ if ((err = pax_attribute_read_number(a, value_length, &t)) == ARCHIVE_OK) { >+ archive_entry_set_dev(entry, (dev_t)t); >+ } >+ return (err); >+ } >+ else if (key_length == 3 && memcmp(key, "ino", 3) == 0) { >+ if ((err = pax_attribute_read_number(a, value_length, &t)) == ARCHIVE_OK) { >+ archive_entry_set_ino(entry, t); >+ } >+ return (err); >+ } >+ else if (key_length == 5 && memcmp(key, "nlink", 5) == 0) { >+ if ((err = pax_attribute_read_number(a, value_length, &t)) == ARCHIVE_OK) { >+ archive_entry_set_nlink(entry, (unsigned int)t); >+ } >+ return (err); >+ } >+ else if (key_length == 8 && memcmp(key, "realsize", 8) == 0) { >+ if ((err = pax_attribute_read_number(a, value_length, &t)) == ARCHIVE_OK) { >+ tar->realsize = t; >+ tar->realsize_override = 1; >+ archive_entry_set_size(entry, tar->realsize); >+ } >+ return (err); >+ } >+ else if (key_length > 6 && memcmp(key, "xattr.", 6) == 0) { >+ key_length -= 6; >+ key += 6; >+ if (value_length < xattr_limit) { >+ p = __archive_read_ahead(a, value_length, &bytes_read); >+ if (p == NULL) { >+ archive_set_error(&a->archive, EINVAL, >+ "Truncated archive" >+ " detected while reading SCHILY.xattr"); >+ return (ARCHIVE_FATAL); >+ } >+ if (pax_attribute_SCHILY_xattr(entry, key, key_length, p, value_length)) { >+ /* TODO: Unable to parse xattr */ >+ err = ARCHIVE_WARN; >+ } >+ } else { >+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, >+ "Unreasonably large xattr: %d > %d", >+ (int)value_length, (int)xattr_limit); >+ err = ARCHIVE_WARN; >+ } >+ __archive_read_consume(a, value_length); >+ return (err); >+ } >+ } >+ /* SUN.* extensions from Solaris tar */ >+ if (key_length > 4 && memcmp(key, "SUN.", 4) == 0) { >+ key_length -= 4; >+ key += 4; >+ >+ if (key_length == 9 && memcmp(key, "holesdata", 9) == 0) { >+ /* SUN.holesdata */ >+ if (value_length < sparse_map_limit) { >+ p = __archive_read_ahead(a, value_length, &bytes_read); >+ if (p == NULL) { >+ archive_set_error(&a->archive, EINVAL, >+ "Truncated archive" >+ " detected while reading SUN.holesdata"); >+ return (ARCHIVE_FATAL); >+ } >+ err = pax_attribute_SUN_holesdata(a, tar, entry, p, value_length); >+ if (err < ARCHIVE_OK) { >+ archive_set_error(&a->archive, >+ ARCHIVE_ERRNO_MISC, >+ "Parse error: SUN.holesdata"); >+ } >+ } else { >+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, >+ "Unreasonably large sparse map: %d > %d", >+ (int)value_length, (int)sparse_map_limit); >+ err = ARCHIVE_FAILED; >+ } >+ __archive_read_consume(a, value_length); >+ return (err); > } > } > break; > case 'a': >- if (strcmp(key, "atime") == 0) { >- pax_time(value, &s, &n); >- archive_entry_set_atime(entry, s, n); >+ if (key_length == 5 && memcmp(key, "atime", 5) == 0) { >+ if ((err = pax_attribute_read_time(a, value_length, &t, &n, unconsumed)) == ARCHIVE_OK) { >+ archive_entry_set_atime(entry, t, n); >+ } >+ return (err); > } > break; > case 'c': >- if (strcmp(key, "ctime") == 0) { >- pax_time(value, &s, &n); >- archive_entry_set_ctime(entry, s, n); >- } else if (strcmp(key, "charset") == 0) { >+ if (key_length == 5 && memcmp(key, "ctime", 5) == 0) { >+ if ((err = pax_attribute_read_time(a, value_length, &t, &n, unconsumed)) == ARCHIVE_OK) { >+ archive_entry_set_ctime(entry, t, n); >+ } >+ return (err); >+ } else if (key_length == 7 && memcmp(key, "charset", 7) == 0) { > /* TODO: Publish charset information in entry. */ >- } else if (strcmp(key, "comment") == 0) { >+ } else if (key_length == 7 && memcmp(key, "comment", 7) == 0) { > /* TODO: Publish comment in entry. */ > } > break; > case 'g': >- if (strcmp(key, "gid") == 0) { >- archive_entry_set_gid(entry, >- tar_atol10(value, strlen(value))); >- } else if (strcmp(key, "gname") == 0) { >- archive_strcpy(&(tar->entry_gname), value); >+ if (key_length == 3 && memcmp(key, "gid", 3) == 0) { >+ if ((err = pax_attribute_read_number(a, value_length, &t)) == ARCHIVE_OK) { >+ archive_entry_set_gid(entry, t); >+ } >+ return (err); >+ } else if (key_length == 5 && memcmp(key, "gname", 5) == 0) { >+ if (value_length > guname_limit) { >+ *unconsumed += value_length; >+ err = ARCHIVE_WARN; >+ } else { >+ err = read_bytes_to_string(a, &(tar->entry_gname), value_length, unconsumed); >+ } >+ return (err); > } > break; > case 'h': >- if (strcmp(key, "hdrcharset") == 0) { >- if (strcmp(value, "BINARY") == 0) >- /* Binary mode. */ >- tar->pax_hdrcharset_binary = 1; >- else if (strcmp(value, "ISO-IR 10646 2000 UTF-8") == 0) >- tar->pax_hdrcharset_binary = 0; >+ if (key_length == 10 && memcmp(key, "hdrcharset", 10) == 0) { >+ if (value_length < 64) { >+ p = __archive_read_ahead(a, value_length, &bytes_read); >+ if (p == NULL) { >+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, >+ "Truncated tar archive " >+ "detected while reading hdrcharset attribute"); >+ return (ARCHIVE_FATAL); >+ } >+ if (value_length == 6 >+ && memcmp(p, "BINARY", 6) == 0) { >+ /* Binary mode. */ >+ tar->pax_hdrcharset_utf8 = 0; >+ err = ARCHIVE_OK; >+ } else if (value_length == 23 >+ && memcmp(p, "ISO-IR 10646 2000 UTF-8", 23) == 0) { >+ tar->pax_hdrcharset_utf8 = 1; >+ err = ARCHIVE_OK; >+ } else { >+ /* TODO: Unrecognized character set */ >+ err = ARCHIVE_WARN; >+ } >+ } else { >+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, >+ "hdrcharset attribute is unreasonably large (%d bytes)", >+ (int)value_length); >+ err = ARCHIVE_WARN; >+ } >+ __archive_read_consume(a, value_length); >+ return (err); > } > break; > case 'l': > /* pax interchange doesn't distinguish hardlink vs. symlink. */ >- if (strcmp(key, "linkpath") == 0) { >- archive_strcpy(&(tar->entry_linkpath), value); >+ if (key_length == 8 && memcmp(key, "linkpath", 8) == 0) { >+ if (value_length > pathname_limit) { >+ *unconsumed += value_length; >+ err = ARCHIVE_WARN; >+ } else { >+ err = read_bytes_to_string(a, &tar->entry_linkpath, value_length, unconsumed); >+ } >+ return (err); > } > break; > case 'm': >- if (strcmp(key, "mtime") == 0) { >- pax_time(value, &s, &n); >- archive_entry_set_mtime(entry, s, n); >+ if (key_length == 5 && memcmp(key, "mtime", 5) == 0) { >+ if ((err = pax_attribute_read_time(a, value_length, &t, &n, unconsumed)) == ARCHIVE_OK) { >+ archive_entry_set_mtime(entry, t, n); >+ } >+ return (err); > } > break; > case 'p': >- if (strcmp(key, "path") == 0) { >- archive_strcpy(&(tar->entry_pathname), value); >+ if (key_length == 4 && memcmp(key, "path", 4) == 0) { >+ if (value_length > pathname_limit) { >+ *unconsumed += value_length; >+ err = ARCHIVE_WARN; >+ } else { >+ err = read_bytes_to_string(a, &(tar->entry_pathname), value_length, unconsumed); >+ } >+ return (err); > } > break; > case 'r': >@@ -2104,48 +2714,54 @@ pax_attribute(struct archive_read *a, struct tar *tar, > case 's': > /* POSIX has reserved 'security.*' */ > /* Someday: if (strcmp(key, "security.acl") == 0) { ... } */ >- if (strcmp(key, "size") == 0) { >+ if (key_length == 4 && memcmp(key, "size", 4) == 0) { > /* "size" is the size of the data in the entry. */ >- tar->entry_bytes_remaining >- = tar_atol10(value, strlen(value)); >- if (tar->entry_bytes_remaining < 0) { >- tar->entry_bytes_remaining = 0; >- archive_set_error(&a->archive, >- ARCHIVE_ERRNO_MISC, >- "Tar size attribute is negative"); >- return (ARCHIVE_FATAL); >+ if ((err = pax_attribute_read_number(a, value_length, &t)) == ARCHIVE_OK) { >+ tar->entry_bytes_remaining = t; >+ /* >+ * The "size" pax header keyword always overrides the >+ * "size" field in the tar header. >+ * GNU.sparse.realsize, GNU.sparse.size and >+ * SCHILY.realsize override this value. >+ */ >+ if (!tar->realsize_override) { >+ archive_entry_set_size(entry, >+ tar->entry_bytes_remaining); >+ tar->realsize >+ = tar->entry_bytes_remaining; >+ } > } >- if (tar->entry_bytes_remaining == INT64_MAX) { >- /* Note: tar_atol returns INT64_MAX on overflow */ >+ else if (t == INT64_MAX) { >+ /* Note: pax_attr_read_number returns INT64_MAX on overflow or < 0 */ > tar->entry_bytes_remaining = 0; > archive_set_error(&a->archive, > ARCHIVE_ERRNO_MISC, > "Tar size attribute overflow"); > return (ARCHIVE_FATAL); > } >- /* >- * The "size" pax header keyword always overrides the >- * "size" field in the tar header. >- * GNU.sparse.realsize, GNU.sparse.size and >- * SCHILY.realsize override this value. >- */ >- if (!tar->realsize_override) { >- archive_entry_set_size(entry, >- tar->entry_bytes_remaining); >- tar->realsize >- = tar->entry_bytes_remaining; >- } >+ return (err); > } > break; > case 'u': >- if (strcmp(key, "uid") == 0) { >- archive_entry_set_uid(entry, >- tar_atol10(value, strlen(value))); >- } else if (strcmp(key, "uname") == 0) { >- archive_strcpy(&(tar->entry_uname), value); >+ if (key_length == 3 && memcmp(key, "uid", 3) == 0) { >+ if ((err = pax_attribute_read_number(a, value_length, &t)) == ARCHIVE_OK) { >+ archive_entry_set_uid(entry, t); >+ } >+ return (err); >+ } else if (key_length == 5 && memcmp(key, "uname", 5) == 0) { >+ if (value_length > guname_limit) { >+ *unconsumed += value_length; >+ err = ARCHIVE_WARN; >+ } else { >+ err = read_bytes_to_string(a, &(tar->entry_uname), value_length, unconsumed); >+ } >+ return (err); > } > break; > } >+ >+ /* Unrecognized key, just skip the entire value. */ >+ __archive_read_consume(a, value_length); > return (err); > } > >@@ -2155,7 +2771,7 @@ pax_attribute(struct archive_read *a, struct tar *tar, > * parse a decimal time value, which may include a fractional portion > */ > static void >-pax_time(const char *p, int64_t *ps, long *pn) >+pax_time(const char *p, size_t length, int64_t *ps, long *pn) > { > char digit; > int64_t s; >@@ -2166,13 +2782,18 @@ pax_time(const char *p, int64_t *ps, long *pn) > limit = INT64_MAX / 10; > last_digit_limit = INT64_MAX % 10; > >+ if (length <= 0) { >+ *ps = 0; >+ return; >+ } > s = 0; > sign = 1; > if (*p == '-') { > sign = -1; > p++; >+ length--; > } >- while (*p >= '0' && *p <= '9') { >+ while (length > 0 && *p >= '0' && *p <= '9') { > digit = *p - '0'; > if (s > limit || > (s == limit && digit > last_digit_limit)) { >@@ -2181,6 +2802,7 @@ pax_time(const char *p, int64_t *ps, long *pn) > } > s = (s * 10) + digit; > ++p; >+ --length; > } > > *ps = s * sign; >@@ -2188,13 +2810,14 @@ pax_time(const char *p, int64_t *ps, long *pn) > /* Calculate nanoseconds. */ > *pn = 0; > >- if (*p != '.') >+ if (length <= 0 || *p != '.') > return; > > l = 100000000UL; > do { > ++p; >- if (*p >= '0' && *p <= '9') >+ --length; >+ if (length > 0 && *p >= '0' && *p <= '9') > *pn += (*p - '0') * l; > else > break; >@@ -2225,49 +2848,65 @@ header_gnutar(struct archive_read *a, struct tar *tar, > > /* Copy filename over (to ensure null termination). */ > header = (const struct archive_entry_header_gnutar *)h; >- if (archive_entry_copy_pathname_l(entry, >- header->name, sizeof(header->name), tar->sconv) != 0) { >- err = set_conversion_failed_error(a, tar->sconv, "Pathname"); >- if (err == ARCHIVE_FATAL) >- return (err); >+ const char *existing_pathname = archive_entry_pathname(entry); >+ if (existing_pathname == NULL || existing_pathname[0] == '\0') { >+ if (archive_entry_copy_pathname_l(entry, >+ header->name, sizeof(header->name), tar->sconv) != 0) { >+ err = set_conversion_failed_error(a, tar->sconv, "Pathname"); >+ if (err == ARCHIVE_FATAL) >+ return (err); >+ } > } > > /* Fields common to ustar and GNU */ > /* XXX Can the following be factored out since it's common > * to ustar and gnu tar? Is it okay to move it down into > * header_common, perhaps? */ >- if (archive_entry_copy_uname_l(entry, >- header->uname, sizeof(header->uname), tar->sconv) != 0) { >- err = set_conversion_failed_error(a, tar->sconv, "Uname"); >- if (err == ARCHIVE_FATAL) >- return (err); >+ const char *existing_uname = archive_entry_uname(entry); >+ if (existing_uname == NULL || existing_uname[0] == '\0') { >+ if (archive_entry_copy_uname_l(entry, >+ header->uname, sizeof(header->uname), tar->sconv) != 0) { >+ err = set_conversion_failed_error(a, tar->sconv, "Uname"); >+ if (err == ARCHIVE_FATAL) >+ return (err); >+ } > } > >- if (archive_entry_copy_gname_l(entry, >- header->gname, sizeof(header->gname), tar->sconv) != 0) { >- err = set_conversion_failed_error(a, tar->sconv, "Gname"); >- if (err == ARCHIVE_FATAL) >- return (err); >+ const char *existing_gname = archive_entry_gname(entry); >+ if (existing_gname == NULL || existing_gname[0] == '\0') { >+ if (archive_entry_copy_gname_l(entry, >+ header->gname, sizeof(header->gname), tar->sconv) != 0) { >+ err = set_conversion_failed_error(a, tar->sconv, "Gname"); >+ if (err == ARCHIVE_FATAL) >+ return (err); >+ } > } > > /* Parse out device numbers only for char and block specials */ > if (header->typeflag[0] == '3' || header->typeflag[0] == '4') { >- archive_entry_set_rdevmajor(entry, (dev_t) >- tar_atol(header->rdevmajor, sizeof(header->rdevmajor))); >- archive_entry_set_rdevminor(entry, (dev_t) >- tar_atol(header->rdevminor, sizeof(header->rdevminor))); >- } else >+ if (!archive_entry_rdev_is_set(entry)) { >+ archive_entry_set_rdevmajor(entry, (dev_t) >+ tar_atol(header->rdevmajor, sizeof(header->rdevmajor))); >+ archive_entry_set_rdevminor(entry, (dev_t) >+ tar_atol(header->rdevminor, sizeof(header->rdevminor))); >+ } >+ } else { > archive_entry_set_rdev(entry, 0); >+ } > > tar->entry_padding = 0x1ff & (-tar->entry_bytes_remaining); > > /* Grab GNU-specific fields. */ >- t = tar_atol(header->atime, sizeof(header->atime)); >- if (t > 0) >- archive_entry_set_atime(entry, t, 0); >- t = tar_atol(header->ctime, sizeof(header->ctime)); >- if (t > 0) >- archive_entry_set_ctime(entry, t, 0); >+ if (!archive_entry_atime_is_set(entry)) { >+ t = tar_atol(header->atime, sizeof(header->atime)); >+ if (t > 0) >+ archive_entry_set_atime(entry, t, 0); >+ } >+ if (!archive_entry_ctime_is_set(entry)) { >+ t = tar_atol(header->ctime, sizeof(header->ctime)); >+ if (t > 0) >+ archive_entry_set_ctime(entry, t, 0); >+ } > > if (header->realsize[0] != 0) { > tar->realsize >@@ -2295,7 +2934,7 @@ gnu_add_sparse_entry(struct archive_read *a, struct tar *tar, > { > struct sparse_block *p; > >- p = (struct sparse_block *)calloc(1, sizeof(*p)); >+ p = calloc(1, sizeof(*p)); > if (p == NULL) { > archive_set_error(&a->archive, ENOMEM, "Out of memory"); > return (ARCHIVE_FATAL); >@@ -2360,9 +2999,7 @@ gnu_sparse_old_read(struct archive_read *a, struct tar *tar, > do { > tar_flush_unconsumed(a, unconsumed); > data = __archive_read_ahead(a, 512, &bytes_read); >- if (bytes_read < 0) >- return (ARCHIVE_FATAL); >- if (bytes_read < 512) { >+ if (data == NULL) { > archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, > "Truncated tar archive " > "detected while reading sparse file data"); >@@ -2419,19 +3056,19 @@ gnu_sparse_old_parse(struct archive_read *a, struct tar *tar, > * importantly, the sparse data was lost when extracted by archivers > * that didn't recognize this extension. > */ >- > static int >-gnu_sparse_01_parse(struct archive_read *a, struct tar *tar, const char *p) >+gnu_sparse_01_parse(struct archive_read *a, struct tar *tar, const char *p, size_t length) > { > const char *e; > int64_t offset = -1, size = -1; > > for (;;) { > e = p; >- while (*e != '\0' && *e != ',') { >+ while (length > 0 && *e != ',') { > if (*e < '0' || *e > '9') > return (ARCHIVE_WARN); > e++; >+ length--; > } > if (offset < 0) { > offset = tar_atol10(p, e - p); >@@ -2446,9 +3083,10 @@ gnu_sparse_01_parse(struct archive_read *a, struct tar *tar, const char *p) > return (ARCHIVE_FATAL); > offset = -1; > } >- if (*e == '\0') >+ if (length == 0) > return (ARCHIVE_OK); > p = e + 1; >+ length--; > } > } > >@@ -2570,8 +3208,8 @@ gnu_sparse_10_read(struct archive_read *a, struct tar *tar, size_t *unconsumed) > * consist of both data and hole. > */ > static int >-solaris_sparse_parse(struct archive_read *a, struct tar *tar, >- struct archive_entry *entry, const char *p) >+pax_attribute_SUN_holesdata(struct archive_read *a, struct tar *tar, >+ struct archive_entry *entry, const char *p, size_t length) > { > const char *e; > int64_t start, end; >@@ -2580,16 +3218,21 @@ solaris_sparse_parse(struct archive_read *a, struct tar *tar, > (void)entry; /* UNUSED */ > > end = 0; >- if (*p == ' ') >+ if (length <= 0) >+ return (ARCHIVE_WARN); >+ if (*p == ' ') { > p++; >- else >+ length--; >+ } else { > return (ARCHIVE_WARN); >+ } > for (;;) { > e = p; >- while (*e != '\0' && *e != ' ') { >+ while (length > 0 && *e != ' ') { > if (*e < '0' || *e > '9') > return (ARCHIVE_WARN); > e++; >+ length--; > } > start = end; > end = tar_atol10(p, e - p); >@@ -2601,9 +3244,15 @@ solaris_sparse_parse(struct archive_read *a, struct tar *tar, > return (ARCHIVE_FATAL); > tar->sparse_last->hole = hole; > } >- if (*e == '\0') >- return (ARCHIVE_OK); >+ if (length == 0 || *e == '\n') { >+ if (length == 0 && *e == '\n') { >+ return (ARCHIVE_OK); >+ } else { >+ return (ARCHIVE_WARN); >+ } >+ } > p = e + 1; >+ length--; > hole = hole == 0; > } > } >@@ -2770,7 +3419,7 @@ readline(struct archive_read *a, struct tar *tar, const char **start, > tar_flush_unconsumed(a, unconsumed); > > t = __archive_read_ahead(a, 1, &bytes_read); >- if (bytes_read <= 0) >+ if (bytes_read <= 0 || t == NULL) > return (ARCHIVE_FATAL); > s = t; /* Start of line? */ > p = memchr(t, '\n', bytes_read); >@@ -2811,7 +3460,7 @@ readline(struct archive_read *a, struct tar *tar, const char **start, > } > /* Read some more. */ > t = __archive_read_ahead(a, 1, &bytes_read); >- if (bytes_read <= 0) >+ if (bytes_read <= 0 || t == NULL) > return (ARCHIVE_FATAL); > s = t; /* Start of line? */ > p = memchr(t, '\n', bytes_read); >@@ -2855,7 +3504,7 @@ base64_decode(const char *s, size_t len, size_t *out_len) > > /* Allocate enough space to hold the entire output. */ > /* Note that we may not use all of this... */ >- out = (char *)malloc(len - len / 4 + 1); >+ out = malloc(len - len / 4 + 1); > if (out == NULL) { > *out_len = 0; > return (NULL); >@@ -2905,22 +3554,23 @@ base64_decode(const char *s, size_t len, size_t *out_len) > } > > static char * >-url_decode(const char *in) >+url_decode(const char *in, size_t length) > { > char *out, *d; > const char *s; > >- out = (char *)malloc(strlen(in) + 1); >+ out = malloc(length + 1); > if (out == NULL) > return (NULL); >- for (s = in, d = out; *s != '\0'; ) { >- if (s[0] == '%' && s[1] != '\0' && s[2] != '\0') { >+ for (s = in, d = out; length > 0 && *s != '\0'; ) { >+ if (s[0] == '%' && length > 2) { > /* Try to convert % escape */ > int digit1 = tohex(s[1]); > int digit2 = tohex(s[2]); > if (digit1 >= 0 && digit2 >= 0) { > /* Looks good, consume three chars */ > s += 3; >+ length -= 3; > /* Convert output */ > *d++ = ((digit1 << 4) | digit2); > continue; >@@ -2928,6 +3578,7 @@ url_decode(const char *in) > /* Else fall through and treat '%' as normal char */ > } > *d++ = *s++; >+ --length; > } > *d = '\0'; > return (out); >diff --git a/contrib/libarchive/libarchive/archive_read_support_format_xar.c b/contrib/libarchive/libarchive/archive_read_support_format_xar.c >index cefb36410e77..ffffab9638ad 100644 >--- a/contrib/libarchive/libarchive/archive_read_support_format_xar.c >+++ b/contrib/libarchive/libarchive/archive_read_support_format_xar.c >@@ -416,7 +416,7 @@ static void unknowntag_end(struct xar *, const char *); > static int xml_start(struct archive_read *, > const char *, struct xmlattr_list *); > static void xml_end(void *, const char *); >-static void xml_data(void *, const char *, int); >+static void xml_data(void *, const char *, size_t); > static int xml_parse_file_flags(struct xar *, const char *); > static int xml_parse_file_ext2(struct xar *, const char *); > #if defined(HAVE_LIBXML_XMLREADER_H) >@@ -450,7 +450,7 @@ archive_read_support_format_xar(struct archive *_a) > archive_check_magic(_a, ARCHIVE_READ_MAGIC, > ARCHIVE_STATE_NEW, "archive_read_support_format_xar"); > >- xar = (struct xar *)calloc(1, sizeof(*xar)); >+ xar = calloc(1, sizeof(*xar)); > if (xar == NULL) { > archive_set_error(&a->archive, ENOMEM, > "Can't allocate xar data"); >@@ -1242,7 +1242,7 @@ heap_add_entry(struct archive_read *a, > return (ARCHIVE_FATAL); > } > new_pending_files = (struct xar_file **) >- malloc(new_size * sizeof(new_pending_files[0])); >+ calloc(new_size, sizeof(new_pending_files[0])); > if (new_pending_files == NULL) { > archive_set_error(&a->archive, > ENOMEM, "Out of memory"); >@@ -1616,9 +1616,9 @@ decompress(struct archive_read *a, const void **buff, size_t *outbytes, > switch (xar->rd_encoding) { > case GZIP: > xar->stream.next_in = (Bytef *)(uintptr_t)b; >- xar->stream.avail_in = avail_in; >+ xar->stream.avail_in = (uInt)avail_in; > xar->stream.next_out = (unsigned char *)outbuff; >- xar->stream.avail_out = avail_out; >+ xar->stream.avail_out = (uInt)avail_out; > r = inflate(&(xar->stream), 0); > switch (r) { > case Z_OK: /* Decompressor made some progress.*/ >@@ -1635,9 +1635,9 @@ decompress(struct archive_read *a, const void **buff, size_t *outbytes, > #if defined(HAVE_BZLIB_H) && defined(BZ_CONFIG_ERROR) > case BZIP2: > xar->bzstream.next_in = (char *)(uintptr_t)b; >- xar->bzstream.avail_in = avail_in; >+ xar->bzstream.avail_in = (unsigned int)avail_in; > xar->bzstream.next_out = (char *)outbuff; >- xar->bzstream.avail_out = avail_out; >+ xar->bzstream.avail_out = (unsigned int)avail_out; > r = BZ2_bzDecompress(&(xar->bzstream)); > switch (r) { > case BZ_STREAM_END: /* Found end of stream. */ >@@ -2674,7 +2674,7 @@ is_string(const char *known, const char *data, size_t len) > } > > static void >-xml_data(void *userData, const char *s, int len) >+xml_data(void *userData, const char *s, size_t len) > { > struct archive_read *a; > struct xar *xar; >@@ -2707,6 +2707,9 @@ xml_data(void *userData, const char *s, int len) > > switch (xar->xmlsts) { > case FILE_NAME: >+ if (xar->file->has & HAS_PATHNAME) >+ break; >+ > if (xar->file->parent != NULL) { > archive_string_concat(&(xar->file->pathname), > &(xar->file->parent->pathname)); >@@ -3190,8 +3193,11 @@ xml2_read_toc(struct archive_read *a) > if (r == ARCHIVE_OK) > r = xml_start(a, name, &list); > xmlattr_cleanup(&list); >- if (r != ARCHIVE_OK) >+ if (r != ARCHIVE_OK) { >+ xmlFreeTextReader(reader); >+ xmlCleanupParser(); > return (r); >+ } > if (empty) > xml_end(a, name); > break; >@@ -3280,7 +3286,7 @@ expat_data_cb(void *userData, const XML_Char *s, int len) > { > struct expat_userData *ud = (struct expat_userData *)userData; > >- xml_data(ud->archive, s, len); >+ xml_data(ud->archive, s, (size_t)len); > } > > static int >@@ -3316,14 +3322,16 @@ expat_read_toc(struct archive_read *a) > > d = NULL; > r = rd_contents(a, &d, &outbytes, &used, xar->toc_remaining); >- if (r != ARCHIVE_OK) >+ if (r != ARCHIVE_OK) { >+ XML_ParserFree(parser); > return (r); >+ } > xar->toc_remaining -= used; > xar->offset += used; > xar->toc_total += outbytes; > PRINT_TOC(d, outbytes); > >- xr = XML_Parse(parser, d, outbytes, xar->toc_remaining == 0); >+ xr = XML_Parse(parser, d, (int)outbytes, xar->toc_remaining == 0); > __archive_read_consume(a, used); > if (xr == XML_STATUS_ERROR) { > XML_ParserFree(parser); >diff --git a/contrib/libarchive/libarchive/archive_read_support_format_zip.c b/contrib/libarchive/libarchive/archive_read_support_format_zip.c >index c9759eaf9a89..3e62533bf2d9 100644 >--- a/contrib/libarchive/libarchive/archive_read_support_format_zip.c >+++ b/contrib/libarchive/libarchive/archive_read_support_format_zip.c >@@ -1751,8 +1751,7 @@ zipx_xz_init(struct archive_read *a, struct zip *zip) > free(zip->uncompressed_buffer); > > zip->uncompressed_buffer_size = 256 * 1024; >- zip->uncompressed_buffer = >- (uint8_t*) malloc(zip->uncompressed_buffer_size); >+ zip->uncompressed_buffer = malloc(zip->uncompressed_buffer_size); > if (zip->uncompressed_buffer == NULL) { > archive_set_error(&a->archive, ENOMEM, > "No memory for xz decompression"); >@@ -1862,8 +1861,7 @@ zipx_lzma_alone_init(struct archive_read *a, struct zip *zip) > > if(!zip->uncompressed_buffer) { > zip->uncompressed_buffer_size = 256 * 1024; >- zip->uncompressed_buffer = >- (uint8_t*) malloc(zip->uncompressed_buffer_size); >+ zip->uncompressed_buffer = malloc(zip->uncompressed_buffer_size); > > if (zip->uncompressed_buffer == NULL) { > archive_set_error(&a->archive, ENOMEM, >@@ -1924,7 +1922,7 @@ zip_read_data_zipx_xz(struct archive_read *a, const void **buff, > return (ARCHIVE_FATAL); > } > >- in_bytes = zipmin(zip->entry_bytes_remaining, bytes_avail); >+ in_bytes = (ssize_t)zipmin(zip->entry_bytes_remaining, bytes_avail); > zip->zipx_lzma_stream.next_in = compressed_buf; > zip->zipx_lzma_stream.avail_in = in_bytes; > zip->zipx_lzma_stream.total_in = 0; >@@ -1966,14 +1964,14 @@ zip_read_data_zipx_xz(struct archive_read *a, const void **buff, > break; > } > >- to_consume = zip->zipx_lzma_stream.total_in; >+ to_consume = (ssize_t)zip->zipx_lzma_stream.total_in; > > __archive_read_consume(a, to_consume); > zip->entry_bytes_remaining -= to_consume; > zip->entry_compressed_bytes_read += to_consume; > zip->entry_uncompressed_bytes_read += zip->zipx_lzma_stream.total_out; > >- *size = zip->zipx_lzma_stream.total_out; >+ *size = (size_t)zip->zipx_lzma_stream.total_out; > *buff = zip->uncompressed_buffer; > > return (ARCHIVE_OK); >@@ -2014,7 +2012,7 @@ zip_read_data_zipx_lzma_alone(struct archive_read *a, const void **buff, > } > > /* Set decompressor parameters. */ >- in_bytes = zipmin(zip->entry_bytes_remaining, bytes_avail); >+ in_bytes = (ssize_t)zipmin(zip->entry_bytes_remaining, bytes_avail); > > zip->zipx_lzma_stream.next_in = compressed_buf; > zip->zipx_lzma_stream.avail_in = in_bytes; >@@ -2024,7 +2022,7 @@ zip_read_data_zipx_lzma_alone(struct archive_read *a, const void **buff, > /* These lzma_alone streams lack end of stream marker, so let's > * make sure the unpacker won't try to unpack more than it's > * supposed to. */ >- zipmin((int64_t) zip->uncompressed_buffer_size, >+ (size_t)zipmin((int64_t) zip->uncompressed_buffer_size, > zip->entry->uncompressed_size - > zip->entry_uncompressed_bytes_read); > zip->zipx_lzma_stream.total_out = 0; >@@ -2061,7 +2059,7 @@ zip_read_data_zipx_lzma_alone(struct archive_read *a, const void **buff, > return (ARCHIVE_FATAL); > } > >- to_consume = zip->zipx_lzma_stream.total_in; >+ to_consume = (ssize_t)zip->zipx_lzma_stream.total_in; > > /* Update pointers. */ > __archive_read_consume(a, to_consume); >@@ -2082,7 +2080,7 @@ zip_read_data_zipx_lzma_alone(struct archive_read *a, const void **buff, > } > > /* Return values. */ >- *size = zip->zipx_lzma_stream.total_out; >+ *size = (size_t)zip->zipx_lzma_stream.total_out; > *buff = zip->uncompressed_buffer; > > /* If we're here, then we're good! */ >@@ -2167,8 +2165,7 @@ zipx_ppmd8_init(struct archive_read *a, struct zip *zip) > free(zip->uncompressed_buffer); > > zip->uncompressed_buffer_size = 256 * 1024; >- zip->uncompressed_buffer = >- (uint8_t*) malloc(zip->uncompressed_buffer_size); >+ zip->uncompressed_buffer = malloc(zip->uncompressed_buffer_size); > > if(zip->uncompressed_buffer == NULL) { > archive_set_error(&a->archive, ENOMEM, >@@ -2291,8 +2288,7 @@ zipx_bzip2_init(struct archive_read *a, struct zip *zip) > free(zip->uncompressed_buffer); > > zip->uncompressed_buffer_size = 256 * 1024; >- zip->uncompressed_buffer = >- (uint8_t*) malloc(zip->uncompressed_buffer_size); >+ zip->uncompressed_buffer = malloc(zip->uncompressed_buffer_size); > if (zip->uncompressed_buffer == NULL) { > archive_set_error(&a->archive, ENOMEM, > "No memory for bzip2 decompression"); >@@ -2331,7 +2327,7 @@ zip_read_data_zipx_bzip2(struct archive_read *a, const void **buff, > return (ARCHIVE_FATAL); > } > >- in_bytes = zipmin(zip->entry_bytes_remaining, bytes_avail); >+ in_bytes = (ssize_t)zipmin(zip->entry_bytes_remaining, bytes_avail); > if(in_bytes < 1) { > /* libbz2 doesn't complain when caller feeds avail_in == 0. > * It will actually return success in this case, which is >@@ -2394,7 +2390,7 @@ zip_read_data_zipx_bzip2(struct archive_read *a, const void **buff, > zip->entry_uncompressed_bytes_read += total_out; > > /* Give libarchive its due. */ >- *size = total_out; >+ *size = (size_t)total_out; > *buff = zip->uncompressed_buffer; > > return ARCHIVE_OK; >@@ -2434,8 +2430,7 @@ zipx_zstd_init(struct archive_read *a, struct zip *zip) > free(zip->uncompressed_buffer); > > zip->uncompressed_buffer_size = ZSTD_DStreamOutSize(); >- zip->uncompressed_buffer = >- (uint8_t*) malloc(zip->uncompressed_buffer_size); >+ zip->uncompressed_buffer = malloc(zip->uncompressed_buffer_size); > if (zip->uncompressed_buffer == NULL) { > archive_set_error(&a->archive, ENOMEM, > "No memory for Zstd decompression"); >@@ -2478,7 +2473,7 @@ zip_read_data_zipx_zstd(struct archive_read *a, const void **buff, > return (ARCHIVE_FATAL); > } > >- in_bytes = zipmin(zip->entry_bytes_remaining, bytes_avail); >+ in_bytes = (ssize_t)zipmin(zip->entry_bytes_remaining, bytes_avail); > if(in_bytes < 1) { > /* zstd doesn't complain when caller feeds avail_in == 0. > * It will actually return success in this case, which is >@@ -2524,7 +2519,7 @@ zip_read_data_zipx_zstd(struct archive_read *a, const void **buff, > zip->entry_uncompressed_bytes_read += total_out; > > /* Give libarchive its due. */ >- *size = total_out; >+ *size = (size_t)total_out; > *buff = zip->uncompressed_buffer; > > return ARCHIVE_OK; >@@ -2574,7 +2569,7 @@ zip_read_data_deflate(struct archive_read *a, const void **buff, > if (zip->uncompressed_buffer == NULL) { > zip->uncompressed_buffer_size = 256 * 1024; > zip->uncompressed_buffer >- = (unsigned char *)malloc(zip->uncompressed_buffer_size); >+ = malloc(zip->uncompressed_buffer_size); > if (zip->uncompressed_buffer == NULL) { > archive_set_error(&a->archive, ENOMEM, > "No memory for ZIP decompression"); >@@ -3600,7 +3595,7 @@ archive_read_support_format_zip_streamable(struct archive *_a) > archive_check_magic(_a, ARCHIVE_READ_MAGIC, > ARCHIVE_STATE_NEW, "archive_read_support_format_zip"); > >- zip = (struct zip *)calloc(1, sizeof(*zip)); >+ zip = calloc(1, sizeof(*zip)); > if (zip == NULL) { > archive_set_error(&a->archive, ENOMEM, > "Can't allocate zip data"); >@@ -3680,7 +3675,7 @@ read_eocd(struct zip *zip, const char *p, int64_t current_offset) > if (archive_le16dec(p + 10) != archive_le16dec(p + 8)) > return 0; > /* Central directory can't extend beyond start of EOCD record. */ >- if (cd_offset + cd_size > current_offset) >+ if ((int64_t)cd_offset + cd_size > current_offset) > return 0; > > /* Save the central directory location for later use. */ >@@ -4392,7 +4387,7 @@ archive_read_support_format_zip_seekable(struct archive *_a) > archive_check_magic(_a, ARCHIVE_READ_MAGIC, > ARCHIVE_STATE_NEW, "archive_read_support_format_zip_seekable"); > >- zip = (struct zip *)calloc(1, sizeof(*zip)); >+ zip = calloc(1, sizeof(*zip)); > if (zip == NULL) { > archive_set_error(&a->archive, ENOMEM, > "Can't allocate zip data"); >diff --git a/contrib/libarchive/libarchive/archive_string.c b/contrib/libarchive/libarchive/archive_string.c >index be6c39600d72..abf7ad669351 100644 >--- a/contrib/libarchive/libarchive/archive_string.c >+++ b/contrib/libarchive/libarchive/archive_string.c >@@ -313,7 +313,7 @@ archive_string_ensure(struct archive_string *as, size_t s) > if (new_length < s) > new_length = s; > /* Now we can reallocate the buffer. */ >- p = (char *)realloc(as->s, new_length); >+ p = realloc(as->s, new_length); > if (p == NULL) { > /* On failure, wipe the string and return NULL. */ > archive_string_free(as); >@@ -3874,6 +3874,30 @@ archive_mstring_get_utf8(struct archive *a, struct archive_mstring *aes, > } > > *p = NULL; >+#if defined(_WIN32) && !defined(__CYGWIN__) >+ /* >+ * On Windows, first try converting from WCS because (1) there's no >+ * guarantee that the conversion to MBS will succeed, e.g. when using >+ * CP_ACP, and (2) that's more efficient than converting to MBS, just to >+ * convert back to WCS again before finally converting to UTF-8 >+ */ >+ if ((aes->aes_set & AES_SET_WCS) != 0) { >+ sc = archive_string_conversion_to_charset(a, "UTF-8", 1); >+ if (sc == NULL) >+ return (-1);/* Couldn't allocate memory for sc. */ >+ archive_string_empty(&(aes->aes_utf8)); >+ r = archive_string_append_from_wcs_in_codepage(&(aes->aes_utf8), >+ aes->aes_wcs.s, aes->aes_wcs.length, sc); >+ if (a == NULL) >+ free_sconv_object(sc); >+ if (r == 0) { >+ aes->aes_set |= AES_SET_UTF8; >+ *p = aes->aes_utf8.s; >+ return (0);/* success. */ >+ } else >+ return (-1);/* failure. */ >+ } >+#endif > /* Try converting WCS to MBS first if MBS does not exist yet. */ > if ((aes->aes_set & AES_SET_MBS) == 0) { > const char *pm; /* unused */ >@@ -3958,6 +3982,32 @@ archive_mstring_get_wcs(struct archive *a, struct archive_mstring *aes, > } > > *wp = NULL; >+#if defined(_WIN32) && !defined(__CYGWIN__) >+ /* >+ * On Windows, prefer converting from UTF-8 directly to WCS because: >+ * (1) there's no guarantee that the string can be represented in MBS (e.g. >+ * with CP_ACP), and (2) in order to convert from UTF-8 to MBS, we're going >+ * to need to convert from UTF-8 to WCS anyway and its wasteful to throw >+ * away that intermediate result >+ */ >+ if (aes->aes_set & AES_SET_UTF8) { >+ struct archive_string_conv *sc; >+ >+ sc = archive_string_conversion_from_charset(a, "UTF-8", 1); >+ if (sc != NULL) { >+ archive_wstring_empty((&aes->aes_wcs)); >+ r = archive_wstring_append_from_mbs_in_codepage(&(aes->aes_wcs), >+ aes->aes_utf8.s, aes->aes_utf8.length, sc); >+ if (a == NULL) >+ free_sconv_object(sc); >+ if (r == 0) { >+ aes->aes_set |= AES_SET_WCS; >+ *wp = aes->aes_wcs.s; >+ return (0); >+ } >+ } >+ } >+#endif > /* Try converting UTF8 to MBS first if MBS does not exist yet. */ > if ((aes->aes_set & AES_SET_MBS) == 0) { > const char *p; /* unused */ >@@ -4211,21 +4261,31 @@ archive_mstring_update_utf8(struct archive *a, struct archive_mstring *aes, > > aes->aes_set = AES_SET_UTF8; /* Only UTF8 is set now. */ > >- /* Try converting UTF-8 to MBS, return false on failure. */ > sc = archive_string_conversion_from_charset(a, "UTF-8", 1); > if (sc == NULL) > return (-1);/* Couldn't allocate memory for sc. */ >- r = archive_strcpy_l(&(aes->aes_mbs), utf8, sc); > > #if defined(_WIN32) && !defined(__CYGWIN__) >- /* On failure, make an effort to convert UTF8 to WCS as the active code page >- * may not be able to represent all characters in the string */ >- if (r != 0) { >- if (archive_wstring_append_from_mbs_in_codepage(&(aes->aes_wcs), >- aes->aes_utf8.s, aes->aes_utf8.length, sc) == 0) >- aes->aes_set = AES_SET_UTF8 | AES_SET_WCS; >- } >-#endif >+ /* On Windows, there's no good way to convert from UTF8 -> MBS directly, so >+ * prefer to first convert to WCS as (1) it's wasteful to throw away the >+ * intermediate result, and (2) WCS will still be set even if we fail to >+ * convert to MBS (e.g. with ACP that can't represent the characters) */ >+ r = archive_wstring_append_from_mbs_in_codepage(&(aes->aes_wcs), >+ aes->aes_utf8.s, aes->aes_utf8.length, sc); >+ >+ if (a == NULL) >+ free_sconv_object(sc); >+ if (r != 0) >+ return (-1); /* This will guarantee we can't convert to MBS */ >+ aes->aes_set = AES_SET_UTF8 | AES_SET_WCS; /* Both UTF8 and WCS set. */ >+ >+ /* Try converting WCS to MBS, return false on failure. */ >+ if (archive_string_append_from_wcs(&(aes->aes_mbs), aes->aes_wcs.s, >+ aes->aes_wcs.length)) >+ return (-1); >+#else >+ /* Try converting UTF-8 to MBS, return false on failure. */ >+ r = archive_strcpy_l(&(aes->aes_mbs), utf8, sc); > > if (a == NULL) > free_sconv_object(sc); >@@ -4237,8 +4297,10 @@ archive_mstring_update_utf8(struct archive *a, struct archive_mstring *aes, > if (archive_wstring_append_from_mbs(&(aes->aes_wcs), aes->aes_mbs.s, > aes->aes_mbs.length)) > return (-1); >- aes->aes_set = AES_SET_UTF8 | AES_SET_WCS | AES_SET_MBS; >+#endif > > /* All conversions succeeded. */ >+ aes->aes_set = AES_SET_UTF8 | AES_SET_WCS | AES_SET_MBS; >+ > return (0); > } >diff --git a/contrib/libarchive/libarchive/archive_util.c b/contrib/libarchive/libarchive/archive_util.c >index 7b918fef04b8..3a8caad5262b 100644 >--- a/contrib/libarchive/libarchive/archive_util.c >+++ b/contrib/libarchive/libarchive/archive_util.c >@@ -280,7 +280,8 @@ __archive_mktempx(const char *tmpdir, wchar_t *template) > if (archive_wstring_append_from_mbs(&temp_name, tmpdir, > strlen(tmpdir)) < 0) > goto exit_tmpfile; >- if (temp_name.s[temp_name.length-1] != L'/') >+ if (temp_name.length == 0 || >+ temp_name.s[temp_name.length-1] != L'/') > archive_wstrappend_wchar(&temp_name, L'/'); > } > >@@ -454,7 +455,7 @@ get_tempdir(struct archive_string *temppath) > tmp = "/tmp"; > #endif > archive_strcpy(temppath, tmp); >- if (temppath->s[temppath->length-1] != '/') >+ if (temppath->length == 0 || temppath->s[temppath->length-1] != '/') > archive_strappend_char(temppath, '/'); > return (ARCHIVE_OK); > } >@@ -477,7 +478,8 @@ __archive_mktemp(const char *tmpdir) > goto exit_tmpfile; > } else { > archive_strcpy(&temp_name, tmpdir); >- if (temp_name.s[temp_name.length-1] != '/') >+ if (temp_name.length == 0 || >+ temp_name.s[temp_name.length-1] != '/') > archive_strappend_char(&temp_name, '/'); > } > #ifdef O_TMPFILE >@@ -538,7 +540,7 @@ __archive_mktempx(const char *tmpdir, char *template) > goto exit_tmpfile; > } else > archive_strcpy(&temp_name, tmpdir); >- if (temp_name.s[temp_name.length-1] == '/') { >+ if (temp_name.length > 0 && temp_name.s[temp_name.length-1] == '/') { > temp_name.s[temp_name.length-1] = '\0'; > temp_name.length --; > } >@@ -649,8 +651,7 @@ archive_utility_string_sort_helper(char **strings, unsigned int n) > if (strcmp(strings[i], pivot) < 0) > { > lesser_count++; >- tmp = (char **)realloc(lesser, >- lesser_count * sizeof(char *)); >+ tmp = realloc(lesser, lesser_count * sizeof(*tmp)); > if (!tmp) { > free(greater); > free(lesser); >@@ -662,8 +663,7 @@ archive_utility_string_sort_helper(char **strings, unsigned int n) > else > { > greater_count++; >- tmp = (char **)realloc(greater, >- greater_count * sizeof(char *)); >+ tmp = realloc(greater, greater_count * sizeof(*tmp)); > if (!tmp) { > free(greater); > free(lesser); >diff --git a/contrib/libarchive/libarchive/archive_write.c b/contrib/libarchive/libarchive/archive_write.c >index b70bc785c738..303c686881a9 100644 >--- a/contrib/libarchive/libarchive/archive_write.c >+++ b/contrib/libarchive/libarchive/archive_write.c >@@ -98,7 +98,7 @@ archive_write_new(void) > struct archive_write *a; > unsigned char *nulls; > >- a = (struct archive_write *)calloc(1, sizeof(*a)); >+ a = calloc(1, sizeof(*a)); > if (a == NULL) > return (NULL); > a->archive.magic = ARCHIVE_WRITE_MAGIC; >@@ -114,7 +114,7 @@ archive_write_new(void) > > /* Initialize a block of nulls for padding purposes. */ > a->null_length = 1024; >- nulls = (unsigned char *)calloc(a->null_length, sizeof(unsigned char)); >+ nulls = calloc(a->null_length, sizeof(unsigned char)); > if (nulls == NULL) { > free(a); > return (NULL); >@@ -132,12 +132,17 @@ archive_write_set_bytes_per_block(struct archive *_a, int bytes_per_block) > struct archive_write *a = (struct archive_write *)_a; > archive_check_magic(&a->archive, ARCHIVE_WRITE_MAGIC, > ARCHIVE_STATE_NEW, "archive_write_set_bytes_per_block"); >+ >+ if (bytes_per_block < 0) { >+ // Do nothing if the bytes_per_block is negative >+ return 0; >+ } > a->bytes_per_block = bytes_per_block; > return (ARCHIVE_OK); > } > > /* >- * Get the current block size. -1 if it has never been set. >+ * Get the current block size. > */ > int > archive_write_get_bytes_per_block(struct archive *_a) >@@ -145,6 +150,10 @@ archive_write_get_bytes_per_block(struct archive *_a) > struct archive_write *a = (struct archive_write *)_a; > archive_check_magic(&a->archive, ARCHIVE_WRITE_MAGIC, > ARCHIVE_STATE_ANY, "archive_write_get_bytes_per_block"); >+ if (a->bytes_per_block < 0) { >+ // Don't return a negative value >+ return 1; >+ } > return (a->bytes_per_block); > } > >@@ -358,8 +367,8 @@ archive_write_client_open(struct archive_write_filter *f) > archive_write_get_bytes_in_last_block(f->archive); > buffer_size = f->bytes_per_block; > >- state = (struct archive_none *)calloc(1, sizeof(*state)); >- buffer = (char *)malloc(buffer_size); >+ state = calloc(1, sizeof(*state)); >+ buffer = malloc(buffer_size); > if (state == NULL || buffer == NULL) { > free(state); > free(buffer); >diff --git a/contrib/libarchive/libarchive/archive_write_add_filter_b64encode.c b/contrib/libarchive/libarchive/archive_write_add_filter_b64encode.c >index 084d195402bc..2c361bfb974e 100644 >--- a/contrib/libarchive/libarchive/archive_write_add_filter_b64encode.c >+++ b/contrib/libarchive/libarchive/archive_write_add_filter_b64encode.c >@@ -83,9 +83,9 @@ archive_write_add_filter_b64encode(struct archive *_a) > struct private_b64encode *state; > > archive_check_magic(&a->archive, ARCHIVE_WRITE_MAGIC, >- ARCHIVE_STATE_NEW, "archive_write_add_filter_uu"); >+ ARCHIVE_STATE_NEW, "archive_write_add_filter_b64encode"); > >- state = (struct private_b64encode *)calloc(1, sizeof(*state)); >+ state = calloc(1, sizeof(*state)); > if (state == NULL) { > archive_set_error(f->archive, ENOMEM, > "Can't allocate data for b64encode filter"); >@@ -149,7 +149,7 @@ archive_filter_b64encode_open(struct archive_write_filter *f) > size_t bs = 65536, bpb; > > if (f->archive->magic == ARCHIVE_WRITE_MAGIC) { >- /* Buffer size should be a multiple number of the of bytes >+ /* Buffer size should be a multiple number of the bytes > * per block for performance. */ > bpb = archive_write_get_bytes_per_block(f->archive); > if (bpb > bs) >diff --git a/contrib/libarchive/libarchive/archive_write_add_filter_bzip2.c b/contrib/libarchive/libarchive/archive_write_add_filter_bzip2.c >index 561e11b5d70a..0726f08936ec 100644 >--- a/contrib/libarchive/libarchive/archive_write_add_filter_bzip2.c >+++ b/contrib/libarchive/libarchive/archive_write_add_filter_bzip2.c >@@ -168,7 +168,7 @@ archive_compressor_bzip2_open(struct archive_write_filter *f) > if (data->compressed == NULL) { > size_t bs = 65536, bpb; > if (f->archive->magic == ARCHIVE_WRITE_MAGIC) { >- /* Buffer size should be a multiple number of the of bytes >+ /* Buffer size should be a multiple number of the bytes > * per block for performance. */ > bpb = archive_write_get_bytes_per_block(f->archive); > if (bpb > bs) >@@ -177,8 +177,7 @@ archive_compressor_bzip2_open(struct archive_write_filter *f) > bs -= bs % bpb; > } > data->compressed_buffer_size = bs; >- data->compressed >- = (char *)malloc(data->compressed_buffer_size); >+ data->compressed = malloc(data->compressed_buffer_size); > if (data->compressed == NULL) { > archive_set_error(f->archive, ENOMEM, > "Can't allocate data for compression buffer"); >diff --git a/contrib/libarchive/libarchive/archive_write_add_filter_compress.c b/contrib/libarchive/libarchive/archive_write_add_filter_compress.c >index 78afebda3e35..a54a85754293 100644 >--- a/contrib/libarchive/libarchive/archive_write_add_filter_compress.c >+++ b/contrib/libarchive/libarchive/archive_write_add_filter_compress.c >@@ -150,7 +150,7 @@ archive_compressor_compress_open(struct archive_write_filter *f) > f->code = ARCHIVE_FILTER_COMPRESS; > f->name = "compress"; > >- state = (struct private_data *)calloc(1, sizeof(*state)); >+ state = calloc(1, sizeof(*state)); > if (state == NULL) { > archive_set_error(f->archive, ENOMEM, > "Can't allocate data for compression"); >@@ -158,7 +158,7 @@ archive_compressor_compress_open(struct archive_write_filter *f) > } > > if (f->archive->magic == ARCHIVE_WRITE_MAGIC) { >- /* Buffer size should be a multiple number of the of bytes >+ /* Buffer size should be a multiple number of the bytes > * per block for performance. */ > bpb = archive_write_get_bytes_per_block(f->archive); > if (bpb > bs) >diff --git a/contrib/libarchive/libarchive/archive_write_add_filter_gzip.c b/contrib/libarchive/libarchive/archive_write_add_filter_gzip.c >index a7fabbfa6bd5..71d7891261a5 100644 >--- a/contrib/libarchive/libarchive/archive_write_add_filter_gzip.c >+++ b/contrib/libarchive/libarchive/archive_write_add_filter_gzip.c >@@ -194,8 +194,7 @@ archive_compressor_gzip_open(struct archive_write_filter *f) > bs -= bs % bpb; > } > data->compressed_buffer_size = bs; >- data->compressed >- = (unsigned char *)malloc(data->compressed_buffer_size); >+ data->compressed = malloc(data->compressed_buffer_size); > if (data->compressed == NULL) { > archive_set_error(f->archive, ENOMEM, > "Can't allocate data for compression buffer"); >diff --git a/contrib/libarchive/libarchive/archive_write_add_filter_uuencode.c b/contrib/libarchive/libarchive/archive_write_add_filter_uuencode.c >index 42dec8def1f1..50bfeb6eaa60 100644 >--- a/contrib/libarchive/libarchive/archive_write_add_filter_uuencode.c >+++ b/contrib/libarchive/libarchive/archive_write_add_filter_uuencode.c >@@ -74,7 +74,7 @@ archive_write_add_filter_uuencode(struct archive *_a) > archive_check_magic(&a->archive, ARCHIVE_WRITE_MAGIC, > ARCHIVE_STATE_NEW, "archive_write_add_filter_uu"); > >- state = (struct private_uuencode *)calloc(1, sizeof(*state)); >+ state = calloc(1, sizeof(*state)); > if (state == NULL) { > archive_set_error(f->archive, ENOMEM, > "Can't allocate data for uuencode filter"); >diff --git a/contrib/libarchive/libarchive/archive_write_add_filter_xz.c b/contrib/libarchive/libarchive/archive_write_add_filter_xz.c >index 18da08274d92..098f0c95570b 100644 >--- a/contrib/libarchive/libarchive/archive_write_add_filter_xz.c >+++ b/contrib/libarchive/libarchive/archive_write_add_filter_xz.c >@@ -310,7 +310,7 @@ archive_compressor_xz_open(struct archive_write_filter *f) > if (data->compressed == NULL) { > size_t bs = 65536, bpb; > if (f->archive->magic == ARCHIVE_WRITE_MAGIC) { >- /* Buffer size should be a multiple number of the of bytes >+ /* Buffer size should be a multiple number of the bytes > * per block for performance. */ > bpb = archive_write_get_bytes_per_block(f->archive); > if (bpb > bs) >@@ -319,8 +319,7 @@ archive_compressor_xz_open(struct archive_write_filter *f) > bs -= bs % bpb; > } > data->compressed_buffer_size = bs; >- data->compressed >- = (unsigned char *)malloc(data->compressed_buffer_size); >+ data->compressed = malloc(data->compressed_buffer_size); > if (data->compressed == NULL) { > archive_set_error(f->archive, ENOMEM, > "Can't allocate data for compression buffer"); >diff --git a/contrib/libarchive/libarchive/archive_write_add_filter_zstd.c b/contrib/libarchive/libarchive/archive_write_add_filter_zstd.c >index 7ea3d18c9b76..c0a6e5a37a66 100644 >--- a/contrib/libarchive/libarchive/archive_write_add_filter_zstd.c >+++ b/contrib/libarchive/libarchive/archive_write_add_filter_zstd.c >@@ -372,8 +372,7 @@ archive_compressor_zstd_open(struct archive_write_filter *f) > } > data->out.size = bs; > data->out.pos = 0; >- data->out.dst >- = (unsigned char *)malloc(data->out.size); >+ data->out.dst = malloc(data->out.size); > if (data->out.dst == NULL) { > archive_set_error(f->archive, ENOMEM, > "Can't allocate data for compression buffer"); >diff --git a/contrib/libarchive/libarchive/archive_write_disk_posix.c b/contrib/libarchive/libarchive/archive_write_disk_posix.c >index d69c77ea0517..f69b802ffa62 100644 >--- a/contrib/libarchive/libarchive/archive_write_disk_posix.c >+++ b/contrib/libarchive/libarchive/archive_write_disk_posix.c >@@ -1991,7 +1991,7 @@ archive_write_disk_new(void) > { > struct archive_write_disk *a; > >- a = (struct archive_write_disk *)calloc(1, sizeof(*a)); >+ a = calloc(1, sizeof(*a)); > if (a == NULL) > return (NULL); > a->archive.magic = ARCHIVE_WRITE_DISK_MAGIC; >@@ -2758,7 +2758,7 @@ new_fixup(struct archive_write_disk *a, const char *pathname) > { > struct fixup_entry *fe; > >- fe = (struct fixup_entry *)calloc(1, sizeof(struct fixup_entry)); >+ fe = calloc(1, sizeof(struct fixup_entry)); > if (fe == NULL) { > archive_set_error(&a->archive, ENOMEM, > "Can't allocate memory for a fixup"); >@@ -4196,7 +4196,7 @@ copy_xattrs(struct archive_write_disk *a, int tmpfd, int dffd) > } > for (xattr_i = 0; xattr_i < xattr_size; > xattr_i += strlen(xattr_names + xattr_i) + 1) { >- char *xattr_val_saved; >+ char *p; > ssize_t s; > int f; > >@@ -4207,15 +4207,14 @@ copy_xattrs(struct archive_write_disk *a, int tmpfd, int dffd) > ret = ARCHIVE_WARN; > goto exit_xattr; > } >- xattr_val_saved = xattr_val; >- xattr_val = realloc(xattr_val, s); >- if (xattr_val == NULL) { >+ p = realloc(xattr_val, s); >+ if (p == NULL) { > archive_set_error(&a->archive, ENOMEM, > "Failed to get metadata(xattr)"); > ret = ARCHIVE_WARN; >- free(xattr_val_saved); > goto exit_xattr; > } >+ xattr_val = p; > s = fgetxattr(tmpfd, xattr_names + xattr_i, xattr_val, s, 0, 0); > if (s == -1) { > archive_set_error(&a->archive, errno, >@@ -4361,8 +4360,7 @@ set_mac_metadata(struct archive_write_disk *a, const char *pathname, > * silly dance of writing the data to disk just so that > * copyfile() can read it back in again. */ > archive_string_init(&tmp); >- archive_strcpy(&tmp, pathname); >- archive_strcat(&tmp, ".XXXXXX"); >+ archive_strcpy(&tmp, "tar.mmd.XXXXXX"); > fd = mkstemp(tmp.s); > > if (fd < 0) { >diff --git a/contrib/libarchive/libarchive/archive_write_open_fd.c b/contrib/libarchive/libarchive/archive_write_open_fd.c >index a58ae047967b..8a3f68d0699d 100644 >--- a/contrib/libarchive/libarchive/archive_write_open_fd.c >+++ b/contrib/libarchive/libarchive/archive_write_open_fd.c >@@ -62,7 +62,7 @@ archive_write_open_fd(struct archive *a, int fd) > { > struct write_fd_data *mine; > >- mine = (struct write_fd_data *)malloc(sizeof(*mine)); >+ mine = malloc(sizeof(*mine)); > if (mine == NULL) { > archive_set_error(a, ENOMEM, "No memory"); > return (ARCHIVE_FATAL); >diff --git a/contrib/libarchive/libarchive/archive_write_open_file.c b/contrib/libarchive/libarchive/archive_write_open_file.c >index d787da3af388..4c6ebfb2269d 100644 >--- a/contrib/libarchive/libarchive/archive_write_open_file.c >+++ b/contrib/libarchive/libarchive/archive_write_open_file.c >@@ -59,7 +59,7 @@ archive_write_open_FILE(struct archive *a, FILE *f) > { > struct write_FILE_data *mine; > >- mine = (struct write_FILE_data *)malloc(sizeof(*mine)); >+ mine = malloc(sizeof(*mine)); > if (mine == NULL) { > archive_set_error(a, ENOMEM, "No memory"); > return (ARCHIVE_FATAL); >diff --git a/contrib/libarchive/libarchive/archive_write_open_filename.c b/contrib/libarchive/libarchive/archive_write_open_filename.c >index 7dc73d55f43e..6842b98d2f07 100644 >--- a/contrib/libarchive/libarchive/archive_write_open_filename.c >+++ b/contrib/libarchive/libarchive/archive_write_open_filename.c >@@ -98,7 +98,7 @@ open_filename(struct archive *a, int mbs_fn, const void *filename) > struct write_file_data *mine; > int r; > >- mine = (struct write_file_data *)calloc(1, sizeof(*mine)); >+ mine = calloc(1, sizeof(*mine)); > if (mine == NULL) { > archive_set_error(a, ENOMEM, "No memory"); > return (ARCHIVE_FATAL); >diff --git a/contrib/libarchive/libarchive/archive_write_open_memory.c b/contrib/libarchive/libarchive/archive_write_open_memory.c >index 609cc47d964a..e31650447279 100644 >--- a/contrib/libarchive/libarchive/archive_write_open_memory.c >+++ b/contrib/libarchive/libarchive/archive_write_open_memory.c >@@ -52,7 +52,7 @@ archive_write_open_memory(struct archive *a, void *buff, size_t buffSize, size_t > { > struct write_memory_data *mine; > >- mine = (struct write_memory_data *)calloc(1, sizeof(*mine)); >+ mine = calloc(1, sizeof(*mine)); > if (mine == NULL) { > archive_set_error(a, ENOMEM, "No memory"); > return (ARCHIVE_FATAL); >diff --git a/contrib/libarchive/libarchive/archive_write_set_format_7zip.c b/contrib/libarchive/libarchive/archive_write_set_format_7zip.c >index f7d8890ba3bf..8b6f6215ec30 100644 >--- a/contrib/libarchive/libarchive/archive_write_set_format_7zip.c >+++ b/contrib/libarchive/libarchive/archive_write_set_format_7zip.c >@@ -521,7 +521,7 @@ _7z_write_header(struct archive_write *a, struct archive_entry *entry) > */ > if (archive_entry_filetype(entry) == AE_IFLNK) { > ssize_t bytes; >- const void *p = (const void *)archive_entry_symlink(entry); >+ const void *p = (const void *)archive_entry_symlink_utf8(entry); > bytes = compress_out(a, p, (size_t)file->size, ARCHIVE_Z_RUN); > if (bytes < 0) > return ((int)bytes); >@@ -1563,8 +1563,18 @@ file_new(struct archive_write *a, struct archive_entry *entry, > archive_entry_set_size(entry, 0); > if (archive_entry_filetype(entry) == AE_IFDIR) > file->dir = 1; >- else if (archive_entry_filetype(entry) == AE_IFLNK) >- file->size = strlen(archive_entry_symlink(entry)); >+ else if (archive_entry_filetype(entry) == AE_IFLNK) { >+ const char* linkpath; >+ linkpath = archive_entry_symlink_utf8(entry); >+ if (linkpath == NULL) { >+ free(file); >+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, >+ "symlink path could not be converted to UTF-8"); >+ return (ARCHIVE_FAILED); >+ } >+ else >+ file->size = strlen(linkpath); >+ } > if (archive_entry_mtime_is_set(entry)) { > file->flg |= MTIME_IS_SET; > file->times[MTIME].time = archive_entry_mtime(entry); >diff --git a/contrib/libarchive/libarchive/archive_write_set_format_ar.c b/contrib/libarchive/libarchive/archive_write_set_format_ar.c >index 38689d89be0e..e5e9c806b639 100644 >--- a/contrib/libarchive/libarchive/archive_write_set_format_ar.c >+++ b/contrib/libarchive/libarchive/archive_write_set_format_ar.c >@@ -126,7 +126,7 @@ archive_write_set_format_ar(struct archive_write *a) > if (a->format_free != NULL) > (a->format_free)(a); > >- ar = (struct ar_w *)calloc(1, sizeof(*ar)); >+ ar = calloc(1, sizeof(*ar)); > if (ar == NULL) { > archive_set_error(&a->archive, ENOMEM, "Can't allocate ar data"); > return (ARCHIVE_FATAL); >@@ -246,7 +246,7 @@ archive_write_ar_header(struct archive_write *a, struct archive_entry *entry) > return (ARCHIVE_WARN); > } > >- se = (char *)malloc(strlen(filename) + 3); >+ se = malloc(strlen(filename) + 3); > if (se == NULL) { > archive_set_error(&a->archive, ENOMEM, > "Can't allocate filename buffer"); >@@ -379,7 +379,7 @@ archive_write_ar_data(struct archive_write *a, const void *buff, size_t s) > return (ARCHIVE_WARN); > } > >- ar->strtab = (char *)malloc(s + 1); >+ ar->strtab = malloc(s + 1); > if (ar->strtab == NULL) { > archive_set_error(&a->archive, ENOMEM, > "Can't allocate strtab buffer"); >diff --git a/contrib/libarchive/libarchive/archive_write_set_format_cpio_binary.c b/contrib/libarchive/libarchive/archive_write_set_format_cpio_binary.c >index 7a010ee00f22..aefb2ca6f514 100644 >--- a/contrib/libarchive/libarchive/archive_write_set_format_cpio_binary.c >+++ b/contrib/libarchive/libarchive/archive_write_set_format_cpio_binary.c >@@ -185,7 +185,7 @@ archive_write_set_format_cpio_binary(struct archive *_a, int format) > if (a->format_free != NULL) > (a->format_free)(a); > >- cpio = (struct cpio *)calloc(1, sizeof(*cpio)); >+ cpio = calloc(1, sizeof(*cpio)); > if (cpio == NULL) { > archive_set_error(&a->archive, ENOMEM, "Can't allocate cpio data"); > return (ARCHIVE_FATAL); >@@ -577,6 +577,9 @@ archive_write_binary_close(struct archive_write *a) > struct archive_entry *trailer; > > trailer = archive_entry_new2(NULL); >+ if (trailer == NULL) { >+ return ARCHIVE_FATAL; >+ } > /* nlink = 1 here for GNU cpio compat. */ > archive_entry_set_nlink(trailer, 1); > archive_entry_set_size(trailer, 0); >diff --git a/contrib/libarchive/libarchive/archive_write_set_format_cpio_newc.c b/contrib/libarchive/libarchive/archive_write_set_format_cpio_newc.c >index 006736a1fa22..254d5a9901c3 100644 >--- a/contrib/libarchive/libarchive/archive_write_set_format_cpio_newc.c >+++ b/contrib/libarchive/libarchive/archive_write_set_format_cpio_newc.c >@@ -116,7 +116,7 @@ archive_write_set_format_cpio_newc(struct archive *_a) > if (a->format_free != NULL) > (a->format_free)(a); > >- cpio = (struct cpio *)calloc(1, sizeof(*cpio)); >+ cpio = calloc(1, sizeof(*cpio)); > if (cpio == NULL) { > archive_set_error(&a->archive, ENOMEM, "Can't allocate cpio data"); > return (ARCHIVE_FATAL); >diff --git a/contrib/libarchive/libarchive/archive_write_set_format_cpio_odc.c b/contrib/libarchive/libarchive/archive_write_set_format_cpio_odc.c >index 426f779a2b0b..c72c6b2796bf 100644 >--- a/contrib/libarchive/libarchive/archive_write_set_format_cpio_odc.c >+++ b/contrib/libarchive/libarchive/archive_write_set_format_cpio_odc.c >@@ -110,7 +110,7 @@ archive_write_set_format_cpio_odc(struct archive *_a) > if (a->format_free != NULL) > (a->format_free)(a); > >- cpio = (struct cpio *)calloc(1, sizeof(*cpio)); >+ cpio = calloc(1, sizeof(*cpio)); > if (cpio == NULL) { > archive_set_error(&a->archive, ENOMEM, "Can't allocate cpio data"); > return (ARCHIVE_FATAL); >@@ -467,6 +467,9 @@ archive_write_odc_close(struct archive_write *a) > struct archive_entry *trailer; > > trailer = archive_entry_new2(NULL); >+ if (trailer == NULL) { >+ return ARCHIVE_FATAL; >+ } > /* nlink = 1 here for GNU cpio compat. */ > archive_entry_set_nlink(trailer, 1); > archive_entry_set_size(trailer, 0); >diff --git a/contrib/libarchive/libarchive/archive_write_set_format_gnutar.c b/contrib/libarchive/libarchive/archive_write_set_format_gnutar.c >index a88350b87411..04b190de4402 100644 >--- a/contrib/libarchive/libarchive/archive_write_set_format_gnutar.c >+++ b/contrib/libarchive/libarchive/archive_write_set_format_gnutar.c >@@ -174,7 +174,7 @@ archive_write_set_format_gnutar(struct archive *_a) > struct archive_write *a = (struct archive_write *)_a; > struct gnutar *gnutar; > >- gnutar = (struct gnutar *)calloc(1, sizeof(*gnutar)); >+ gnutar = calloc(1, sizeof(*gnutar)); > if (gnutar == NULL) { > archive_set_error(&a->archive, ENOMEM, > "Can't allocate gnutar data"); >@@ -296,7 +296,7 @@ archive_write_gnutar_header(struct archive_write *a, > /* Only regular files (not hardlinks) have data. */ > if (archive_entry_hardlink(entry) != NULL || > archive_entry_symlink(entry) != NULL || >- !(archive_entry_filetype(entry) == AE_IFREG)) >+ archive_entry_filetype(entry) != AE_IFREG) > archive_entry_set_size(entry, 0); > > if (AE_IFDIR == archive_entry_filetype(entry)) { >@@ -523,7 +523,7 @@ archive_write_gnutar_header(struct archive_write *a, > goto exit_write_header; > } > >- if (archive_entry_hardlink(entry) != NULL) { >+ if (archive_entry_hardlink_is_set(entry)) { > tartype = '1'; > } else > switch (archive_entry_filetype(entry)) { >diff --git a/contrib/libarchive/libarchive/archive_write_set_format_iso9660.c b/contrib/libarchive/libarchive/archive_write_set_format_iso9660.c >index 2a3ae07fa2b2..a77ea7708b4b 100644 >--- a/contrib/libarchive/libarchive/archive_write_set_format_iso9660.c >+++ b/contrib/libarchive/libarchive/archive_write_set_format_iso9660.c >@@ -2237,7 +2237,7 @@ set_str_utf16be(struct archive_write *a, unsigned char *p, const char *s, > int onepad; > > if (s == NULL) >- s = ""; >+ s = "\0\0"; > if (l & 0x01) { > onepad = 1; > l &= ~1; >diff --git a/contrib/libarchive/libarchive/archive_write_set_format_pax.c b/contrib/libarchive/libarchive/archive_write_set_format_pax.c >index e93333074a6a..6e35f705e136 100644 >--- a/contrib/libarchive/libarchive/archive_write_set_format_pax.c >+++ b/contrib/libarchive/libarchive/archive_write_set_format_pax.c >@@ -138,7 +138,7 @@ archive_write_set_format_pax(struct archive *_a) > if (a->format_free != NULL) > (a->format_free)(a); > >- pax = (struct pax *)calloc(1, sizeof(*pax)); >+ pax = calloc(1, sizeof(*pax)); > if (pax == NULL) { > archive_set_error(&a->archive, ENOMEM, > "Can't allocate pax data"); >@@ -608,7 +608,15 @@ archive_write_pax_header(struct archive_write *a, > const time_t ustar_max_mtime = get_ustar_max_mtime(); > > /* Sanity check. */ >+#if defined(_WIN32) && !defined(__CYGWIN__) >+ /* NOTE: If the caller supplied a pathname that fails WCS conversion (e.g. >+ * if it is invalid UTF-8), we are expected to return ARCHIVE_WARN later on >+ * in execution, hence the check for both pointers */ >+ if ((archive_entry_pathname_w(entry_original) == NULL) && >+ (archive_entry_pathname(entry_original) == NULL)) { >+#else > if (archive_entry_pathname(entry_original) == NULL) { >+#endif > archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, > "Can't record entry in tar file without pathname"); > return (ARCHIVE_FAILED); >@@ -1032,6 +1040,14 @@ archive_write_pax_header(struct archive_write *a, > archive_entry_set_symlink(entry_main, > "././@LongSymLink"); > } >+ else { >+ /* Otherwise, has non-ASCII characters; update the paths to >+ * however they got decoded above */ >+ if (hardlink != NULL) >+ archive_entry_set_hardlink(entry_main, linkpath); >+ else >+ archive_entry_set_symlink(entry_main, linkpath); >+ } > need_extension = 1; > } > } >@@ -1928,7 +1944,7 @@ url_encode(const char *in) > } > } > >- out = (char *)malloc(out_len + 1); >+ out = malloc(out_len + 1); > if (out == NULL) > return (NULL); > >@@ -1966,7 +1982,7 @@ base64_encode(const char *s, size_t len) > char *d, *out; > > /* 3 bytes becomes 4 chars, but round up and allow for trailing NUL */ >- out = (char *)malloc((len * 4 + 2) / 3 + 1); >+ out = malloc((len * 4 + 2) / 3 + 1); > if (out == NULL) > return (NULL); > d = out; >@@ -2021,7 +2037,7 @@ _sparse_list_add_block(struct pax *pax, int64_t offset, int64_t length, > { > struct sparse_block *sb; > >- sb = (struct sparse_block *)malloc(sizeof(*sb)); >+ sb = malloc(sizeof(*sb)); > if (sb == NULL) > return (ARCHIVE_FATAL); > sb->next = NULL; >diff --git a/contrib/libarchive/libarchive/archive_write_set_format_raw.c b/contrib/libarchive/libarchive/archive_write_set_format_raw.c >index feff93697736..ff3e9ae0ebdb 100644 >--- a/contrib/libarchive/libarchive/archive_write_set_format_raw.c >+++ b/contrib/libarchive/libarchive/archive_write_set_format_raw.c >@@ -58,7 +58,7 @@ archive_write_set_format_raw(struct archive *_a) > if (a->format_free != NULL) > (a->format_free)(a); > >- raw = (struct raw *)calloc(1, sizeof(*raw)); >+ raw = calloc(1, sizeof(*raw)); > if (raw == NULL) { > archive_set_error(&a->archive, ENOMEM, "Can't allocate raw data"); > return (ARCHIVE_FATAL); >diff --git a/contrib/libarchive/libarchive/archive_write_set_format_shar.c b/contrib/libarchive/libarchive/archive_write_set_format_shar.c >index 52ea6adc2264..be9f78ce96cd 100644 >--- a/contrib/libarchive/libarchive/archive_write_set_format_shar.c >+++ b/contrib/libarchive/libarchive/archive_write_set_format_shar.c >@@ -113,7 +113,7 @@ archive_write_set_format_shar(struct archive *_a) > if (a->format_free != NULL) > (a->format_free)(a); > >- shar = (struct shar *)calloc(1, sizeof(*shar)); >+ shar = calloc(1, sizeof(*shar)); > if (shar == NULL) { > archive_set_error(&a->archive, ENOMEM, "Can't allocate shar data"); > return (ARCHIVE_FATAL); >@@ -209,6 +209,10 @@ archive_write_shar_header(struct archive_write *a, struct archive_entry *entry) > if (archive_entry_filetype(entry) != AE_IFDIR) { > /* Try to create the dir. */ > p = strdup(name); >+ if (p == NULL) { >+ archive_set_error(&a->archive, ENOMEM, "Out of memory"); >+ return (ARCHIVE_FATAL); >+ } > pp = strrchr(p, '/'); > /* If there is a / character, try to create the dir. */ > if (pp != NULL) { >@@ -291,6 +295,10 @@ archive_write_shar_header(struct archive_write *a, struct archive_entry *entry) > free(shar->last_dir); > > shar->last_dir = strdup(name); >+ if (shar->last_dir == NULL) { >+ archive_set_error(&a->archive, ENOMEM, "Out of memory"); >+ return (ARCHIVE_FATAL); >+ } > /* Trim a trailing '/'. */ > pp = strrchr(shar->last_dir, '/'); > if (pp != NULL && pp[1] == '\0') >diff --git a/contrib/libarchive/libarchive/archive_write_set_format_ustar.c b/contrib/libarchive/libarchive/archive_write_set_format_ustar.c >index 673487b27fe3..09b71fe6672a 100644 >--- a/contrib/libarchive/libarchive/archive_write_set_format_ustar.c >+++ b/contrib/libarchive/libarchive/archive_write_set_format_ustar.c >@@ -183,7 +183,7 @@ archive_write_set_format_ustar(struct archive *_a) > return (ARCHIVE_FATAL); > } > >- ustar = (struct ustar *)calloc(1, sizeof(*ustar)); >+ ustar = calloc(1, sizeof(*ustar)); > if (ustar == NULL) { > archive_set_error(&a->archive, ENOMEM, > "Can't allocate ustar data"); >@@ -254,7 +254,11 @@ archive_write_ustar_header(struct archive_write *a, struct archive_entry *entry) > sconv = ustar->opt_sconv; > > /* Sanity check. */ >+#if defined(_WIN32) && !defined(__CYGWIN__) >+ if (archive_entry_pathname_w(entry) == NULL) { >+#else > if (archive_entry_pathname(entry) == NULL) { >+#endif > archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, > "Can't record entry in tar file without pathname"); > return (ARCHIVE_FAILED); >@@ -263,7 +267,7 @@ archive_write_ustar_header(struct archive_write *a, struct archive_entry *entry) > /* Only regular files (not hardlinks) have data. */ > if (archive_entry_hardlink(entry) != NULL || > archive_entry_symlink(entry) != NULL || >- !(archive_entry_filetype(entry) == AE_IFREG)) >+ archive_entry_filetype(entry) != AE_IFREG) > archive_entry_set_size(entry, 0); > > if (AE_IFDIR == archive_entry_filetype(entry)) { >diff --git a/contrib/libarchive/libarchive/archive_write_set_format_v7tar.c b/contrib/libarchive/libarchive/archive_write_set_format_v7tar.c >index e3724a096da7..2598fc076c0c 100644 >--- a/contrib/libarchive/libarchive/archive_write_set_format_v7tar.c >+++ b/contrib/libarchive/libarchive/archive_write_set_format_v7tar.c >@@ -160,7 +160,7 @@ archive_write_set_format_v7tar(struct archive *_a) > return (ARCHIVE_FATAL); > } > >- v7tar = (struct v7tar *)calloc(1, sizeof(*v7tar)); >+ v7tar = calloc(1, sizeof(*v7tar)); > if (v7tar == NULL) { > archive_set_error(&a->archive, ENOMEM, > "Can't allocate v7tar data"); >@@ -241,7 +241,7 @@ archive_write_v7tar_header(struct archive_write *a, struct archive_entry *entry) > /* Only regular files (not hardlinks) have data. */ > if (archive_entry_hardlink(entry) != NULL || > archive_entry_symlink(entry) != NULL || >- !(archive_entry_filetype(entry) == AE_IFREG)) >+ archive_entry_filetype(entry) != AE_IFREG) > archive_entry_set_size(entry, 0); > > if (AE_IFDIR == archive_entry_filetype(entry)) { >diff --git a/contrib/libarchive/libarchive/archive_write_set_format_xar.c b/contrib/libarchive/libarchive/archive_write_set_format_xar.c >index 2cf655da186a..96ef85c69487 100644 >--- a/contrib/libarchive/libarchive/archive_write_set_format_xar.c >+++ b/contrib/libarchive/libarchive/archive_write_set_format_xar.c >@@ -796,7 +796,7 @@ xar_finish_entry(struct archive_write *a) > if (w > 0) > xar->bytes_remaining -= w; > else >- return (w); >+ return ((int)w); > } > file = xar->cur_file; > checksum_final(&(xar->e_sumwrk), &(file->data.e_sum)); >@@ -1163,7 +1163,7 @@ make_file_entry(struct archive_write *a, xmlTextWriterPtr writer, > /* > * Make a file name entry, "<name>". > */ >- l = ll = archive_strlen(&(file->basename)); >+ l = ll = (int)archive_strlen(&(file->basename)); > tmp = malloc(l); > if (tmp == NULL) { > archive_set_error(&a->archive, ENOMEM, >@@ -1189,7 +1189,7 @@ make_file_entry(struct archive_write *a, xmlTextWriterPtr writer, > return (ARCHIVE_FATAL); > } > r = xmlTextWriterWriteBase64(writer, file->basename.s, >- 0, archive_strlen(&(file->basename))); >+ 0, (int)archive_strlen(&(file->basename))); > if (r < 0) { > archive_set_error(&a->archive, > ARCHIVE_ERRNO_MISC, >@@ -2231,10 +2231,10 @@ get_path_component(char *name, int n, const char *fn) > > p = strchr(fn, '/'); > if (p == NULL) { >- if ((l = strlen(fn)) == 0) >+ if ((l = (int)strlen(fn)) == 0) > return (0); > } else >- l = p - fn; >+ l = (int)(p - fn); > if (l > n -1) > return (-1); > memcpy(name, fn, l); >@@ -2651,10 +2651,10 @@ compression_init_encoder_gzip(struct archive *a, > * of ugly hackery to convert a const * pointer to > * a non-const pointer. */ > strm->next_in = (Bytef *)(uintptr_t)(const void *)lastrm->next_in; >- strm->avail_in = lastrm->avail_in; >+ strm->avail_in = (uInt)lastrm->avail_in; > strm->total_in = (uLong)lastrm->total_in; > strm->next_out = lastrm->next_out; >- strm->avail_out = lastrm->avail_out; >+ strm->avail_out = (uInt)lastrm->avail_out; > strm->total_out = (uLong)lastrm->total_out; > if (deflateInit2(strm, level, Z_DEFLATED, > (withheader)?15:-15, >@@ -2684,10 +2684,10 @@ compression_code_gzip(struct archive *a, > * of ugly hackery to convert a const * pointer to > * a non-const pointer. */ > strm->next_in = (Bytef *)(uintptr_t)(const void *)lastrm->next_in; >- strm->avail_in = lastrm->avail_in; >+ strm->avail_in = (uInt)lastrm->avail_in; > strm->total_in = (uLong)lastrm->total_in; > strm->next_out = lastrm->next_out; >- strm->avail_out = lastrm->avail_out; >+ strm->avail_out = (uInt)lastrm->avail_out; > strm->total_out = (uLong)lastrm->total_out; > r = deflate(strm, > (action == ARCHIVE_Z_FINISH)? Z_FINISH: Z_NO_FLUSH); >@@ -2748,11 +2748,11 @@ compression_init_encoder_bzip2(struct archive *a, > * of ugly hackery to convert a const * pointer to > * a non-const pointer. */ > strm->next_in = (char *)(uintptr_t)(const void *)lastrm->next_in; >- strm->avail_in = lastrm->avail_in; >+ strm->avail_in = (unsigned int)lastrm->avail_in; > strm->total_in_lo32 = (uint32_t)(lastrm->total_in & 0xffffffff); > strm->total_in_hi32 = (uint32_t)(lastrm->total_in >> 32); > strm->next_out = (char *)lastrm->next_out; >- strm->avail_out = lastrm->avail_out; >+ strm->avail_out = (unsigned int)lastrm->avail_out; > strm->total_out_lo32 = (uint32_t)(lastrm->total_out & 0xffffffff); > strm->total_out_hi32 = (uint32_t)(lastrm->total_out >> 32); > if (BZ2_bzCompressInit(strm, level, 0, 30) != BZ_OK) { >@@ -2781,11 +2781,11 @@ compression_code_bzip2(struct archive *a, > * of ugly hackery to convert a const * pointer to > * a non-const pointer. */ > strm->next_in = (char *)(uintptr_t)(const void *)lastrm->next_in; >- strm->avail_in = lastrm->avail_in; >+ strm->avail_in = (unsigned int)lastrm->avail_in; > strm->total_in_lo32 = (uint32_t)(lastrm->total_in & 0xffffffff); > strm->total_in_hi32 = (uint32_t)(lastrm->total_in >> 32); > strm->next_out = (char *)lastrm->next_out; >- strm->avail_out = lastrm->avail_out; >+ strm->avail_out = (unsigned int)lastrm->avail_out; > strm->total_out_lo32 = (uint32_t)(lastrm->total_out & 0xffffffff); > strm->total_out_hi32 = (uint32_t)(lastrm->total_out >> 32); > r = BZ2_bzCompress(strm, >diff --git a/contrib/libarchive/libarchive/archive_write_set_format_zip.c b/contrib/libarchive/libarchive/archive_write_set_format_zip.c >index e37e7b5edda1..a9f2877305e8 100644 >--- a/contrib/libarchive/libarchive/archive_write_set_format_zip.c >+++ b/contrib/libarchive/libarchive/archive_write_set_format_zip.c >@@ -456,7 +456,7 @@ archive_write_set_format_zip(struct archive *_a) > if (a->format_free != NULL) > (a->format_free)(a); > >- zip = (struct zip *) calloc(1, sizeof(*zip)); >+ zip = calloc(1, sizeof(*zip)); > if (zip == NULL) { > archive_set_error(&a->archive, ENOMEM, > "Can't allocate zip data"); >@@ -609,7 +609,7 @@ archive_write_zip_header(struct archive_write *a, struct archive_entry *entry) > const char *p; > size_t len; > >- if (archive_entry_pathname_l(entry, &p, &len, sconv) != 0) { >+ if (archive_entry_pathname_l(zip->entry, &p, &len, sconv) != 0) { > if (errno == ENOMEM) { > archive_set_error(&a->archive, ENOMEM, > "Can't allocate memory for Pathname"); >@@ -618,7 +618,7 @@ archive_write_zip_header(struct archive_write *a, struct archive_entry *entry) > archive_set_error(&a->archive, > ARCHIVE_ERRNO_FILE_FORMAT, > "Can't translate Pathname '%s' to %s", >- archive_entry_pathname(entry), >+ archive_entry_pathname(zip->entry), > archive_string_conversion_charset_name(sconv)); > ret2 = ARCHIVE_WARN; > } >@@ -631,7 +631,7 @@ archive_write_zip_header(struct archive_write *a, struct archive_entry *entry) > * for filename. > */ > if (type == AE_IFLNK) { >- if (archive_entry_symlink_l(entry, &p, &len, sconv)) { >+ if (archive_entry_symlink_l(zip->entry, &p, &len, sconv)) { > if (errno == ENOMEM) { > archive_set_error(&a->archive, ENOMEM, > "Can't allocate memory " >@@ -906,7 +906,7 @@ archive_write_zip_header(struct archive_write *a, struct archive_entry *entry) > archive_le32enc(e, (uint32_t)archive_entry_ctime(entry)); > e += 4; > } >- archive_le16enc(ut + 2, e - ut - 4); >+ archive_le16enc(ut + 2, (uint16_t)(e - ut - 4)); > } > > /* >diff --git a/contrib/libarchive/libarchive/test/test_7zip_filename_encoding.c b/contrib/libarchive/libarchive/test/test_7zip_filename_encoding.c >new file mode 100644 >index 000000000000..cf562d39fda7 >--- /dev/null >+++ b/contrib/libarchive/libarchive/test/test_7zip_filename_encoding.c >@@ -0,0 +1,100 @@ >+/* >+ * Copyright (c) 2003-2018 >+ * All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer >+ * in this position and unchanged. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+#include "test.h" >+ >+DEFINE_TEST(test_7zip_filename_encoding_UTF16_win) >+{ >+#if !defined(_WIN32) || defined(__CYGWIN__) >+ skipping("This test is meant to verify unicode string handling" >+ " on Windows with UTF-16 names"); >+ return; >+#else >+ struct archive *a; >+ struct archive_entry *entry; >+ char buff[4096]; >+ size_t used; >+ >+ /* >+ * Don't call setlocale because we're verifying that the '_w' functions >+ * work as expected >+ */ >+ >+ a = archive_write_new(); >+ assertEqualInt(ARCHIVE_OK, archive_write_set_format_7zip(a)); >+ assertEqualInt(ARCHIVE_OK, >+ archive_write_open_memory(a, buff, sizeof(buff), &used)); >+ >+ /* Part 1: file */ >+ entry = archive_entry_new2(a); >+ archive_entry_copy_pathname_w(entry, L"\u8868.txt"); >+ archive_entry_set_filetype(entry, AE_IFREG); >+ archive_entry_set_size(entry, 0); >+ assertEqualInt(ARCHIVE_OK, archive_write_header(a, entry)); >+ >+ /* Part 2: directory */ >+ archive_entry_clear(entry); >+ archive_entry_copy_pathname_w(entry, L"\u8868"); >+ archive_entry_set_filetype(entry, AE_IFDIR); >+ archive_entry_set_size(entry, 0); >+ assertEqualInt(ARCHIVE_OK, archive_write_header(a, entry)); >+ >+ /* Part 3: symlink */ >+ archive_entry_clear(entry); >+ archive_entry_set_pathname(entry, "link.txt"); >+ archive_entry_copy_symlink_w(entry, L"\u8868.txt"); >+ archive_entry_set_filetype(entry, AE_IFLNK); >+ archive_entry_set_symlink_type(entry, AE_SYMLINK_TYPE_FILE); >+ archive_entry_set_size(entry, 0); >+ assertEqualInt(ARCHIVE_OK, archive_write_header(a, entry)); >+ >+ /* NOTE: 7zip does not support hardlinks */ >+ >+ archive_entry_free(entry); >+ assertEqualInt(ARCHIVE_OK, archive_write_free(a)); >+ >+ /* Ensure that the archive contents can be read properly */ >+ /* NOTE: 7zip file contents are not in the order we wrote them! */ >+ a = archive_read_new(); >+ archive_read_support_format_all(a); >+ archive_read_support_filter_all(a); >+ assertEqualIntA(a, ARCHIVE_OK, read_open_memory_seek(a, buff, used, 7)); >+ >+ /* Read part 3: symlink */ >+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &entry)); >+ assertEqualWString(L"\u8868.txt", archive_entry_symlink_w(entry)); >+ >+ /* Read part 1: file */ >+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &entry)); >+ assertEqualWString(L"\u8868.txt", archive_entry_pathname_w(entry)); >+ >+ /* Read part 2: directory */ >+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &entry)); >+ /* NOTE: Trailing slash added automatically for us */ >+ assertEqualWString(L"\u8868/", archive_entry_pathname_w(entry)); >+ >+ archive_read_free(a); >+#endif >+} >\ No newline at end of file >diff --git a/contrib/libarchive/libarchive/test/test_ar_mode.c b/contrib/libarchive/libarchive/test/test_ar_mode.c >new file mode 100644 >index 000000000000..4f9feb1210d2 >--- /dev/null >+++ b/contrib/libarchive/libarchive/test/test_ar_mode.c >@@ -0,0 +1,40 @@ >+/*-SPDX-License-Identifier: BSD-2-Clause >+ * Copyright (C) 2024 by наб <nabijaczleweli@nabijaczleweli.xyz> >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+#include "test.h" >+ >+static const char data[] = "!<arch>\narchivemount.1/ 0 0 0 644 0 `\n"; >+ >+ >+DEFINE_TEST(test_ar_mode) >+{ >+ struct archive * ar = archive_read_new(); >+ assertEqualInt(archive_read_support_format_all(ar), ARCHIVE_OK); >+ assertEqualInt(archive_read_open_memory(ar, data, sizeof(data) - 1), ARCHIVE_OK); >+ >+ struct archive_entry * entry; >+ assertEqualIntA(ar, archive_read_next_header(ar, &entry), ARCHIVE_OK); >+ assertEqualIntA(ar, archive_entry_mode(entry), S_IFREG | 0644); >+ >+ archive_read_free(ar); >+} >diff --git a/contrib/libarchive/libarchive/test/test_archive_match_time.c b/contrib/libarchive/libarchive/test/test_archive_match_time.c >index 25a0623a7e5a..27ad1da2f139 100644 >--- a/contrib/libarchive/libarchive/test/test_archive_match_time.c >+++ b/contrib/libarchive/libarchive/test/test_archive_match_time.c >@@ -316,15 +316,14 @@ test_newer_mtime_than_file_mbs(void) > static void > test_newer_ctime_than_file_mbs(void) > { >+#if defined(_WIN32) && !defined(__CYGWIN__) >+ skipping("Can't set ctime on Windows"); >+ return; >+#else > struct archive *a; > struct archive_entry *ae; > struct archive *m; > >-#if defined(_WIN32) && !defined(__CYGWIN__) >- skipping("Can't set ctime on Windows"); >- return; >-#endif >- > if (!assert((m = archive_match_new()) != NULL)) > return; > if (!assert((ae = archive_entry_new()) != NULL)) { >@@ -373,6 +372,7 @@ test_newer_ctime_than_file_mbs(void) > archive_read_free(a); > archive_entry_free(ae); > archive_match_free(m); >+#endif > } > > static void >@@ -435,15 +435,14 @@ test_newer_mtime_than_file_wcs(void) > static void > test_newer_ctime_than_file_wcs(void) > { >+#if defined(_WIN32) && !defined(__CYGWIN__) >+ skipping("Can't set ctime on Windows"); >+ return; >+#else > struct archive *a; > struct archive_entry *ae; > struct archive *m; > >-#if defined(_WIN32) && !defined(__CYGWIN__) >- skipping("Can't set ctime on Windows"); >- return; >-#endif >- > if (!assert((m = archive_match_new()) != NULL)) > return; > if (!assert((ae = archive_entry_new()) != NULL)) { >@@ -493,6 +492,7 @@ test_newer_ctime_than_file_wcs(void) > archive_read_free(a); > archive_entry_free(ae); > archive_match_free(m); >+#endif > } > > static void >@@ -787,15 +787,14 @@ test_older_mtime_than_file_mbs(void) > static void > test_older_ctime_than_file_mbs(void) > { >+#if defined(_WIN32) && !defined(__CYGWIN__) >+ skipping("Can't set ctime on Windows"); >+ return; >+#else > struct archive *a; > struct archive_entry *ae; > struct archive *m; > >-#if defined(_WIN32) && !defined(__CYGWIN__) >- skipping("Can't set ctime on Windows"); >- return; >-#endif >- > if (!assert((m = archive_match_new()) != NULL)) > return; > if (!assert((ae = archive_entry_new()) != NULL)) { >@@ -845,6 +844,7 @@ test_older_ctime_than_file_mbs(void) > archive_read_free(a); > archive_entry_free(ae); > archive_match_free(m); >+#endif > } > > static void >@@ -907,15 +907,14 @@ test_older_mtime_than_file_wcs(void) > static void > test_older_ctime_than_file_wcs(void) > { >+#if defined(_WIN32) && !defined(__CYGWIN__) >+ skipping("Can't set ctime on Windows"); >+ return; >+#else > struct archive *a; > struct archive_entry *ae; > struct archive *m; > >-#if defined(_WIN32) && !defined(__CYGWIN__) >- skipping("Can't set ctime on Windows"); >- return; >-#endif >- > if (!assert((m = archive_match_new()) != NULL)) > return; > if (!assert((ae = archive_entry_new()) != NULL)) { >@@ -965,6 +964,7 @@ test_older_ctime_than_file_wcs(void) > archive_read_free(a); > archive_entry_free(ae); > archive_match_free(m); >+#endif > } > > static void >@@ -1088,15 +1088,14 @@ test_mtime_between_files_wcs(void) > static void > test_ctime_between_files_mbs(void) > { >+#if defined(_WIN32) && !defined(__CYGWIN__) >+ skipping("Can't set ctime on Windows"); >+ return; >+#else > struct archive *a; > struct archive_entry *ae; > struct archive *m; > >-#if defined(_WIN32) && !defined(__CYGWIN__) >- skipping("Can't set ctime on Windows"); >- return; >-#endif >- > if (!assert((m = archive_match_new()) != NULL)) > return; > if (!assert((ae = archive_entry_new()) != NULL)) { >@@ -1147,20 +1146,20 @@ test_ctime_between_files_mbs(void) > archive_read_free(a); > archive_entry_free(ae); > archive_match_free(m); >+#endif > } > > static void > test_ctime_between_files_wcs(void) > { >+#if defined(_WIN32) && !defined(__CYGWIN__) >+ skipping("Can't set ctime on Windows"); >+ return; >+#else > struct archive *a; > struct archive_entry *ae; > struct archive *m; > >-#if defined(_WIN32) && !defined(__CYGWIN__) >- skipping("Can't set ctime on Windows"); >- return; >-#endif >- > if (!assert((m = archive_match_new()) != NULL)) > return; > if (!assert((ae = archive_entry_new()) != NULL)) { >@@ -1211,6 +1210,7 @@ test_ctime_between_files_wcs(void) > archive_read_free(a); > archive_entry_free(ae); > archive_match_free(m); >+#endif > } > > static void >diff --git a/contrib/libarchive/libarchive/test/test_archive_read.c b/contrib/libarchive/libarchive/test/test_archive_read.c >new file mode 100644 >index 000000000000..583e5166a0be >--- /dev/null >+++ b/contrib/libarchive/libarchive/test/test_archive_read.c >@@ -0,0 +1,63 @@ >+/*- >+ * Copyright (c) 2024 Tobias Stoeckmann >+ * All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+ >+#include "test.h" >+ >+#define __LIBARCHIVE_TEST >+#include "archive_read_private.h" >+ >+static char buf[1024]; >+ >+DEFINE_TEST(test_archive_read_ahead_eof) >+{ >+ struct archive *a; >+ struct archive_read *ar; >+ ssize_t avail; >+ >+ /* prepare a reader of raw in-memory data */ >+ assert((a = archive_read_new()) != NULL); >+ ar = (struct archive_read *)a; >+ >+ assertA(0 == archive_read_support_format_raw(a)); >+ assertA(0 == archive_read_open_memory(a, buf, sizeof(buf))); >+ >+ /* perform a read which can be fulfilled */ >+ assert(NULL != __archive_read_ahead(ar, sizeof(buf) - 1, &avail)); >+ assertEqualInt(sizeof(buf), avail); >+ >+ /* perform a read which cannot be fulfilled due to EOF */ >+ assert(NULL == __archive_read_ahead(ar, sizeof(buf) + 1, &avail)); >+ assertEqualInt(sizeof(buf), avail); >+ >+ /* perform the same read again */ >+ assert(NULL == __archive_read_ahead(ar, sizeof(buf) + 1, &avail)); >+ assertEqualInt(sizeof(buf), avail); >+ >+ /* perform another read which can be fulfilled */ >+ assert(NULL != __archive_read_ahead(ar, sizeof(buf), &avail)); >+ assertEqualInt(sizeof(buf), avail); >+ >+ assert(0 == archive_read_free(a)); >+} >diff --git a/contrib/libarchive/libarchive/test/test_archive_read_multiple_data_objects.c b/contrib/libarchive/libarchive/test/test_archive_read_multiple_data_objects.c >index f5adb5b7b567..f9f75d96fa6b 100644 >--- a/contrib/libarchive/libarchive/test/test_archive_read_multiple_data_objects.c >+++ b/contrib/libarchive/libarchive/test/test_archive_read_multiple_data_objects.c >@@ -184,7 +184,7 @@ file_open(struct archive *a, void *data) > mydata->fd = open(mydata->filename, O_RDONLY | O_BINARY); > if (mydata->fd >= 0) > { >- if ((mydata->buffer = (void*)calloc(BLOCK_SIZE, 1)) == NULL) >+ if ((mydata->buffer = calloc(BLOCK_SIZE, 1)) == NULL) > return (ARCHIVE_FAILED); > } > } >@@ -280,28 +280,21 @@ test_customized_multiple_data_objects(void) > > for (i = 0; filename != NULL;) > { >- assert((mydata = (struct mydata *)calloc(1, sizeof(*mydata))) != NULL); >+ assert((mydata = calloc(1, sizeof(*mydata))) != NULL); > if (mydata == NULL) { > assertEqualInt(ARCHIVE_OK, archive_read_free(a)); > return; > } >- assert((mydata->filename = >- (char *)calloc(strlen(filename) + 1, sizeof(char))) != NULL); >- if (mydata->filename == NULL) { >- free(mydata); >- assertEqualInt(ARCHIVE_OK, archive_read_free(a)); >- return; >- } >- strcpy(mydata->filename, filename); >+ assert((mydata->filename = strdup(filename)) != NULL); > mydata->fd = -1; > filename = reffiles[++i]; > assertA(0 == archive_read_append_callback_data(a, mydata)); > } >- assertA(0 == archive_read_set_open_callback(a, file_open)); >- assertA(0 == archive_read_set_read_callback(a, file_read)); >- assertA(0 == archive_read_set_skip_callback(a, file_skip)); >- assertA(0 == archive_read_set_close_callback(a, file_close)); >- assertA(0 == archive_read_set_switch_callback(a, file_switch)); >+ assertA(0 == archive_read_set_open_callback(a, file_open)); >+ assertA(0 == archive_read_set_read_callback(a, file_read)); >+ assertA(0 == archive_read_set_skip_callback(a, file_skip)); >+ assertA(0 == archive_read_set_close_callback(a, file_close)); >+ assertA(0 == archive_read_set_switch_callback(a, file_switch)); > assertA(0 == archive_read_set_seek_callback(a, file_seek)); > assertA(0 == archive_read_open1(a)); > >diff --git a/contrib/libarchive/libarchive/test/test_archive_string.c b/contrib/libarchive/libarchive/test/test_archive_string.c >index f8f1e337bf73..30f7a800eae8 100644 >--- a/contrib/libarchive/libarchive/test/test_archive_string.c >+++ b/contrib/libarchive/libarchive/test/test_archive_string.c >@@ -405,7 +405,7 @@ DEFINE_TEST(test_archive_string_sort) > > srand((unsigned int)time(NULL)); > size = sizeof(strings) / sizeof(char *); >- assert((test_strings = (char **)calloc(size, sizeof(char *))) != NULL); >+ assert((test_strings = calloc(size, sizeof(char *))) != NULL); > for (i = 0; i < (size - 1); i++) > assert((test_strings[i] = strdup(strings[i])) != NULL); > >diff --git a/contrib/libarchive/libarchive/test/test_archive_string_conversion.c b/contrib/libarchive/libarchive/test/test_archive_string_conversion.c >index d8c75888a4b3..67e9b762aa58 100644 >--- a/contrib/libarchive/libarchive/test/test_archive_string_conversion.c >+++ b/contrib/libarchive/libarchive/test/test_archive_string_conversion.c >@@ -882,3 +882,138 @@ DEFINE_TEST(test_archive_string_conversion) > test_archive_string_canonicalization(); > test_archive_string_set_get(); > } >+ >+DEFINE_TEST(test_archive_string_conversion_utf16_utf8) >+{ >+#if !defined(_WIN32) || defined(__CYGWIN__) >+ skipping("This test is meant to verify unicode string handling on Windows"); >+#else >+ struct archive_mstring mstr; >+ const char* utf8_string; >+ >+ memset(&mstr, 0, sizeof(mstr)); >+ >+ assertEqualInt(ARCHIVE_OK, >+ archive_mstring_copy_wcs(&mstr, L"\U0000043f\U00000440\U00000438")); >+ >+ /* Conversion from WCS to UTF-8 should always succeed */ >+ assertEqualInt(ARCHIVE_OK, >+ archive_mstring_get_utf8(NULL, &mstr, &utf8_string)); >+ assertEqualString("\xD0\xBF\xD1\x80\xD0\xB8", utf8_string); >+ >+ archive_mstring_clean(&mstr); >+#endif >+} >+ >+DEFINE_TEST(test_archive_string_conversion_utf8_utf16) >+{ >+#if !defined(_WIN32) || defined(__CYGWIN__) >+ skipping("This test is meant to verify unicode string handling on Windows"); >+#else >+ struct archive_mstring mstr; >+ const wchar_t* wcs_string; >+ >+ memset(&mstr, 0, sizeof(mstr)); >+ >+ assertEqualInt(6, >+ archive_mstring_copy_utf8(&mstr, "\xD0\xBF\xD1\x80\xD0\xB8")); >+ >+ /* Conversion from UTF-8 to WCS should always succeed */ >+ assertEqualInt(ARCHIVE_OK, >+ archive_mstring_get_wcs(NULL, &mstr, &wcs_string)); >+ assertEqualWString(L"\U0000043f\U00000440\U00000438", wcs_string); >+ >+ archive_mstring_clean(&mstr); >+#endif >+} >+ >+DEFINE_TEST(test_archive_string_update_utf8_win) >+{ >+#if !defined(_WIN32) || defined(__CYGWIN__) >+ skipping("This test is meant to verify unicode string handling on Windows" >+ " with the C locale"); >+#else >+ static const char utf8_string[] = "\xD0\xBF\xD1\x80\xD0\xB8"; >+ static const wchar_t wcs_string[] = L"\U0000043f\U00000440\U00000438"; >+ struct archive_mstring mstr; >+ int r; >+ >+ memset(&mstr, 0, sizeof(mstr)); >+ >+ r = archive_mstring_update_utf8(NULL, &mstr, utf8_string); >+ >+ /* On Windows, this should reliably fail with the C locale */ >+ assertEqualInt(-1, r); >+ assertEqualInt(0, mstr.aes_set & AES_SET_MBS); >+ >+ /* NOTE: We access the internals to validate that they were set by the >+ * 'archive_mstring_update_utf8' function */ >+ /* UTF-8 should always be set */ >+ assertEqualInt(AES_SET_UTF8, mstr.aes_set & AES_SET_UTF8); >+ assertEqualString(utf8_string, mstr.aes_utf8.s); >+ /* WCS should always be set as well */ >+ assertEqualInt(AES_SET_WCS, mstr.aes_set & AES_SET_WCS); >+ assertEqualWString(wcs_string, mstr.aes_wcs.s); >+ >+ archive_mstring_clean(&mstr); >+#endif >+} >+ >+DEFINE_TEST(test_archive_string_update_utf8_utf8) >+{ >+ static const char utf8_string[] = "\xD0\xBF\xD1\x80\xD0\xB8"; >+ static const wchar_t wcs_string[] = L"\U0000043f\U00000440\U00000438"; >+ struct archive_mstring mstr; >+ int r; >+ >+ memset(&mstr, 0, sizeof(mstr)); >+ >+ if (setlocale(LC_ALL, "en_US.UTF-8") == NULL) { >+ skipping("UTF-8 not supported on this system."); >+ return; >+ } >+ >+ r = archive_mstring_update_utf8(NULL, &mstr, utf8_string); >+ >+ /* All conversions should have succeeded */ >+ assertEqualInt(0, r); >+ assertEqualInt(AES_SET_MBS | AES_SET_WCS | AES_SET_UTF8, mstr.aes_set); >+ assertEqualString(utf8_string, mstr.aes_utf8.s); >+ assertEqualString(utf8_string, mstr.aes_mbs.s); >+ assertEqualWString(wcs_string, mstr.aes_wcs.s); >+ >+ archive_mstring_clean(&mstr); >+} >+ >+DEFINE_TEST(test_archive_string_update_utf8_koi8) >+{ >+ static const char utf8_string[] = "\xD0\xBF\xD1\x80\xD0\xB8"; >+ static const char koi8_string[] = "\xD0\xD2\xC9"; >+ static const wchar_t wcs_string[] = L"\U0000043f\U00000440\U00000438"; >+ struct archive_mstring mstr; >+ int r; >+ >+ memset(&mstr, 0, sizeof(mstr)); >+ >+ if (setlocale(LC_ALL, "ru_RU.KOI8-R") == NULL) { >+ skipping("KOI8-R locale not available on this system."); >+ return; >+ } >+ >+ r = archive_mstring_update_utf8(NULL, &mstr, utf8_string); >+ >+ /* All conversions should have succeeded */ >+ assertEqualInt(0, r); >+ assertEqualInt(AES_SET_MBS | AES_SET_WCS | AES_SET_UTF8, mstr.aes_set); >+ assertEqualString(utf8_string, mstr.aes_utf8.s); >+ assertEqualString(koi8_string, mstr.aes_mbs.s); >+#if defined(_WIN32) && !defined(__CYGWIN__) >+ assertEqualWString(wcs_string, mstr.aes_wcs.s); >+#else >+ /* No guarantee of how WCS strings behave, however this test test is >+ * primarily meant for Windows */ >+ (void)wcs_string; >+#endif >+ >+ archive_mstring_clean(&mstr); >+} >diff --git a/contrib/libarchive/libarchive/test/test_archive_write_add_filter_by_name.c b/contrib/libarchive/libarchive/test/test_archive_write_add_filter_by_name.c >index c80e161c3b58..9d7e58d6f635 100644 >--- a/contrib/libarchive/libarchive/test/test_archive_write_add_filter_by_name.c >+++ b/contrib/libarchive/libarchive/test/test_archive_write_add_filter_by_name.c >@@ -36,7 +36,7 @@ test_filter_by_name(const char *filter_name, int filter_code, > char *buff; > int r; > >- assert((buff = calloc(buffsize, sizeof(char))) != NULL); >+ assert((buff = calloc(buffsize, sizeof(*buff))) != NULL); > if (buff == NULL) > return; > >diff --git a/contrib/libarchive/libarchive/test/test_compat_lzip.c b/contrib/libarchive/libarchive/test/test_compat_lzip.c >index 1420e5bb9ac0..50920eefb1cf 100644 >--- a/contrib/libarchive/libarchive/test/test_compat_lzip.c >+++ b/contrib/libarchive/libarchive/test/test_compat_lzip.c >@@ -47,7 +47,7 @@ echo "f3" > $dir/d1/f3 > rm -r $dir > } > # >-# Make a lzip file from splitted tar file. >+# Make a lzip file from split tar file. > # > name=test_compat_lzip_1 > dir="$name`date +%Y%m%d%H%M%S`.$USER" >diff --git a/contrib/libarchive/libarchive/test/test_compat_solaris_pax_sparse.c b/contrib/libarchive/libarchive/test/test_compat_solaris_pax_sparse.c >index c25c4eb8f51e..94e3e9189bc2 100644 >--- a/contrib/libarchive/libarchive/test/test_compat_solaris_pax_sparse.c >+++ b/contrib/libarchive/libarchive/test/test_compat_solaris_pax_sparse.c >@@ -60,7 +60,7 @@ test_compat_solaris_pax_sparse_1(void) > assertEqualInt(0100644, archive_entry_mode(ae)); > > /* Verify the sparse information. */ >- failure("This sparse file should have tree data blocks"); >+ failure("This sparse file should have three data blocks"); > assertEqualInt(3, archive_entry_sparse_reset(ae)); > assertEqualInt(ARCHIVE_OK, > archive_entry_sparse_next(ae, &offset, &length)); >diff --git a/contrib/libarchive/libarchive/test/test_entry.c b/contrib/libarchive/libarchive/test/test_entry.c >index 228fdd8bcc56..38c406e35b5a 100644 >--- a/contrib/libarchive/libarchive/test/test_entry.c >+++ b/contrib/libarchive/libarchive/test/test_entry.c >@@ -269,7 +269,7 @@ DEFINE_TEST(test_entry) > archive_entry_set_hardlink(e, "hardlink"); > archive_entry_set_symlink(e, "symlink"); > archive_entry_set_link(e, "link"); >- assertEqualString(archive_entry_hardlink(e), "hardlink"); >+ assertEqualString(archive_entry_hardlink(e), NULL); > assertEqualString(archive_entry_symlink(e), "link"); > > /* mode */ >@@ -513,7 +513,6 @@ DEFINE_TEST(test_entry) > archive_entry_set_rdev(e, 532); > archive_entry_set_size(e, 987654321); > archive_entry_copy_sourcepath(e, "source"); >- archive_entry_set_symlink(e, "symlinkname"); > archive_entry_set_uid(e, 83); > archive_entry_set_uname(e, "user"); > /* Add an ACL entry. */ >@@ -548,7 +547,7 @@ DEFINE_TEST(test_entry) > assertEqualInt(archive_entry_rdev(e2), 532); > assertEqualInt(archive_entry_size(e2), 987654321); > assertEqualString(archive_entry_sourcepath(e2), "source"); >- assertEqualString(archive_entry_symlink(e2), "symlinkname"); >+ assertEqualString(archive_entry_symlink(e2), NULL); > assertEqualInt(archive_entry_uid(e2), 83); > assertEqualString(archive_entry_uname(e2), "user"); > >@@ -649,7 +648,7 @@ DEFINE_TEST(test_entry) > assertEqualInt(archive_entry_rdev(e2), 532); > assertEqualInt(archive_entry_size(e2), 987654321); > assertEqualString(archive_entry_sourcepath(e2), "source"); >- assertEqualString(archive_entry_symlink(e2), "symlinkname"); >+ assertEqualString(archive_entry_symlink(e2), NULL); > assertEqualInt(archive_entry_uid(e2), 83); > assertEqualString(archive_entry_uname(e2), "user"); > >@@ -705,6 +704,13 @@ DEFINE_TEST(test_entry) > /* Release clone. */ > archive_entry_free(e2); > >+ /* Verify that symlink is copied over by `clone` */ >+ archive_entry_set_symlink(e, "symlinkpath"); >+ e2 = archive_entry_clone(e); >+ assertEqualString(archive_entry_hardlink(e2), NULL); >+ assertEqualString(archive_entry_symlink(e2), "symlinkpath"); >+ archive_entry_free(e2); >+ > /* > * Test clear() implementation. > */ >diff --git a/contrib/libarchive/libarchive/test/test_gnutar_filename_encoding.c b/contrib/libarchive/libarchive/test/test_gnutar_filename_encoding.c >index f473ddfb4fe9..476ec2149fdf 100644 >--- a/contrib/libarchive/libarchive/test/test_gnutar_filename_encoding.c >+++ b/contrib/libarchive/libarchive/test/test_gnutar_filename_encoding.c >@@ -389,3 +389,105 @@ DEFINE_TEST(test_gnutar_filename_encoding_CP932_UTF8) > assertEqualMem(buff, "\xE8\xA1\xA8.txt", 7); > } > >+DEFINE_TEST(test_gnutar_filename_encoding_UTF16_win) >+{ >+#if !defined(_WIN32) || defined(__CYGWIN__) >+ skipping("This test is meant to verify unicode string handling" >+ " on Windows with UTF-16 names"); >+ return; >+#else >+ struct archive *a; >+ struct archive_entry *entry; >+ char buff[4096]; >+ size_t used; >+ >+ /* >+ * Don't call setlocale because we're verifying that the '_w' functions >+ * work as expected when 'hdrcharset' is UTF-8 >+ */ >+ >+ /* Part 1: file */ >+ a = archive_write_new(); >+ assertEqualInt(ARCHIVE_OK, archive_write_set_format_gnutar(a)); >+ if (archive_write_set_options(a, "hdrcharset=UTF-8") != ARCHIVE_OK) { >+ skipping("This system cannot convert character-set" >+ " from UTF-16 to UTF-8."); >+ archive_write_free(a); >+ return; >+ } >+ assertEqualInt(ARCHIVE_OK, >+ archive_write_open_memory(a, buff, sizeof(buff), &used)); >+ >+ entry = archive_entry_new2(a); >+ /* Set the filename using a UTF-16 string */ >+ archive_entry_copy_pathname_w(entry, L"\u8868.txt"); >+ archive_entry_set_filetype(entry, AE_IFREG); >+ archive_entry_set_size(entry, 0); >+ assertEqualInt(ARCHIVE_OK, archive_write_header(a, entry)); >+ archive_entry_free(entry); >+ assertEqualInt(ARCHIVE_OK, archive_write_free(a)); >+ >+ /* Check UTF-8 version. */ >+ assertEqualMem(buff, "\xE8\xA1\xA8.txt", 7); >+ >+ /* Part 2: directory */ >+ a = archive_write_new(); >+ assertEqualInt(ARCHIVE_OK, archive_write_set_format_gnutar(a)); >+ assertEqualInt(ARCHIVE_OK, archive_write_set_options(a, "hdrcharset=UTF-8")); >+ assertEqualInt(ARCHIVE_OK, >+ archive_write_open_memory(a, buff, sizeof(buff), &used)); >+ >+ entry = archive_entry_new2(a); >+ /* Set the directory name using a UTF-16 string */ >+ /* NOTE: Explicitly not adding trailing slash to test that code path */ >+ archive_entry_copy_pathname_w(entry, L"\u8868"); >+ archive_entry_set_filetype(entry, AE_IFDIR); >+ archive_entry_set_size(entry, 0); >+ assertEqualInt(ARCHIVE_OK, archive_write_header(a, entry)); >+ archive_entry_free(entry); >+ assertEqualInt(ARCHIVE_OK, archive_write_free(a)); >+ >+ /* Check UTF-8 version. */ >+ assertEqualMem(buff, "\xE8\xA1\xA8/", 4); >+ >+ /* Part 3: symlink */ >+ a = archive_write_new(); >+ assertEqualInt(ARCHIVE_OK, archive_write_set_format_gnutar(a)); >+ assertEqualInt(ARCHIVE_OK, archive_write_set_options(a, "hdrcharset=UTF-8")); >+ assertEqualInt(ARCHIVE_OK, >+ archive_write_open_memory(a, buff, sizeof(buff), &used)); >+ >+ entry = archive_entry_new2(a); >+ /* Set the symlink target using a UTF-16 string */ >+ archive_entry_set_pathname(entry, "link.txt"); >+ archive_entry_copy_symlink_w(entry, L"\u8868.txt"); >+ archive_entry_set_filetype(entry, AE_IFLNK); >+ archive_entry_set_symlink_type(entry, AE_SYMLINK_TYPE_FILE); >+ archive_entry_set_size(entry, 0); >+ assertEqualInt(ARCHIVE_OK, archive_write_header(a, entry)); >+ archive_entry_free(entry); >+ assertEqualInt(ARCHIVE_OK, archive_write_free(a)); >+ >+ /* Check UTF-8 version. */ >+ assertEqualMem(buff + 157, "\xE8\xA1\xA8.txt", 7); >+ >+ /* Part 4: hardlink */ >+ a = archive_write_new(); >+ assertEqualInt(ARCHIVE_OK, archive_write_set_format_gnutar(a)); >+ assertEqualInt(ARCHIVE_OK, archive_write_set_options(a, "hdrcharset=UTF-8")); >+ assertEqualInt(ARCHIVE_OK, >+ archive_write_open_memory(a, buff, sizeof(buff), &used)); >+ >+ entry = archive_entry_new2(a); >+ /* Set the symlink target using a UTF-16 string */ >+ archive_entry_set_pathname(entry, "link.txt"); >+ archive_entry_copy_hardlink_w(entry, L"\u8868.txt"); >+ archive_entry_set_size(entry, 0); >+ assertEqualInt(ARCHIVE_OK, archive_write_header(a, entry)); >+ archive_entry_free(entry); >+ assertEqualInt(ARCHIVE_OK, archive_write_free(a)); >+ >+ /* Check UTF-8 version. */ >+ assertEqualMem(buff + 157, "\xE8\xA1\xA8.txt", 7); >+#endif >+} >diff --git a/contrib/libarchive/libarchive/test/test_link_resolver.c b/contrib/libarchive/libarchive/test/test_link_resolver.c >index 5bea9a463b30..6c6230c4d07c 100644 >--- a/contrib/libarchive/libarchive/test/test_link_resolver.c >+++ b/contrib/libarchive/libarchive/test/test_link_resolver.c >@@ -202,3 +202,48 @@ DEFINE_TEST(test_link_resolver) > test_linkify_old_cpio(); > test_linkify_new_cpio(); > } >+ >+DEFINE_TEST(test_link_resolver_unicode_win) >+{ >+#if !defined(_WIN32) || defined(__CYGWIN__) >+ skipping("This test is meant to verify unicode string handling" >+ " on Windows with UTF-16 names"); >+ return; >+#else >+ struct archive_entry *entry, *e2; >+ struct archive_entry_linkresolver *resolver; >+ >+ /* Initialize the resolver. */ >+ assert(NULL != (resolver = archive_entry_linkresolver_new())); >+ archive_entry_linkresolver_set_strategy(resolver, >+ ARCHIVE_FORMAT_TAR_USTAR); >+ >+ /* Create an entry with a unicode filename and 2 links. */ >+ assert(NULL != (entry = archive_entry_new())); >+ archive_entry_copy_pathname_w(entry, L"\u4f60\u597d.txt"); >+ archive_entry_set_ino(entry, 1); >+ archive_entry_set_dev(entry, 2); >+ archive_entry_set_nlink(entry, 2); >+ archive_entry_set_size(entry, 10); >+ archive_entry_linkify(resolver, &entry, &e2); >+ >+ /* Shouldn't be altered, since it wasn't seen before. */ >+ assert(e2 == NULL); >+ assertEqualWString(L"\u4f60\u597d.txt", archive_entry_pathname_w(entry)); >+ assertEqualWString(NULL, archive_entry_hardlink_w(entry)); >+ assertEqualInt(10, archive_entry_size(entry)); >+ >+ /* Link to the same file contents, but a new unicode name. */ >+ archive_entry_copy_pathname_w(entry, L"\u518d\u89c1.txt"); >+ archive_entry_linkify(resolver, &entry, &e2); >+ >+ /* Size & link path should have changed. */ >+ assert(e2 == NULL); >+ assertEqualWString(L"\u518d\u89c1.txt", archive_entry_pathname_w(entry)); >+ assertEqualWString(L"\u4f60\u597d.txt", archive_entry_hardlink_w(entry)); >+ assertEqualInt(0, archive_entry_size(entry)); >+ >+ archive_entry_free(entry); >+ archive_entry_linkresolver_free(resolver); >+#endif >+} >diff --git a/contrib/libarchive/libarchive/test/test_pax_filename_encoding.c b/contrib/libarchive/libarchive/test/test_pax_filename_encoding.c >index 737641c5abca..27e10eaffc6c 100644 >--- a/contrib/libarchive/libarchive/test/test_pax_filename_encoding.c >+++ b/contrib/libarchive/libarchive/test/test_pax_filename_encoding.c >@@ -579,6 +579,158 @@ DEFINE_TEST(test_pax_filename_encoding_KOI8R_CP1251) > assertEqualInt(ARCHIVE_OK, archive_write_free(a)); > } > >+/* >+ * Verify that unicode filenames are correctly preserved on Windows >+ */ >+DEFINE_TEST(test_pax_filename_encoding_UTF16_win) >+{ >+#if !defined(_WIN32) || defined(__CYGWIN__) >+ skipping("This test is meant to verify unicode string handling" >+ " on Windows with UTF-16 names"); >+ return; >+#else >+ struct archive *a; >+ struct archive_entry *entry; >+ char buff[0x2000]; >+ char *p; >+ size_t used; >+ >+ /* >+ * Don't call setlocale because we're verifying that the '_w' functions >+ * work as expected when 'hdrcharset' is UTF-8 >+ */ >+ >+ /* Check if the platform completely supports the string conversion. */ >+ a = archive_write_new(); >+ assertEqualInt(ARCHIVE_OK, archive_write_set_format_pax(a)); >+ if (archive_write_set_options(a, "hdrcharset=UTF-8") != ARCHIVE_OK) { >+ skipping("This system cannot convert character-set" >+ " from UTF-16 to UTF-8."); >+ archive_write_free(a); >+ return; >+ } >+ archive_write_free(a); >+ >+ /* >+ * Create a new archive handle with default charset handling >+ */ >+ a = archive_write_new(); >+ assertEqualInt(ARCHIVE_OK, archive_write_set_format_pax(a)); >+ assertEqualInt(ARCHIVE_OK, >+ archive_write_open_memory(a, buff, sizeof(buff), &used)); >+ >+ /* Part 1: file */ >+ entry = archive_entry_new2(a); >+ archive_entry_copy_pathname_w(entry, L"\u4f60\u597d.txt"); >+ archive_entry_set_filetype(entry, AE_IFREG); >+ archive_entry_set_size(entry, 0); >+ assertEqualInt(ARCHIVE_OK, archive_write_header(a, entry)); >+ >+ /* Part 2: directory */ >+ /* NOTE: Explicitly not adding trailing slash to test that code path */ >+ archive_entry_copy_pathname_w(entry, L"\u043f\u0440\u0438"); >+ archive_entry_set_filetype(entry, AE_IFDIR); >+ archive_entry_set_size(entry, 0); >+ assertEqualInt(ARCHIVE_OK, archive_write_header(a, entry)); >+ >+ /* Part 3: symlink */ >+ archive_entry_copy_pathname_w(entry, L"\u518d\u89c1.txt"); >+ archive_entry_copy_symlink_w(entry, L"\u4f60\u597d.txt"); >+ archive_entry_set_filetype(entry, AE_IFLNK); >+ archive_entry_set_symlink_type(entry, AE_SYMLINK_TYPE_FILE); >+ archive_entry_set_size(entry, 0); >+ assertEqualInt(ARCHIVE_OK, archive_write_header(a, entry)); >+ >+ /* Part 4: hardlink */ >+ archive_entry_copy_pathname_w(entry, L"\u665a\u5b89.txt"); >+ archive_entry_copy_hardlink_w(entry, L"\u4f60\u597d.txt"); >+ archive_entry_set_filetype(entry, AE_IFREG); >+ archive_entry_set_size(entry, 0); >+ assertEqualInt(ARCHIVE_OK, archive_write_header(a, entry)); >+ >+ archive_entry_free(entry); >+ assertEqualInt(ARCHIVE_OK, archive_write_free(a)); >+ >+ /* >+ * Examine the bytes to ensure the filenames ended up UTF-8 >+ * encoded as we expect. >+ */ >+ >+ /* Part 1: file */ >+ p = buff + 0; >+ assertEqualString(p + 0, "PaxHeader/\xE4\xBD\xA0\xE5\xA5\xBD.txt"); /* File name */ >+ assertEqualInt(p[156], 'x'); /* Pax extension header */ >+ p += 512; /* Pax extension body */ >+ assertEqualString(p + 0, "19 path=\xE4\xBD\xA0\xE5\xA5\xBD.txt\n"); >+ p += 512; /* Ustar header */ >+ assertEqualString(p + 0, "\xE4\xBD\xA0\xE5\xA5\xBD.txt"); /* File name */ >+ assertEqualInt(p[156], '0'); >+ >+ /* Part 2: directory */ >+ p += 512; /* Pax extension header */ >+ assertEqualString(p + 0, "PaxHeader/\xD0\xBF\xD1\x80\xD0\xB8"); /* File name */ >+ assertEqualInt(p[156], 'x'); >+ p += 512; /* Pax extension body */ >+ assertEqualString(p + 0, "16 path=\xD0\xBF\xD1\x80\xD0\xB8/\n"); >+ p += 512; /* Ustar header */ >+ assertEqualString(p + 0, "\xD0\xBF\xD1\x80\xD0\xB8/"); /* File name */ >+ assertEqualInt(p[156], '5'); /* directory */ >+ >+ /* Part 3: symlink */ >+ p += 512; /* Pax Extension Header */ >+ assertEqualString(p + 0, "PaxHeader/\xE5\x86\x8D\xE8\xA7\x81.txt"); /* File name */ >+ p += 512; /* Pax extension body */ >+ assertEqualString(p + 0, >+ "19 path=\xE5\x86\x8D\xE8\xA7\x81.txt\n" >+ "23 linkpath=\xE4\xBD\xA0\xE5\xA5\xBD.txt\n" >+ "31 LIBARCHIVE.symlinktype=file\n"); >+ p += 512; /* Ustar header */ >+ assertEqualString(p + 0, "\xE5\x86\x8D\xE8\xA7\x81.txt"); /* File name */ >+ assertEqualInt(p[156], '2'); /* symlink */ >+ assertEqualString(p + 157, "\xE4\xBD\xA0\xE5\xA5\xBD.txt"); /* link name */ >+ >+ /* Part 4: hardlink */ >+ p += 512; /* Pax extension header */ >+ assertEqualString(p + 0, "PaxHeader/\xE6\x99\x9A\xE5\xAE\x89.txt"); /* File name */ >+ p += 512; /* Pax extension body */ >+ assertEqualString(p + 0, >+ "19 path=\xE6\x99\x9A\xE5\xAE\x89.txt\n" >+ "23 linkpath=\xE4\xBD\xA0\xE5\xA5\xBD.txt\n" >+ "31 LIBARCHIVE.symlinktype=file\n"); >+ p += 512; /* Ustar header */ >+ assertEqualString(p + 0, "\xE6\x99\x9A\xE5\xAE\x89.txt"); /* File name */ >+ assertEqualInt(p[156], '1'); /* hard link */ >+ assertEqualString(p + 157, "\xE4\xBD\xA0\xE5\xA5\xBD.txt"); /* link name */ >+ >+ /* >+ * Read back the archive to see if we get the original names >+ */ >+ a = archive_read_new(); >+ archive_read_support_format_all(a); >+ archive_read_support_filter_all(a); >+ assertEqualInt(0, archive_read_open_memory(a, buff, used)); >+ >+ /* Read part 1: file */ >+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &entry)); >+ assertEqualWString(L"\u4f60\u597d.txt", archive_entry_pathname_w(entry)); >+ >+ /* Read part 2: directory */ >+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &entry)); >+ assertEqualWString(L"\u043f\u0440\u0438/", archive_entry_pathname_w(entry)); >+ >+ /* Read part 3: symlink */ >+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &entry)); >+ assertEqualWString(L"\u518d\u89c1.txt", archive_entry_pathname_w(entry)); >+ assertEqualWString(L"\u4f60\u597d.txt", archive_entry_symlink_w(entry)); >+ >+ /* Read part 4: hardlink */ >+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &entry)); >+ assertEqualWString(L"\u665a\u5b89.txt", archive_entry_pathname_w(entry)); >+ assertEqualWString(L"\u4f60\u597d.txt", archive_entry_hardlink_w(entry)); >+ >+ archive_free(a); >+#endif >+} > > DEFINE_TEST(test_pax_filename_encoding) > { >diff --git a/contrib/libarchive/libarchive/test/test_read_filter_gzip_recursive.c b/contrib/libarchive/libarchive/test/test_read_filter_gzip_recursive.c >new file mode 100644 >index 000000000000..0042a0511d5a >--- /dev/null >+++ b/contrib/libarchive/libarchive/test/test_read_filter_gzip_recursive.c >@@ -0,0 +1,50 @@ >+/*- >+ * Copyright (c) 2003-2024 Tim Kientzle >+ * All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+#include "test.h" >+ >+DEFINE_TEST(test_read_filter_gzip_recursive) >+{ >+ const char *name = "test_read_filter_gzip_recursive.gz"; >+ struct archive *a; >+ >+ if (!canGzip()) { >+ skipping("gzip not available"); >+ return; >+ } >+ >+ assert((a = archive_read_new()) != NULL); >+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); >+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); >+ extract_reference_file(name); >+ assertEqualIntA(a, ARCHIVE_FATAL, >+ archive_read_open_filename(a, name, 200)); >+ >+ /* Verify that the filter detection worked. */ >+ assertEqualInt(archive_filter_code(a, 0), ARCHIVE_FILTER_GZIP); >+ assertEqualString(archive_filter_name(a, 0), "gzip"); >+ >+ assertEqualInt(ARCHIVE_OK, archive_read_close(a)); >+ assertEqualInt(ARCHIVE_OK, archive_read_free(a)); >+} >diff --git a/contrib/libarchive/libarchive/test/test_read_filter_gzip_recursive.gz.uu b/contrib/libarchive/libarchive/test/test_read_filter_gzip_recursive.gz.uu >new file mode 100644 >index 000000000000..14b0476bed40 >--- /dev/null >+++ b/contrib/libarchive/libarchive/test/test_read_filter_gzip_recursive.gz.uu >@@ -0,0 +1,19 @@ >+From oss-fuzz: >+ >+clusterfuzz-testcase-minimized-libarchive_fuzzer-5138261947580416 >+ >+This is a gzip input that expands to a gzip, etc, in such a way that >+the "filename" field in the nested gzip header ends up being extremely >+large (> 500 MiB). This caused headaches for the gzip filter before I >+implemented a sanity limit on filename and comment sizes. >+ >+begin 644 test_read_filter_gzip_recursive.gz >+M'XL(`5`M[_<\`'#_``#_'XL("0!D0`GK_W,)&P!P_P``_Q^+"`@(`%$`"0D< >+M`'#_``#_'XL($?\'_^_W/`!P_P``_Q^+"`D`9$`)Z_]S[AL`</\``/\?BP@( >+M"`!1``D)'`!P_P``_Q^+"!'_!___ZP$)=Q'_!___<PD;`'#_``#_'XL("`@` >+M40`)"1P`</\``/\?BP@1_P?_[_<\`'#_``#_'XL("0!D0`GK_SP`</\``/\? >+MBP@)`&1`">O_<^YC:&$!"7<1_P?__W,)&P!P_P``_Q^+"`@(`%$`"0D<`'#_ >+M``#_'XL($?\'_^_W/`!P_P``_Q^+"`D`9$`)Z_\\@</"P\/#P\/#P\/!P\/# >+7P\/#P\/#P\/EP\/#B`$`PT.?"`M=P\,` >+` >+end >diff --git a/contrib/libarchive/libarchive/test/test_read_format_7zip.c b/contrib/libarchive/libarchive/test/test_read_format_7zip.c >index 9f76705deaf2..bb47be668286 100644 >--- a/contrib/libarchive/libarchive/test/test_read_format_7zip.c >+++ b/contrib/libarchive/libarchive/test/test_read_format_7zip.c >@@ -1050,6 +1050,7 @@ test_arm_filter(const char *refname) > > extract_reference_file(refname); > >+ assertEqualInt(ARCHIVE_OK, archive_read_free(a)); > assert((a = archive_read_new()) != NULL); > assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); > assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); >@@ -1123,6 +1124,7 @@ test_arm64_filter(const char *refname) > > extract_reference_file(refname); > >+ assertEqualInt(ARCHIVE_OK, archive_read_free(a)); > assert((a = archive_read_new()) != NULL); > assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); > assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); >@@ -1255,5 +1257,47 @@ DEFINE_TEST(test_read_format_7zip_win_attrib) > assertEqualString("system", archive_entry_fflags_text(ae)); > > >+ assertEqualInt(ARCHIVE_OK, archive_read_free(a)); >+} >+ >+DEFINE_TEST(test_read_format_7zip_extract_second) >+{ >+ struct archive *a; >+ char buffer[256]; >+ >+ assert((a = archive_read_new()) != NULL); >+ >+ if (ARCHIVE_OK != archive_read_support_filter_lzma(a)) { >+ skipping( >+ "7zip:lzma decoding is not supported on this platform"); >+ assertEqualInt(ARCHIVE_OK, archive_read_free(a)); >+ return; >+ } >+ >+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); >+ >+ /* >+ * The test archive has two files: first.txt which is a 65,536 file (the >+ * size of the uncompressed buffer), and second.txt which has contents >+ * we will validate. This test ensures we can skip first.txt and still >+ * be able to read the contents of second.txt >+ */ >+ const char *refname = "test_read_format_7zip_extract_second.7z"; >+ extract_reference_file(refname); >+ >+ assertEqualIntA(a, ARCHIVE_OK, >+ archive_read_open_filename(a, refname, 10240)); >+ >+ struct archive_entry *ae; >+ >+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); >+ assertEqualString("first.txt", archive_entry_pathname(ae)); >+ >+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); >+ assertEqualString("second.txt", archive_entry_pathname(ae)); >+ >+ assertEqualInt(23, archive_read_data(a, buffer, sizeof(buffer))); >+ assertEqualMem("This is from second.txt", buffer, 23); >+ > assertEqualInt(ARCHIVE_OK, archive_read_free(a)); > } >diff --git a/contrib/libarchive/libarchive/test/test_read_format_7zip_extract_second.7z.uu b/contrib/libarchive/libarchive/test/test_read_format_7zip_extract_second.7z.uu >new file mode 100644 >index 000000000000..aa3d6e235784 >--- /dev/null >+++ b/contrib/libarchive/libarchive/test/test_read_format_7zip_extract_second.7z.uu >@@ -0,0 +1,11 @@ >+begin 644 test_read_format_7zip_extract_second.7z >+M-WJ\KR<<``-N%=VX!@$````````B`````````*R\U.<`&`Q"DFIGO`[1,RO\ >+MN,RA7-QU1L&_]O_/$0MMLIEBUR3'BDX@M2C-5'VG./-4,5@W3Q@*__^7_,[H >+MEO`DB'[ZI>@H2_E>/W.2G$$.P01-X!YN5";SS[3#7Z4Q1G/EF.0'^D*[S8&8 >+M[FV9DYX7,SA%^.Q\'?__P!@`````@3,'K@_4WV/Q0A7VLXG$X?GH4=5W^`UM >+M$N_EX$)LE*?K$W5?WLP:X0T[Q%V^?A!0E\VZRBB,)(MO`C`LO[O!3(1YL)<: >+MJ."`';WU;>GP5',%Z=6?*/H9*Z)&\*!2^<F\P&>,RV`R30UOBH8+5.;;2IKF >+M0W://&'?"L?0L2!)`*]F30B0&/_'<4``%P9Z`0F`C``'"P$``2,#`0$%70`` >+-@``,@*@*`6]FB2D````` >+` >+end >diff --git a/contrib/libarchive/libarchive/test/test_read_format_cpio_afio.c b/contrib/libarchive/libarchive/test/test_read_format_cpio_afio.c >index 0eff8cfee856..5d2b4b4c8134 100644 >--- a/contrib/libarchive/libarchive/test/test_read_format_cpio_afio.c >+++ b/contrib/libarchive/libarchive/test/test_read_format_cpio_afio.c >@@ -65,15 +65,6 @@ static unsigned char archive[] = { > 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, > }; > >-/* >- * XXX This must be removed when we use int64_t for uid. >- */ >-static int >-uid_size(void) >-{ >- return (sizeof(uid_t)); >-} >- > DEFINE_TEST(test_read_format_cpio_afio) > { > unsigned char *p; >@@ -106,8 +97,7 @@ DEFINE_TEST(test_read_format_cpio_afio) > */ > assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); > assertEqualInt(17, archive_entry_size(ae)); >- if (uid_size() > 4) >- assertEqualInt(65536, archive_entry_uid(ae)); >+ assertEqualInt(65536, archive_entry_uid(ae)); > assertEqualInt(archive_entry_is_encrypted(ae), 0); > assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED); > assertA(archive_filter_code(a, 0) == ARCHIVE_FILTER_NONE); >@@ -117,3 +107,21 @@ DEFINE_TEST(test_read_format_cpio_afio) > > free(p); > } >+ >+// From OSS Fuzz Issue 70019: >+static unsigned char archive2[] = "070727bbbBbbbBabbbbbbcbcbbbbbbm726f777f777ffffffff518402ffffbbbabDDDDDDDDD7c7Ddd7DDDDnDDDdDDDB7777s77777777777C7727:"; >+ >+DEFINE_TEST(test_read_format_cpio_afio_broken) >+{ >+ struct archive *a; >+ struct archive_entry *ae; >+ >+ assert((a = archive_read_new()) != NULL); >+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); >+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); >+ assertEqualIntA(a, ARCHIVE_OK, archive_read_open_memory(a, archive2, sizeof(archive2))); >+ assertEqualIntA(a, ARCHIVE_FATAL, archive_read_next_header(a, &ae)); >+ assertEqualInt(archive_filter_code(a, 0), ARCHIVE_FILTER_NONE); >+ assertEqualInt(archive_format(a), ARCHIVE_FORMAT_CPIO_AFIO_LARGE); >+ archive_read_free(a); >+} >diff --git a/contrib/libarchive/libarchive/test/test_read_format_huge_rpm.c b/contrib/libarchive/libarchive/test/test_read_format_huge_rpm.c >new file mode 100644 >index 000000000000..729c1e188d28 >--- /dev/null >+++ b/contrib/libarchive/libarchive/test/test_read_format_huge_rpm.c >@@ -0,0 +1,50 @@ >+/*- >+ * Copyright (c) 2003-2024 Tim Kientzle >+ * All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+#include "test.h" >+ >+DEFINE_TEST(test_read_format_huge_rpm) >+{ >+ struct archive_entry *ae; >+ struct archive *a; >+ const char *name = "test_read_format_huge_rpm.rpm"; >+ >+ assert((a = archive_read_new()) != NULL); >+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); >+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); >+ extract_reference_file(name); >+ assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, name, 2)); >+ >+ /* This archive should have no entries -- if it has entries, the bid has screwed up */ >+ assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); >+ >+ /* Verify that the format detection worked. */ >+ assertEqualInt(ARCHIVE_FILTER_RPM, archive_filter_code(a, 0)); >+ assertEqualString("rpm", archive_filter_name(a, 0)); >+ assertEqualInt(ARCHIVE_FORMAT_EMPTY, archive_format(a)); >+ >+ assertEqualInt(ARCHIVE_OK, archive_read_close(a)); >+ assertEqualInt(ARCHIVE_OK, archive_read_free(a)); >+} >+ >diff --git a/contrib/libarchive/libarchive/test/test_read_format_huge_rpm.rpm.uu b/contrib/libarchive/libarchive/test/test_read_format_huge_rpm.rpm.uu >new file mode 100644 >index 000000000000..db2111859662 >--- /dev/null >+++ b/contrib/libarchive/libarchive/test/test_read_format_huge_rpm.rpm.uu >@@ -0,0 +1,244 @@ >+( >+ # set up ST_LEAD >+ python -c 'import sys; sys.stdout.buffer.write(b"\xED\xAB\xEE\xDB\x03\x00\x00\x01" + (96 - 8) * b"\x00")' >+ # set up ST_HEADER with 0x800000 sections >+ python -c 'import sys; sys.stdout.buffer.write(b"\x8E\xAD\xE8\x01" + 4 * b"\x00" + b"\x80" + 7 * b"\x00")' >+ # create archive >+ touch input.txt >+ bsdtar -cf - input.txt >+) > test_read_format_huge_rpm.rpm >+ >+begin 644 test_read_format_huge_rpm.rpm >+M[:ONVP,```$````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M````````CJWH`0````"``````````&EN<'5T+G1X=``````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````P,#`V-#0@`#`P,#<V >+M-2``,#`P,#(T(``P,#`P,#`P,#`P,"`Q-#8Q-3(U-C0W-"`P,3(W,38`(#`` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M````````````=7-T87(`,#!T:6T````````````````````````````````` >+M`````'-T869F````````````````````````````````````,#`P,#`P(``P >+M,#`P,#`@```````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+M```````````````````````````````````````````````````````````` >+"```` >+` >+end >diff --git a/contrib/libarchive/libarchive/test/test_read_format_iso_3.iso.Z.uu b/contrib/libarchive/libarchive/test/test_read_format_iso_3.iso.Z.uu >new file mode 100644 >index 000000000000..e7734ab33bf3 >--- /dev/null >+++ b/contrib/libarchive/libarchive/test/test_read_format_iso_3.iso.Z.uu >@@ -0,0 +1,40 @@ >+Same as test_read_format_iso_2.iso.Z except that the root directory record >+size in the PVD has been changed to 68 bytes (instead of the 34 required >+by the standard). This non-standard value was seen in the wild. >+ >+begin 644 test_read_format_iso_3.iso.Z >+M'YV0``(*'$BPH,&#"!,J7,BPH<.'$"-*G$BQHL6+&#-JW,BQH\>/($.*'$FR >+MI,F3*%.J7,FRI<N7,&/*G$FSILV;.'/JW,FSI\^?0(,*'4JTJ-&C2),J7<JT >+MJ=.G4*-*G4JUJM6K6+-JW<JUJ]>O8,.*'4NVK-FS:-.J7<NVK=NW<./*G4NW >+MKMV[>//JW<NWK]^_@`,+'DRXL.'#B!,K7LRXL>/'D"-+GDRYLN7+F#-KWLRY >+ML^?/H$.+'DVZM.G3J%.K7LVZM>O7L&/+GDV[MNW;N'/KWLV[M^_?P(,+'TZ\ >+MN/'CR),K7\Z\N?/GT*-+GTZ]NO7KV+-KW\Z]N_?OX,.+'T^^O/GSZ-.K7\^^ >+MO?OW\./+GT^_OOW[^//KW\^_O_^_`0Q!!`PPQ!```$Z408<04Q`!PH,01BCA >+MA!16:.&%$!Z404$;>G0@``%\>"`""`#@04$>2)#0!`,1`0`%!<%8HD`EEF+C >+MC:4($)"(!V+HXX]`!BGDD$06:>212":IY)),-NGDDU!&*>645%9II8\R%!@# >+M##C$0(,,,6Q)PPP$DI-EF%QZ"::89,)`#H%PQBDGG&=NV>67:(Y9YH?_]>GG >+MGX7](R"!!@)JZ*&()JKHHL<="...`AU80:0`!`$B`!=0.@2CG';JZ:>@A@H8 >+MGR]>:FI`DP9@*:F9!BCJJ[#&*NNLM#XE0JD$R3A0C3C:J*.I(0)PZZ,#Z4HC >+M`+WZ"BF((=XZ*4&3SAA0B6\@X$`%"AA`SJ\\!G%KI@1E*BT`U%J+[0+;+AOB >+MIK6VZ^Z[\,8;G;,%1;LK`-5>FVVZP!XX;(SDWIMLCNJ&:`(`%A1D@0$%&9`O >+MMMI2"B(!0KBP0PSR9JSQQAQWW!P:9;#!QAL*>&SRR2BGK'*GWQ8D[KT/*X`N >+MMSOZBVNQ`1\[,,W,!G`P!@5AP#!!#ILK,SD2!T``$19CO/+34$<M]=2$@2PR >+MR51GK?767'?M]==@ARWVV&27;?;9:*>M]MILM^WVVW#'+??<=-=M]]UXYZWW >+MWGSW[???@`<N^."$%V[XX8@GKOCBC#?N^..01R[YY)17;OGEF&>N^>:<=^[Y >+MYZ"'+OKHI)=N^NFHIZ[ZZJRW[OKKL,<N^^RTUV[[[;CGKOONO/?N^^_`!R_\ >+M\,07;_SQR">O_/+,-^_\\]!'+_WTU%=O_?789Z_]]MQW[_WWX(<O_OCDEV_^ >+M^>BGK_[Z[+?O_OOPQR___/37;__]^.>O__[\]^___P`,H``'2,`"&O"`"$R@ >+M`A?(P`8Z\($0C*`$)TC!"EKP@AC,H`8WR,$.>O"#(`RA"$=(PA*:\(0H3*$* >+M5\C"%KKPA3",H0QG2,,:VO"&.,RA#G?(PQ[Z\(=`#*(0ATC$(AKQB$A,HA*7 >+MR,0F.O&)4(RB%*=(Q2I:\8I8S*(6M\C%+GKQBV`,HQC'2,8RFO&,:$RC&M?( >+MQC:Z\8UPC*,<YTC'.MKQCGC,HQ[WR,<^^O&/@`RD(`=)R$(:\I"(3*0B%\G( >+M1CKRD9",I"0G2<E*6O*2F,RD)C?)R4YZ\I.@#*4H1TG*4IKRE*A,I2I7R<I6 >+MNO*5L(RE+&=)RUK:\I:XS*4N=\G+7OKRE\`,IC"'2<QB&O.8R$RF,I?)S&8Z >+M\YG0C*8TITG-:EKSFMC,IC:WR<UN>O.;X`RG.,=)SG*:\YSH3*<ZU\G.=KKS >+MG?",ISSG2<]ZVO.>^,RG/O?)SW[Z\Y\`#:A`!TK0@AKTH`A-J$(7RM"&.O2A >+M$(VH1"=*T8I:]*(8S:A&-\K1CGKTHR`-J4A'2M*2FO2D*$VI2E?*TI:Z]*4P >+MC:E,9TK3FMKTICC-J4YWRM.>^O2G0`VJ4(=*U*(:]:A(3:I2E\K4ICKUJ5"- >+MJE2G2M6J6O6J6,VJ5K?*U:YZ]:M@#:M8QTK6LIKUK&A-JUK7RM:VNO6M<(VK >+".`$` >+` >+end >diff --git a/contrib/libarchive/libarchive/test/test_read_format_iso_Z.c b/contrib/libarchive/libarchive/test/test_read_format_iso_Z.c >index 09b0acb804ea..716552fa36e9 100644 >--- a/contrib/libarchive/libarchive/test/test_read_format_iso_Z.c >+++ b/contrib/libarchive/libarchive/test/test_read_format_iso_Z.c >@@ -40,8 +40,29 @@ test1(void) > archive_read_support_format_all(a)); > assertEqualIntA(a, ARCHIVE_OK, > archive_read_open_filename(a, name, 512)); >+ >+ /* Root directory */ > assertEqualIntA(a, ARCHIVE_OK, > archive_read_next_header(a, &ae)); >+ assertEqualIntA(a, 1131434684, archive_entry_atime(ae)); >+ assertEqualIntA(a, 0, archive_entry_birthtime(ae)); >+ assertEqualIntA(a, 1131434684, archive_entry_ctime(ae)); >+ assertEqualIntA(a, 0, archive_entry_dev(ae)); >+ assertEqualIntA(a, AE_IFDIR, archive_entry_filetype(ae)); >+ assertEqualIntA(a, 0, archive_entry_gid(ae)); >+ assertEqualStringA(a, NULL, archive_entry_gname(ae)); >+ assertEqualIntA(a, 0, archive_entry_ino(ae)); >+ assertEqualIntA(a, AE_IFDIR | 0700, archive_entry_mode(ae)); >+ assertEqualIntA(a, 1131434684, archive_entry_mtime(ae)); >+ assertEqualIntA(a, 2, archive_entry_nlink(ae)); >+ assertEqualStringA(a, ".", archive_entry_pathname(ae)); >+ assertEqualIntA(a, 0700, archive_entry_perm(ae)); >+ assertEqualIntA(a, 2048, archive_entry_size(ae)); >+ assertEqualIntA(a, 0, archive_entry_uid(ae)); >+ assertEqualStringA(a, NULL, archive_entry_uname(ae)); >+ >+ assertEqualIntA(a, ARCHIVE_EOF, >+ archive_read_next_header(a, &ae)); > assertEqualInt(1, archive_file_count(a)); > assertEqualInt(archive_filter_code(a, 0), > ARCHIVE_FILTER_COMPRESS); >@@ -53,11 +74,10 @@ test1(void) > } > > static void >-test2(void) >+test_small(const char *name) > { > struct archive_entry *ae; > struct archive *a; >- const char *name = "test_read_format_iso_2.iso.Z"; > > extract_reference_file(name); > >@@ -68,21 +88,114 @@ test2(void) > archive_read_support_format_all(a)); > assertEqualIntA(a, ARCHIVE_OK, > archive_read_open_filename(a, name, 512)); >+ >+ /* Root directory */ > assertEqualIntA(a, ARCHIVE_OK, > archive_read_next_header(a, &ae)); > assertEqualString(".", archive_entry_pathname(ae)); >+ assertEqualInt(0, archive_entry_atime_is_set(ae)); >+ assertEqualInt(0, archive_entry_atime(ae)); >+ assertEqualInt(0, archive_entry_birthtime_is_set(ae)); >+ assertEqualInt(0, archive_entry_birthtime(ae)); >+ assertEqualInt(0, archive_entry_ctime_is_set(ae)); >+ assertEqualInt(0, archive_entry_ctime(ae)); >+ assertEqualIntA(a, 0, archive_entry_dev(ae)); >+ assertEqualIntA(a, AE_IFDIR, archive_entry_filetype(ae)); >+ assertEqualIntA(a, 0, archive_entry_gid(ae)); >+ assertEqualStringA(a, NULL, archive_entry_gname(ae)); >+ assertEqualIntA(a, 0, archive_entry_ino(ae)); >+ assertEqualIntA(a, AE_IFDIR | 0700, archive_entry_mode(ae)); >+ assertEqualInt(0, archive_entry_mtime_is_set(ae)); >+ assertEqualInt(0, archive_entry_mtime(ae)); >+ assertEqualIntA(a, 4, archive_entry_nlink(ae)); >+ assertEqualIntA(a, 0700, archive_entry_perm(ae)); >+ assertEqualIntA(a, 2048, archive_entry_size(ae)); >+ assertEqualIntA(a, 0, archive_entry_uid(ae)); >+ assertEqualStringA(a, NULL, archive_entry_uname(ae)); >+ >+ /* Directory "A" */ > assertEqualIntA(a, ARCHIVE_OK, > archive_read_next_header(a, &ae)); > assertEqualString("A", archive_entry_pathname(ae)); >+ assertEqualIntA(a, 1313381406, archive_entry_atime(ae)); >+ assertEqualIntA(a, 0, archive_entry_birthtime(ae)); >+ assertEqualIntA(a, 1313381406, archive_entry_ctime(ae)); >+ assertEqualIntA(a, 0, archive_entry_dev(ae)); >+ assertEqualIntA(a, AE_IFDIR, archive_entry_filetype(ae)); >+ assertEqualIntA(a, 0, archive_entry_gid(ae)); >+ assertEqualStringA(a, NULL, archive_entry_gname(ae)); >+ assertEqualIntA(a, 0, archive_entry_ino(ae)); >+ assertEqualIntA(a, AE_IFDIR | 0700, archive_entry_mode(ae)); >+ assertEqualIntA(a, 1313381406, archive_entry_mtime(ae)); >+ assertEqualIntA(a, 2, archive_entry_nlink(ae)); >+ assertEqualIntA(a, 0700, archive_entry_perm(ae)); >+ assertEqualIntA(a, 2048, archive_entry_size(ae)); >+ assertEqualIntA(a, 0, archive_entry_uid(ae)); >+ assertEqualStringA(a, NULL, archive_entry_uname(ae)); >+ >+ /* File "A/B" */ > assertEqualIntA(a, ARCHIVE_OK, > archive_read_next_header(a, &ae)); > assertEqualString("A/B", archive_entry_pathname(ae)); >+ assertEqualIntA(a, 1313381406, archive_entry_atime(ae)); >+ assertEqualIntA(a, 0, archive_entry_birthtime(ae)); >+ assertEqualIntA(a, 1313381406, archive_entry_ctime(ae)); >+ assertEqualIntA(a, 0, archive_entry_dev(ae)); >+ assertEqualIntA(a, AE_IFREG, archive_entry_filetype(ae)); >+ assertEqualIntA(a, 0, archive_entry_gid(ae)); >+ assertEqualStringA(a, NULL, archive_entry_gname(ae)); >+ assertEqualIntA(a, 0, archive_entry_ino(ae)); >+ assertEqualIntA(a, AE_IFREG | 0400, archive_entry_mode(ae)); >+ assertEqualIntA(a, 1313381406, archive_entry_mtime(ae)); >+ assertEqualIntA(a, 1, archive_entry_nlink(ae)); >+ assertEqualIntA(a, 0400, archive_entry_perm(ae)); >+ assertEqualIntA(a, 6, archive_entry_size(ae)); >+ assertEqualIntA(a, 0, archive_entry_uid(ae)); >+ assertEqualStringA(a, NULL, archive_entry_uname(ae)); >+ /* TODO: Verify that file contents are "hello\n" */ >+ >+ /* Directory "C" */ > assertEqualIntA(a, ARCHIVE_OK, > archive_read_next_header(a, &ae)); > assertEqualString("C", archive_entry_pathname(ae)); >+ assertEqualIntA(a, 1313381411, archive_entry_atime(ae)); >+ assertEqualIntA(a, 0, archive_entry_birthtime(ae)); >+ assertEqualIntA(a, 1313381411, archive_entry_ctime(ae)); >+ assertEqualIntA(a, 0, archive_entry_dev(ae)); >+ assertEqualIntA(a, AE_IFDIR, archive_entry_filetype(ae)); >+ assertEqualIntA(a, 0, archive_entry_gid(ae)); >+ assertEqualStringA(a, NULL, archive_entry_gname(ae)); >+ assertEqualIntA(a, 0, archive_entry_ino(ae)); >+ assertEqualIntA(a, AE_IFDIR | 0700, archive_entry_mode(ae)); >+ assertEqualIntA(a, 1313381411, archive_entry_mtime(ae)); >+ assertEqualIntA(a, 2, archive_entry_nlink(ae)); >+ assertEqualIntA(a, 0700, archive_entry_perm(ae)); >+ assertEqualIntA(a, 2048, archive_entry_size(ae)); >+ assertEqualIntA(a, 0, archive_entry_uid(ae)); >+ assertEqualStringA(a, NULL, archive_entry_uname(ae)); >+ >+ /* File "C/D" */ > assertEqualIntA(a, ARCHIVE_OK, > archive_read_next_header(a, &ae)); > assertEqualString("C/D", archive_entry_pathname(ae)); >+ assertEqualIntA(a, 1313381411, archive_entry_atime(ae)); >+ assertEqualIntA(a, 0, archive_entry_birthtime(ae)); >+ assertEqualIntA(a, 1313381411, archive_entry_ctime(ae)); >+ assertEqualIntA(a, 0, archive_entry_dev(ae)); >+ assertEqualIntA(a, AE_IFREG, archive_entry_filetype(ae)); >+ assertEqualIntA(a, 0, archive_entry_gid(ae)); >+ assertEqualStringA(a, NULL, archive_entry_gname(ae)); >+ assertEqualIntA(a, 0, archive_entry_ino(ae)); >+ assertEqualIntA(a, AE_IFREG | 0400, archive_entry_mode(ae)); >+ assertEqualIntA(a, 1313381411, archive_entry_mtime(ae)); >+ assertEqualIntA(a, 1, archive_entry_nlink(ae)); >+ assertEqualIntA(a, 0400, archive_entry_perm(ae)); >+ assertEqualIntA(a, 6, archive_entry_size(ae)); >+ assertEqualIntA(a, 0, archive_entry_uid(ae)); >+ assertEqualStringA(a, NULL, archive_entry_uname(ae)); >+ /* TODO: Verify that file contents are "hello\n" */ >+ >+ /* Final statistics */ > assertEqualIntA(a, ARCHIVE_EOF, > archive_read_next_header(a, &ae)); > assertEqualInt(5, archive_file_count(a)); >@@ -98,5 +211,8 @@ test2(void) > DEFINE_TEST(test_read_format_iso_Z) > { > test1(); >- test2(); >+ /* A very small ISO image with a variety of contents. */ >+ test_small("test_read_format_iso_2.iso.Z"); >+ /* As above, but with a non-standard 68-byte root directory in the PVD */ >+ test_small("test_read_format_iso_3.iso.Z"); > } >diff --git a/contrib/libarchive/libarchive/test/test_read_format_mtree.c b/contrib/libarchive/libarchive/test/test_read_format_mtree.c >index 70730839386d..b4463298dde2 100644 >--- a/contrib/libarchive/libarchive/test/test_read_format_mtree.c >+++ b/contrib/libarchive/libarchive/test/test_read_format_mtree.c >@@ -158,7 +158,7 @@ test_read_format_mtree1(void) > /* TODO: Mtree reader should probably return ARCHIVE_WARN for this. */ > assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); > assertEqualString(archive_entry_pathname(ae), "dir2/toosmallfile"); >- assertEqualInt(archive_entry_size(ae), -1); >+ assertEqualInt(archive_entry_size(ae), 0); > assertEqualInt(archive_entry_is_encrypted(ae), 0); > assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED); > >diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar4_encrypted.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar4_encrypted.rar.uu >new file mode 100644 >index 000000000000..584183b4a46f >--- /dev/null >+++ b/contrib/libarchive/libarchive/test/test_read_format_rar4_encrypted.rar.uu >@@ -0,0 +1,10 @@ >+begin 0744 test_read_format_rar4_encrypted.rar >+M4F%R(1H'`,^0<P``#0`````````J8W0@D"H`$@```!(````"56Y:[F17=E@= >+M,`4`(````&$N='AT`/#\3!M4:&ES(&ES(&9R;VT@82YT>'1?CG0DE#(`(``` >+M`!(````"A13ZJ6=7=E@=,P4`(````&(N='ATO@(;FGDJBE4`L'*@-,GY]@T0 >+M?ZC1UGSKU*2VR-1K@HH>GZZP#?C:ML=$"NKDN\=T()`J`!(````2`````C4] >+MFI1N5W98'3`%`"````!C+G1X=`"P/D@M5&AI<R!I<R!F<F]M(&,N='AT[<IT >+M))0R`"`````2`````B7ANB9-9'98'3,%`"````!D+G1X=*_B?1/SI5-2`/#[ >+I88]V^#_)1V@;4"TVC,!XR=.I1:KVB0/<OAC@C&97VP3UZ<0]>P!`!P`` >+` >+end >diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar4_encrypted_filenames.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar4_encrypted_filenames.rar.uu >new file mode 100644 >index 000000000000..3d7aa806a86d >--- /dev/null >+++ b/contrib/libarchive/libarchive/test/test_read_format_rar4_encrypted_filenames.rar.uu >@@ -0,0 +1,14 @@ >+begin 0744 test_read_format_rar4_encrypted_filenames.rar >+M4F%R(1H'`,Z9<X``#0```````````````````'0+AC,H,+6'0#)>8VT<XO:* >+M5M'"E1[V+ZKT=VW!$Y2=W$,@Y24Z^"L_;GVG\*4]&"6BQ#?@6TX38EQ\8\4- >+M<S5U7JMAF.'L3LOOCM6]\Q60C51S.)^'6MOG_R<DW8EG(```````````(B,( >+M]O5[61NCM'\Q9[&<E5D6F6`?WI`#-.(]J?W^C9!U-5O^2='P+5K(ED[:I4T= >+M0/ZHVQ[F8HPBZ<+WA.*T5<R$K+8&/OR_\BN8V5VVM]"5F:$4Y:\JR,),%],1 >+MR;Z>``````````#*B0$)1EIB[[O98],X0DT>H`N+&*.NNPK!]1XJ#(AF_TF6 >+M0FE3!L0.1T+=I<'X[Z0:F23U_[6S.I:ZNQ.\@HZ\]&0L/P:SA$:,Y<^4.A!\ >+MSBD7NK5[VE/9$9K/N2`[7]T``````````.\$Z3?>_Z.3*>6<12%741?6_./A >+M!:XA!P"B0PS55>+%J)-H$0T!//>$']'-U?_"O=N?_:SNE<^54Z3/[8,M^F?6 >+M36)XOUNLS4@\\N@1J#Z/V?J<_XS>CNA21,<Q;<;C[@``````````\)]%=^L\ >+*)-I(DJO^>177HP`` >+` >+end >diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar4_solid_encrypted.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar4_solid_encrypted.rar.uu >new file mode 100644 >index 000000000000..7d73ee86d9ef >--- /dev/null >+++ b/contrib/libarchive/libarchive/test/test_read_format_rar4_solid_encrypted.rar.uu >@@ -0,0 +1,11 @@ >+begin 0744 test_read_format_rar4_solid_encrypted.dat >+M4F%R(1H'`#O0<P@`#0`````````A873$E#(`,````!(````"56Y:[F17=E@= >+M,P4`(````&$N='AT````````````\/Q,&]Q,RV`3V)H10_&#G@'FZ'@$+I%W >+MXP?A#XMQ>A-D/\9QH!R+,]AV(8F*MQD3.<V`SC96=-24,@`0````$@````*% >+M%/JI9U=V6!TS!0`@````8BYT>'2/%M7(05"L]0"P<J`TBK7M!JH)_:_8K\\K >+M,U_X>\,C=-24,@`0````$@````(U/9J4;E=V6!TS!0`@````8RYT>'1ILB:< >+M@2)@M@"P/D@MD'UA]R2N^_G@1!L-H?V>K-TV=-24,@`0````$@````(EX;HF >+M361V6!TS!0`@````9"YT>'2C+AKDKML%S0#P^V&/?J,L#@>!52=M.=PPCAJF >+(IL0]>P!`!P`` >+` >+end >diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar4_solid_encrypted_filenames.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar4_solid_encrypted_filenames.rar.uu >new file mode 100644 >index 000000000000..6c28e955d0e1 >--- /dev/null >+++ b/contrib/libarchive/libarchive/test/test_read_format_rar4_solid_encrypted_filenames.rar.uu >@@ -0,0 +1,13 @@ >+begin 0744 test_read_format_rar4_solid_encrypted_filenames.rar >+M4F%R(1H'`#K9<X@`#0```````````````````,L":IWIGA+/YV2@]#O3Z\&O >+MM'G1)=DT/G2[DW184@7Z`)NZR=<IA_-5+=&`P_B)U/,]<+8]C:YI<X@;OT`3 >+M]?.U#K0BV:I"0AYHE-->?V[74Q\@?])NR\68105J4BRL3O.E$I*!91X?$@/< >+M5C[G2D$``````````!NS=YISD[7`_=#)$A.9/&9<3`&D$(L]$^-&%;!SH,%> >+M!NZ:W\)5XCJI<"H7+BND(033Q/J9/18(=/`A%WI]@(`:H>AE`M3T)R8']S%P >+MHYCV```````````&TB\_##3K6#@Q+J)RDEJ0$CI"]*R1)8!Q.3B[,7O5NM,] >+ME::7;E__N2:-%4-;/D+DA:J@P.L0*I/__*OX77=\L4-&F^""&L'VP9/DK-;$ >+MLP``````````1D.3Y0+"D$@9F(IYV&*B<`A2J2$)(C=_X_QEMWE*VK9ITH*U >+MAJ@<<Z%4#?(I"H:5J08&7^WM`<#3=A9D#':;X2IVK.%[ZZ#58(4W0Q[RT-X` >+7`````````/"?17?K/"3:2)*K_GD5UZ,` >+` >+end >diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar5.c b/contrib/libarchive/libarchive/test/test_read_format_rar5.c >index 705913b04cc2..594f032fc07e 100644 >--- a/contrib/libarchive/libarchive/test/test_read_format_rar5.c >+++ b/contrib/libarchive/libarchive/test/test_read_format_rar5.c >@@ -843,7 +843,7 @@ DEFINE_TEST(test_read_format_rar5_block_by_block) > struct archive_entry *ae; > struct archive *a; > uint8_t buf[173]; >- int bytes_read; >+ ssize_t bytes_read; > uint32_t computed_crc = 0; > > extract_reference_file("test_read_format_rar5_compressed.rar"); >@@ -932,19 +932,22 @@ DEFINE_TEST(test_read_format_rar5_symlink) > assertEqualInt(AE_IFLNK, archive_entry_filetype(ae)); > assertEqualString("file.txt", archive_entry_symlink(ae)); > assertEqualInt(AE_SYMLINK_TYPE_FILE, archive_entry_symlink_type(ae)); >- assertA(0 == archive_read_data(a, NULL, archive_entry_size(ae))); >+ assertEqualInt(0, archive_entry_size(ae)); >+ assertA(0 == archive_read_data(a, NULL, (size_t)archive_entry_size(ae))); > > assertA(0 == archive_read_next_header(a, &ae)); > assertEqualString("dirlink", archive_entry_pathname(ae)); > assertEqualInt(AE_IFLNK, archive_entry_filetype(ae)); > assertEqualString("dir", archive_entry_symlink(ae)); > assertEqualInt(AE_SYMLINK_TYPE_DIRECTORY, archive_entry_symlink_type(ae)); >- assertA(0 == archive_read_data(a, NULL, archive_entry_size(ae))); >+ assertEqualInt(0, archive_entry_size(ae)); >+ assertA(0 == archive_read_data(a, NULL, (size_t)archive_entry_size(ae))); > > assertA(0 == archive_read_next_header(a, &ae)); > assertEqualString("dir", archive_entry_pathname(ae)); > assertEqualInt(AE_IFDIR, archive_entry_filetype(ae)); >- assertA(0 == archive_read_data(a, NULL, archive_entry_size(ae))); >+ assertEqualInt(0, archive_entry_size(ae)); >+ assertA(0 == archive_read_data(a, NULL, (size_t)archive_entry_size(ae))); > > assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae)); > >@@ -969,7 +972,8 @@ DEFINE_TEST(test_read_format_rar5_hardlink) > assertEqualString("hardlink.txt", archive_entry_pathname(ae)); > assertEqualInt(AE_IFREG, archive_entry_filetype(ae)); > assertEqualString("file.txt", archive_entry_hardlink(ae)); >- assertA(0 == archive_read_data(a, NULL, archive_entry_size(ae))); >+ assertEqualInt(0, archive_entry_size(ae)); >+ assertA(0 == archive_read_data(a, NULL, (size_t)archive_entry_size(ae))); > > assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae)); > >@@ -1340,7 +1344,7 @@ DEFINE_TEST(test_read_format_rar5_sfx) > > assertA(size == archive_read_data(a, buff, size)); > assertEqualMem(buff, test_txt, size); >- >+ > EPILOGUE(); > } > >@@ -1402,3 +1406,26 @@ DEFINE_TEST(test_read_format_rar5_read_data_block_uninitialized_offset) > > EPILOGUE(); > } >+ >+DEFINE_TEST(test_read_format_rar5_data_ready_pointer_leak) >+{ >+ /* oss fuzz 70024 */ >+ >+ char buf[4096]; >+ PROLOGUE("test_read_format_rar5_data_ready_pointer_leak.rar"); >+ >+ /* Return codes of those calls are ignored, because this sample file >+ * is invalid. However, the unpacker shouldn't produce any SIGSEGV >+ * errors during processing. */ >+ >+ (void) archive_read_next_header(a, &ae); >+ (void) archive_read_data(a, buf, sizeof(buf)); >+ (void) archive_read_next_header(a, &ae); >+ (void) archive_read_data(a, buf, sizeof(buf)); >+ (void) archive_read_data(a, buf, sizeof(buf)); >+ (void) archive_read_next_header(a, &ae); >+ /* This call shouldn't produce SIGSEGV. */ >+ (void) archive_read_data(a, buf, sizeof(buf)); >+ >+ EPILOGUE(); >+} >diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar5_data_ready_pointer_leak.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar5_data_ready_pointer_leak.rar.uu >new file mode 100644 >index 000000000000..8c8c90778b9d >--- /dev/null >+++ b/contrib/libarchive/libarchive/test/test_read_format_rar5_data_ready_pointer_leak.rar.uu >@@ -0,0 +1,28 @@ >+begin 644 test_read_format_rar5_data_ready_pointer_leak.rar.uu >+M4F%R(1H'`0`]/-[E`@$`_R`@1#[Z5P("`P,`(/__(""`((``"2`@("`@_R`@ >+M("`@(%.`*O0#`N<B`A"`("#_((`+`00@("`@(""!)/\@("`@("`@(/\@("`@ >+M^I@R<00"WN<-\@$@_R`@(``C("`@("`@("`@("`@("`@("`@("`@("`@("#_ >+M____("`@(/___R#_("`@("`@("#___\@_____R`@("`@("`@(/__________ >+M____(/__(/\@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@________ >+M_________R`@____(/____\@("`@("`@("#______________R#___\@("`@ >+M("`@("`@("`@("`@("`@("`@(/\@("`@("`@("`@("`@("`@("`@("`@("`@ >+M("`@("`@("`@("`@("`@("`@("`@("`@_________R`@("`@_R`@("`@("`@ >+M("`@("`@(/__("`@("`@("`@("`@("`@(%.`*O0#`N<B`A"`_R`@_R#_"P$$ >+M("`@("`@@23_("`@_R`@("#_("`@(/J8,G$$`M[G#?(!(/\@("``(R`@("`@ >+M("`@("`@("`@("`@("`@("`@("#_("`@("`@("#_("`@("`@("`@("`@("`@ >+M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("#_ >+M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@____("`@("`@ >+M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@ >+M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@ >+M("`@("`@("`@("`@("`@("`@_R`@("`@("`@("`@("`@("`@("`@("`@("`@ >+M("!3@"KT`P+G(B`0@/\@(/\@_PL!_R"!)/\@("`@("`@(/\@("`@^I@R<00" >+MWN<-\@$@_R`@(``C("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@ >+M("`@("#______________R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@ >+M("`@("`@("`@("`@("`@("`@("`@(/\@(/_______R`@("`@("`@("`@("`@ >+M("`@("`@("`@_________R`@("`@("`@("`@("`@("`@(/________\@("`@ >+M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(/\@ >+M("`@("`@(/\@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@ >+M("`@("`@("`@("`@("`@(/\@($0^^E<"`@,#("`@(/\@@``)("`@("`@("`@ >+)("`@("`@("`@ >+` >+end >diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar5_encrypted.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar5_encrypted.rar.uu >new file mode 100644 >index 000000000000..0a52fa26bb3c >--- /dev/null >+++ b/contrib/libarchive/libarchive/test/test_read_format_rar5_encrypted.rar.uu >@@ -0,0 +1,12 @@ >+begin 0744 test_read_format_rar5_encrypted.rar >+M4F%R(1H'`0`SDK7E"@$%!@`%`0&`@``U_S(>'P(#"Q($$B!5;EKN@```!6$N >+M='AT"@,"?"&$HX)\V@%4:&ES(&ES(&9R;VT@82YT>'1Z07&S4`(#/#`$$B`8 >+M1:,"@`,`!6(N='AT,`$``P_'1%[A@/BUG]8K0S<(O%?-^C3?!JM=!=23!W</ >+M'8Z`4^HU9QUP\2U+:YP:G`H#`G)EF*:"?-H!8[I4LM`0I4E?M+K3P&FH.QN\ >+MNS@GUX>3>',O?)/BTBC$`-[^IL`[?FQGU`50`-SXC7SQ9A\"`PL2!!(@-3V: >+ME(````5C+G1X=`H#`CY(Z:Z"?-H!5&AI<R!I<R!F<F]M(&,N='AT[/WP75(" >+M`SR@``22`"##WV,2@`,`!60N='AT,`$``P_'1%[A@/BUG]8K0S<(O%?-\\W6 >+MLQRT6Z=\K#98CK,.:8-,U$CI%>O6K'>WHPH#`GO%*?2/?-H!VVER]/96CJ;] >+?&67IE;,VA30W]2J@TR>'LO7!`C+8JEX==U91`P4$```` >+` >+end >diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar5_encrypted_filenames.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar5_encrypted_filenames.rar.uu >new file mode 100644 >index 000000000000..931240a16d49 >--- /dev/null >+++ b/contrib/libarchive/libarchive/test/test_read_format_rar5_encrypted_filenames.rar.uu >@@ -0,0 +1,19 @@ >+begin 0744 test_read_format_rar5_encrypted_filenames.rar >+M4F%R(1H'`0"N(]*0(00```$/:`NPT*?(O:'>=*=Q,C2;&;<*@A@[)[D`X\II >+M)1#LA,>A'D8M?0XU3L36UDKMZ3EWQ[HCXZ3<%!O*=.Y,W/S<QCA?O/:*,^Z5 >+M=M6S3*Y6;+35C`9`*4W]<':72F3'&:K>,FBUJV)T^1MW,X0)C4P7W(`"$#-N >+MQ\V%/Z&YJ=4A7#WA+9.5'__1CF)4F:?SV[[N1U^16P.+TQ5X.'"@NQ"=6K3Z >+M>:;.1CVE<%%M1-OQ3L0FZ[KI2TSW`.2SF20<ZT/,=/(WK4+9"\+J&$')_3V, >+MFW%?=^[MI.6[JA/>0V5WTB3-QIV<3Q'?++X$0]?XV(?ER,71CAXBNL1KT5A* >+M8*&+T@6]A_)*KA]%V3S,0B;S(LW1V.AH.U6U0N\-%!@J9Q-FJ%^'O)(JR5+2 >+MS$5JO/XA3W4MSJ[R27%P_4$GAWSW!SS(4IA_-)Z:[:?V5D!F@TGG9L0!1TF[ >+M:AH<9G0.['%7-\:>"&(8Y#Z#62;U.:,3+=<$E6S8C02I[/<OZ>G>-3P1Y<'J >+MW_FJ/]VJ-Q7IA64<?`;GTW<H]@=YS0)S*\?SKXQ$H.Y!<ZK`[1[?Z(\(_\]> >+MU:_TK/EHMM;PWJ?3`Y9S6&%6L@T0-U<&4E[+_F>Z%+KFW'&W>`,.=]#SI;A[ >+MYA);NM6`5K01J]@IT6O8W#!].A$%_5M\E]S0&<D`"T,:H7>.TOPBCL9$C"GU >+M2<W)Q\9ABJLH57<$#;&%<^N#-N[5KE?`56,WSHG<GU4!!.+@ZU+5N\;J[7J- >+M**R#V\19<I;O[I%?-002U,8R$.^M/P8W]?26N+VB5-\B#7;SV;_L#%4PQ36P >+MBTTF>G&8E))@.H01Q:@1Q^.YVYIG(?#2:S604D\'CWU.!:-E`=;4VFS+KULL >+KJ<2G@G$-MF5V72TYY!]U(UB473O?`U'=W'#D\4A%S-_F?/@]S)MU>.[V1``` >+` >+end >diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar5_solid_encrypted.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar5_solid_encrypted.rar.uu >new file mode 100644 >index 000000000000..d3113a305917 >--- /dev/null >+++ b/contrib/libarchive/libarchive/test/test_read_format_rar5_solid_encrypted.rar.uu >@@ -0,0 +1,14 @@ >+begin 0744 test_read_format_rar5_solid_encrypted.rar >+M4F%R(1H'`0`@MOH1"@$%!@0%`0&`@`!A#\6>4@(#/+``!)(`(%5N6NZ`0P`% >+M82YT>'0P`0`!#X`.^EM!19`,=C!0B-G+#?0([51UI],+OH^T\:=V\5`OX@\X >+M+B?>=W@0'[TD"@,"?"&$HX)\V@$UI92M^>J?V-L?2@`2L023@_#?H\C>K?GG >+MDT*27O`>\]$\(4^12SZAD2GI6I(?@NS\ETUG4@(#/)``!)(`(#W[M6/`0P`% >+M8BYT>'0P`0`##X`.^EM!19`,=C!0B-G+#?09'G;UMT5!4+;8`6WM=*[?X@\X >+M+B?>=W@0'[TD"@,"<F68IH)\V@$C,XZR45`RX*-59&X3Y'+)'7P<"E("`SR0 >+M``22`"#_)YR&P$,`!6,N='AT,`$``P^`#OI;0460#'8P4(C9RPWT6V3<1-F, >+M1I0"0-:R/5=BUN(/."XGWG=X$!^])`H#`CY(Z:Z"?-H!BBA?J'.;?7%L12A& >+M0%6=`D>/[#]2`@,\D``$D@`@>Q=TP\!#``5D+G1X=#`!``,/@`[Z6T%%D`QV >+M,%"(V<L-]&ES:(+U/SMVI#;?U9:@A&OB#S@N)]YW>!`?O20*`P)[Q2GTCWS: >+9`3G@<$3$LKSYCC7DX.K9`[`==U91`P4$```` >+` >+end >diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar5_solid_encrypted_filenames.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar5_solid_encrypted_filenames.rar.uu >new file mode 100644 >index 000000000000..4f3dbfb33127 >--- /dev/null >+++ b/contrib/libarchive/libarchive/test/test_read_format_rar5_solid_encrypted_filenames.rar.uu >@@ -0,0 +1,18 @@ >+begin 0744 test_read_format_rar5_solid_encrypted_filenames.rar >+M4F%R(1H'`0";0=T:(00```$/AC5`PSS2$L"IUF$&I":C])K[3<7Y3A09X<`H >+M`7''7U?%(MHPZ3W;#Z7PZEC<2`T4N9L0A@JE?=;1"4#J%N#6H+4KYITU<*=Q >+MG$W?R7^W[#&LN^@M8(VSG.,@!1JFX359D^5#S[,ZW]V]CJ'J?-Z!KX^]Y1FB >+M8I%5/(^2-8V^KY:K1^?K`DVW*MUL>Q9_6`W#,2ST:17"'W'YF2?)NH%5V"_F >+M7;[0VI^.\JJ-T,_(\\5#ZX1HVQJ7KU0UCF#FGD-?NRMKA;X<,[/[*94^27X, >+M#)I<:BO^_-I%B&A1U>S)9__""\/M>Q5AIY'*]EPTNJW+.J57[$X\U:;W">Z; >+M8P\Z0[ZQOI*B*?BJ?B5+(/Z4.4AJ@;()1YUV4+XY#!76WZV]LZ+;GZ_Q#LLP >+MP`7??+NV**I(A-9N^7HX\V!+YJ3%;R<PA5#T<.1"/TKRXC6SM=>%MD?Q5&H@ >+M>$VAME3"U$312+@SF+8F2RR0)T"DG^4N,^P46&+TZKQ7KS`4@-:J%_["UP"( >+MK=]N^!UJUO2#6Q*`-`-)^?\/`;^4(@FVLVJ?!D,:O)A6@!TNA%.U^"0-?9H< >+M:0&(UWV=+&[82L>'L4XYO20"@)^<WC4/BKMBFP0G&/3,!*[Y+,F),*X7V7]H >+M3&`4SIL,>I']_<2C]D;_,]/)_1?N1+M@PTDL;'[J1L=5\,-?J5Q`$3>_9<2< >+MS^)#MZ*AE=5@5[O(<]*(EIA62$U`5B18?#W;BB.*0A3O%<OI.7X`?QB-FRV] >+M89*8RNH'P\"9I,0X&F;$<0Z70E(,^KF&PZ5WR-O%K;G`"/=E<\4-*H%FZ]O3 >+8G%A)/>[(IVC3ME2PY5F>9$/U'$VW1-BZ >+` >+end >diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar_encryption.c b/contrib/libarchive/libarchive/test/test_read_format_rar_encryption.c >new file mode 100644 >index 000000000000..a184b86b5ffe >--- /dev/null >+++ b/contrib/libarchive/libarchive/test/test_read_format_rar_encryption.c >@@ -0,0 +1,176 @@ >+/* >+ * Copyright (c) 2003-2018 >+ * All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer >+ * in this position and unchanged. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+#include "test.h" >+ >+/* >+ * All of the archives for this teset contain four files: a.txt, b.txt, c.txt, and d.txt >+ * For solid archives or archvies or archives where filenames are encrypted, all four files are encrypted with the >+ * password "password". For non-solid archives without filename encryption, a.txt and c.txt are not encrypted, b.txt is >+ * encrypted with the password "password", and d.txt is encrypted with the password "password2". >+ * >+ * For all files the file contents is "This is from <filename>" (i.e. "This is from a.txt" etc.) >+ */ >+static void test_encrypted_rar_archive(const char *filename, int filenamesEncrypted, int solid) >+{ >+ struct archive_entry *ae; >+ struct archive *a; >+ char buff[128]; >+ int expected_read_header_result, expected_read_data_result; >+ const int expected_file_size = 18; /* This is from X.txt */ >+ >+ /* We should only ever fail to read the header when filenames are encrypted. Otherwise we're failing for other >+ * unsupported reasons, in which case we have no hope of detecting encryption */ >+ expected_read_header_result = filenamesEncrypted ? ARCHIVE_FATAL : ARCHIVE_OK; >+ >+ /* We should only ever fail to read the data for "a.txt" and "c.txt" if they are encrypted */ >+ /* NOTE: We'll never attempt this when filenames are encrypted, so we only check for solid here */ >+ expected_read_data_result = solid ? ARCHIVE_FATAL : expected_file_size; >+ >+ extract_reference_file(filename); >+ assert((a = archive_read_new()) != NULL); >+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); >+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); >+ assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, filename, 10240)); >+ >+ /* No data read yet; encryption unknown */ >+ assertEqualInt(ARCHIVE_READ_FORMAT_ENCRYPTION_DONT_KNOW, archive_read_has_encrypted_entries(a)); >+ >+ /* Read the header for "a.txt" */ >+ assertEqualIntA(a, expected_read_header_result, archive_read_next_header(a, &ae)); >+ if (!filenamesEncrypted) { >+ assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae)); >+ assertEqualString("a.txt", archive_entry_pathname(ae)); >+ assertEqualInt(expected_file_size, archive_entry_size(ae)); >+ assertEqualInt(solid, archive_entry_is_data_encrypted(ae)); >+ assertEqualInt(0, archive_entry_is_metadata_encrypted(ae)); >+ /* NOTE: The reader will set this value to zero on the first header that it reads, even if later entries >+ * are encrypted */ >+ assertEqualInt(solid, archive_read_has_encrypted_entries(a)); >+ assertEqualIntA(a, expected_read_data_result, archive_read_data(a, buff, sizeof(buff))); >+ if (!solid) { >+ assertEqualMem("This is from a.txt", buff, expected_file_size); >+ } >+ } >+ else { >+ assertEqualInt(1, archive_entry_is_data_encrypted(ae)); >+ assertEqualInt(1, archive_entry_is_metadata_encrypted(ae)); >+ assertEqualInt(1, archive_read_has_encrypted_entries(a)); >+ assertEqualInt(ARCHIVE_FATAL, archive_read_data(a, buff, sizeof(buff))); >+ >+ /* Additional attempts to read headers are futile */ >+ assertEqualInt(ARCHIVE_OK, archive_read_close(a)); >+ assertEqualInt(ARCHIVE_OK, archive_read_free(a)); >+ return; >+ } >+ >+ /* From here on out, we can assume that !filenamesEncrypted */ >+ >+ /* Read the header for "b.txt" */ >+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); >+ assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae)); >+ assertEqualString("b.txt", archive_entry_pathname(ae)); >+ assertEqualInt(expected_file_size, archive_entry_size(ae)); >+ assertEqualInt(1, archive_entry_is_data_encrypted(ae)); >+ assertEqualInt(0, archive_entry_is_metadata_encrypted(ae)); >+ assertEqualInt(1, archive_read_has_encrypted_entries(a)); >+ assertEqualIntA(a, ARCHIVE_FATAL, archive_read_data(a, buff, sizeof(buff))); >+ >+ /* Read the header for "c.txt" */ >+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); >+ assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae)); >+ assertEqualString("c.txt", archive_entry_pathname(ae)); >+ assertEqualInt(expected_file_size, archive_entry_size(ae)); >+ assertEqualInt(solid, archive_entry_is_data_encrypted(ae)); >+ assertEqualInt(0, archive_entry_is_metadata_encrypted(ae)); >+ /* After setting to true above, this should forever be true */ >+ assertEqualInt(1, archive_read_has_encrypted_entries(a)); >+ assertEqualIntA(a, expected_read_data_result, archive_read_data(a, buff, sizeof(buff))); >+ if (!solid) { >+ assertEqualMem("This is from c.txt", buff, expected_file_size); >+ } >+ >+ /* Read the header for "d.txt" */ >+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); >+ assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae)); >+ assertEqualString("d.txt", archive_entry_pathname(ae)); >+ assertEqualInt(expected_file_size, archive_entry_size(ae)); >+ assertEqualInt(1, archive_entry_is_data_encrypted(ae)); >+ assertEqualInt(0, archive_entry_is_metadata_encrypted(ae)); >+ assertEqualInt(1, archive_read_has_encrypted_entries(a)); >+ assertEqualIntA(a, ARCHIVE_FATAL, archive_read_data(a, buff, sizeof(buff))); >+ >+ /* End of archive. */ >+ assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); >+ >+ /* Close the archive. */ >+ assertEqualInt(ARCHIVE_OK, archive_read_close(a)); >+ assertEqualInt(ARCHIVE_OK, archive_read_free(a)); >+} >+ >+DEFINE_TEST(test_read_format_rar4_encrypted) >+{ >+ test_encrypted_rar_archive("test_read_format_rar4_encrypted.rar", 0, 0); >+} >+ >+DEFINE_TEST(test_read_format_rar4_encrypted_filenames) >+{ >+ test_encrypted_rar_archive("test_read_format_rar4_encrypted_filenames.rar", 1, 0); >+} >+ >+DEFINE_TEST(test_read_format_rar4_solid_encrypted) >+{ >+ /* TODO: If solid RAR4 support is ever added, the following should pass */ >+#if 0 >+ test_encrypted_rar_archive("test_read_format_rar4_solid_encrypted.rar", 0, 1); >+#else >+ skipping("RAR4 solid archive support not currently available"); >+#endif >+} >+ >+DEFINE_TEST(test_read_format_rar4_solid_encrypted_filenames) >+{ >+ test_encrypted_rar_archive("test_read_format_rar4_solid_encrypted_filenames.rar", 1, 1); >+} >+ >+DEFINE_TEST(test_read_format_rar5_encrypted) >+{ >+ test_encrypted_rar_archive("test_read_format_rar5_encrypted.rar", 0, 0); >+} >+ >+DEFINE_TEST(test_read_format_rar5_encrypted_filenames) >+{ >+ test_encrypted_rar_archive("test_read_format_rar5_encrypted_filenames.rar", 1, 0); >+} >+ >+DEFINE_TEST(test_read_format_rar5_solid_encrypted) >+{ >+ test_encrypted_rar_archive("test_read_format_rar5_solid_encrypted.rar", 0, 1); >+} >+ >+DEFINE_TEST(test_read_format_rar5_solid_encrypted_filenames) >+{ >+ test_encrypted_rar_archive("test_read_format_rar5_solid_encrypted_filenames.rar", 1, 1); >+} >diff --git a/contrib/libarchive/libarchive/test/test_read_format_tar.c b/contrib/libarchive/libarchive/test/test_read_format_tar.c >index 2b7cd8dedcca..1a2b326d0d43 100644 >--- a/contrib/libarchive/libarchive/test/test_read_format_tar.c >+++ b/contrib/libarchive/libarchive/test/test_read_format_tar.c >@@ -437,7 +437,7 @@ static void verify(unsigned char *d, size_t s, > assertA(0 == archive_read_support_filter_all(a)); > assertA(0 == archive_read_support_format_all(a)); > assertA(0 == archive_read_open_memory(a, buff, s + 1024)); >- assertA(0 == archive_read_next_header(a, &ae)); >+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); > assertEqualInt(archive_filter_code(a, 0), compression); > assertEqualInt(archive_format(a), format); > assertEqualInt(archive_entry_is_encrypted(ae), 0); >diff --git a/contrib/libarchive/libarchive/test/test_read_format_tar_pax_large_attr.c b/contrib/libarchive/libarchive/test/test_read_format_tar_pax_large_attr.c >new file mode 100644 >index 000000000000..1c2b55f9c6fb >--- /dev/null >+++ b/contrib/libarchive/libarchive/test/test_read_format_tar_pax_large_attr.c >@@ -0,0 +1,65 @@ >+/*- >+ * Copyright (c) 2003-2023 Tim Kientzle >+ * All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+#include "test.h" >+ >+/* >+ * Read a pax formatted tar archive that has an extremely large >+ * (8,000,000 bytes) attribute of unknown type. The pax reader should simply >+ * skip the attribute. >+ */ >+DEFINE_TEST(test_read_format_tar_pax_large_attr) >+{ >+ char name[] = "test_read_format_tar_pax_large_attr.tar.Z"; >+ struct archive_entry *ae; >+ struct archive *a; >+ >+ assert((a = archive_read_new()) != NULL); >+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); >+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); >+ extract_reference_file(name); >+ assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, name, 10240)); >+ >+ /* Read first entry. */ >+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); >+ assertEqualString("foo", archive_entry_pathname(ae)); >+ assertEqualInt(1, archive_entry_mtime(ae)); >+ assertEqualInt(1000, archive_entry_uid(ae)); >+ assertEqualString("tim", archive_entry_uname(ae)); >+ assertEqualInt(0, archive_entry_gid(ae)); >+ assertEqualString("wheel", archive_entry_gname(ae)); >+ assertEqualInt(0100644, archive_entry_mode(ae)); >+ assertEqualInt(archive_entry_is_encrypted(ae), 0); >+ assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED); >+ >+ /* Verify the end-of-archive. */ >+ assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); >+ >+ /* Verify that the format detection worked. */ >+ assertEqualInt(archive_filter_code(a, 0), ARCHIVE_FILTER_COMPRESS); >+ assertEqualInt(archive_format(a), ARCHIVE_FORMAT_TAR_PAX_INTERCHANGE); >+ >+ assertEqualInt(ARCHIVE_OK, archive_read_close(a)); >+ assertEqualInt(ARCHIVE_OK, archive_read_free(a)); >+} >diff --git a/contrib/libarchive/libarchive/test/test_read_format_tar_pax_large_attr.tar.Z.uu b/contrib/libarchive/libarchive/test/test_read_format_tar_pax_large_attr.tar.Z.uu >new file mode 100644 >index 000000000000..01eb55588ea7 >--- /dev/null >+++ b/contrib/libarchive/libarchive/test/test_read_format_tar_pax_large_attr.tar.Z.uu >@@ -0,0 +1,149 @@ >+Decode this file with: >+cat test_read_format_tar_pax_large_attr.tar.Z.uu | uudecode -p | uncompress | hexdump -C >+ >+It contains a single tar entry with a pax header that has a single >+attribute of 8000000 bytes >+00000200 38 30 30 30 30 30 30 20 75 6e 6b 6e 6f 77 6e 3d |8000000 unknown=| >+00000210 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b |++++++++++++++++| >+* >+007a13f0 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 0a |+++++++++++++++.| >+ >+begin 644 test_read_format_tar_pax_large_attr.tar.Z >+M'YV04,+@05(F#)DR<EZ8>?,&@,.'$"-*G$BQHL6+&"O"V&B#!@T0`#;"N&&C >+M!DB1,&1\#+EQ1L<8,42"B$&CA@P;-UQZM`$"1HP9-6+<```"3\:C2),J73JQ >+MSAPZ8>2PI).F#5.+3\.8,7-U(LJ-)[^"[$JVK-FS:-'B^`H#1!TW:]R\N>.F >+MQXJ[>//JW<NWK]^_@`,+'DRXL.'#B!,K7LRXL>/'D"-+GDRYLN7+F#-KWLRY >+ML^?/H$.+'DVZM.G3J%.K7LVZM>O7L&/+GDV[MNW;N'/KWLV[M^_?P(,+'TZ\ >+MN/'CR),K7\Z\N?/GT*-+GTZ]NO7KV+-KW\Z]N_?OX,.+'T^^O/GSZ-.K7\^^ >+MO?OW\./+GT^_OOW[^//KW\^_O___``8HX(`$%FC@@0@FJ.""##;HX(,01BCA >+MA!16:.&%&&:HX88<=NCAAR"&*.*())9HXHDHIJCBBBRVZ.*+,,8HXXPTUFCC >+MC3CFJ...//;HXX]`!BGDD$06:>212":IY)),-NGDDU!&*>645%9IY9589JGE >+MEEQVZ>678(8IYIADEFGFF6BFJ>::;+;IYIMPQBGGG'36:>>=>.:IYYY\]NGG >+MGX`&*NB@A!9JZ*&()JKHHHPVZNBCD$8JZ:245FKII9AFJNFFG';JZ:>@ABKJ >+MJ*26:NJIJ*:JZJJLMNKJJ[#&*NNLM-9JZZVXYJKKKKSVZNNOP`8K[+#$%FOL >+ML<@FJ^RRS#;K[+/01BOMM-16:^VUV&:K[;;<=NOMM^"&*^ZXY)9K[KGHIJON >+MNNRVZ^Z[\,8K[[STUFOOO?CFJ^^^_/;K[[\`!RSPP`07;/#!"">L\,(,-^SP >+MPQ!'+/'$%%=L\<489ZSQQAQW[/''((<L\L@DEVSRR2BGK/+*++?L\LLPQRSS >+MS#37;//-..>L\\X\]^SSST`'+?301!=M]-%()ZWTTDPW[?334$<M]=145VWU >+MU5AGK?767'?M]==@ARWVV&27;?;9:*>M]MILM^WVVW#'+??<=-=M]]UXYZWW >+MWGSW[???@`<N^."$%V[XX8@GKOCBC#?N^..01R[YY)17;OGEF&>N^>:<=^[Y >+MYZ"'+OKHI)=N^NFHIZ[ZZJRW[OKKL,<N^^RTUV[[[;CGKOONO/?N^^_`!R_\ >+M\,07;_SQR">O_/+,-^_\\]!'+_WTU%=O_?789Z_]]MQW[_WWX(<O_OCDEV_^ >+M^>BGK_[Z[+?O_OOPQR___/37;__]^.>O__[\]^___P`,H``'2,`"&O"`"$R@ >+M`A?(P`8Z\($0C*`$)TC!"EKP@AC,H`8WR,$.>O"#(`RA"$=(PA*:\(0H3*$* >+M5\C"%KKPA3",H0QG2,,:VO"&.,RA#G?(PQ[Z\(=`#*(0ATC$(AKQB$A,HA*7 >+MR,0F.O&)4(RB%*=(Q2I:\8I8S*(6M\C%+GKQBV`,HQC'2,8RFO&,:$RC&M?( >+MQC:Z\8UPC*,<YTC'.MKQCGC,HQ[WR,<^^O&/@`RD(`=)R$(:\I"(3*0B%\G( >+M1CKRD9",I"0G2<E*6O*2F,RD)C?)R4YZ\I.@#*4H1TG*4IKRE*A,I2I7R<I6 >+MNO*5L(RE+&=)RUK:\I:XS*4N=\G+7OKRE\`,IC"'2<QB&O.8R$RF,I?)S&8Z >+M\YG0C*8TITG-:EKSFMC,IC:WR<UN>O.;X`RG.,=)SG*:\YSH3*<ZU\G.=KKS >+MG?",ISSG2<]ZVO.>^,RG/O?)SW[Z\Y\`#:A`!TK0@AKTH`A-J$(7RM"&.O2A >+M$(VH1"=*T8I:]*(8S:A&-\K1CGKTHR`-J4A'2M*2FO2D*$VI2E?*TI:Z]*4P >+MC:E,9TK3FMKTICC-J4YWRM.>^O2G0`VJ4(=*U*(:]:A(3:I2E\K4ICKUJ5"- >+MJE2G2M6J6O6J6,VJ5K?*U:YZ]:M@#:M8QTK6LIKUK&A-JUK7RM:VNO6M<(VK >+M7.=*U[K:]:YXS:M>]\K7OOKUKX`-K&`'2]C"&O:PB$VL8A?+V,8Z]K&0C:QD >+M)TO9REKVLIC-K&8WR]G.>O:SH`VM:$=+VM*:]K2H3:UJ5\O:UKKVM;"-K6QG >+M2]O:VO:VN,VM;G?+V][Z]K?`#:YPATO<XAKWN,A-KG*7R]SF.O>YT(VN=*=+ >+MW>I:][K8S:YVM\O=[GKWN^`-KWC'2][RFO>\Z$VO>M?+WO:Z][WPC:]\YTO? >+M^MKWOOC-KW[WR]_^^O>_``ZP@`=,X`(;^,`(3K""%\S@!COXP1".L(0G3.$* >+M6_C"&,ZPAC?,X0Y[^,,@#K&(1TSB$IOXQ"A.L8I7S.(6N_C%,(ZQC&=,XQK; >+M^,8XSK&.=\SC'OOXQT`.LI"'3.0B&_G(2$ZRDI?,Y"8[^<E0CK*4ITSE*EOY >+MREC.LI:WS.4N>_G+8`ZSF,=,YC*;^<QH3K.:U\SF-KOYS7".LYSG3.<ZV_G. >+M>,ZSGO?,YS[[^<^`#K2@!TWH0AOZT(A.M*(7S>A&._K1D(ZTI"=-Z4I;^M*8 >+MSK2F-\WI3GOZTZ`.M:A'3>I2F_K4J$ZUJE?-ZE:[^M6PCK6L9TWK6MOZUKC. >+MM:YWS>M>^_K7P`ZVL(=-[&(;^]C(3K:RE\WL9CO[V=".MK2G3>UJ6_O:V,ZV >+MMK?-[6Y[^]O@#K>XQTWN<IO[W.A.M[K7S>YVN_O=\(ZWO.=-[WK;^][XSK>^ >+M]\WO?OO[WP`/N,`'3O""&_S@"$^XPA?.\(8[_.$0C[C$)T[QBEO\XAC/N,8W >+MSO&.>_SC(`^YR$=.\I*;_.0H3[G*5\[REKO\Y3"/N<QG3O.:V_SF.,^YSG?. >+M\Y[[_.=`#[K0AT[THAO]Z$A/NM*7SO2F._WI4(^ZU*=.]:I;_>I8S[K6M\[U >+MKGO]ZV`/N]C'3O:RF_WL:$^[VM?.]K:[_>UPC[O<YT[WNMO][GC/N][WSO>^ >+M^_WO@`^\X`=/^,(;_O"(3[SB%\_XQCO^\9"/O.0G3_G*6_[RF,^\YC?/^<Y[ >+M_O.@#[WH1T_ZTIO^]*A/O>I7S_K6N_[UL(^][&=/^]K;_O:XS[WN=\_[WOO^ >+M]\`/OO"'3_SB&__XR$^^\I?/_.8[__G0C[[TIT_]ZEO_^MC/OO:WS_WN>__[ >+MX`^_^,=/_O*;__SH3[_ZU\_^]KO__?"/O_SG3__ZV__^^,^__O?/__[[__\` >+M&(`".(`$6(`&>(`(F(`*N(`,V(`.^(`0&($2.($46($6>($8F($:N($<V($> >+M^($@&((B.((D6((F>((HF((JN((LV((N^((P&(,R.(,T6(,V>(,XF(,ZN(,\ >+MV(,^^(-`&(1".(1$6(1&>(1(F(1*N(1,V(1.^(10&(52.(546(56>(58F(5: >+MN(5<V(5>^(5@&(9B.(9D6(9F>(9HF(9JN(9LV(9N^(9P&(=R.(=T6(=V>(=X >+MF(=ZN(=\V(=^^(>`&(B".(B$6(B&>(B(F(B*N(B,V(B.^(B0&(F2.(F46(F6 >+M>(F8F(F:N(F<V(F>^(F@&(JB.(JD6(JF>(JHF(JJN(JLV(JN^(JP&(NR.(NT >+M6(NV>(NXF(NZN(N\V(N^^(O`&(S".(S$6(S&>(S(F(S*N(S,V(S.^(S0&(W2 >+M.(W46(W6>(W8F(W:N(W<V(W>^(W@&([B.([D6([F>([HF([JN([LV([N^([P >+M&(_R.(_T6(_V>(_XF(_ZN(_\V(_^^(\`&9`".9`$69`&>9`(F9`*N9`,V9`. >+M^9`0&9$2.9$469$6>9$8F9$:N9$<V9$>^9$@&9(B.9(D69(F>9(HF9(JN9(L >+MV9(N^9(P&9,R.9,T69,V>9,XF9,ZN9,\V9,^^9-`&91".91$691&>91(F91* >+MN91,V91.^910&952.9546956>958F95:N95<V95>^95@&99B.99D699F>99H >+MF99JN99LV99N^99P&9=R.9=T69=V>9=XF9=ZN9=\V9=^^9>`&9B".9B$69B& >+M>9B(F9B*N9B,V9B.^9B0&9F2.9F469F6>9F8F9F:N9F<V9F>^9F@&9JB.9JD >+M69JF>9JHF9JJN9JLV9JN^9JP&9NR.9NT69NV>9NXF9NZN9N\V9N^^9O`&9S" >+M.9S$69S&>9S(F9S*N9S,V9S.^9S0&9W2.9W469W6>9W8F9W:N9W<V9W>^9W@ >+M&9[B.9[D69[F>9[HF9[JN9[LV9[N^9[P&9_R.9_T69_V>9_XF9_ZN9_\V9_^ >+M^9\`&J`".J`$6J`&>J`(FJ`*NJ`,VJ`.^J`0&J$2.J$46J$6>J$8FJ$:NJ$< >+MVJ$>^J$@&J(B.J(D6J(F>J(HFJ(JNJ(LVJ(N^J(P&J,R.J,T6J,V>J,XFJ,Z >+MNJ,\VJ,^^J-`&J1".J1$6J1&>J1(FJ1*NJ1,VJ1.^J10&J52.J546J56>J58 >+MFJ5:NJ5<VJ5>^J5@&J9B.J9D6J9F>J9HFJ9JNJ9LVJ9N^J9P&J=R.J=T6J=V >+M>J=XFJ=ZNJ=\VJ=^^J>`&JB".JB$6JB&>JB(FJB*NJB,VJB.^JB0&JF2.JF4 >+M6JF6>JF8FJF:NJF<VJF>^JF@&JJB.JJD6JJF>JJHFJJJNJJLVJJN^JJP&JNR >+M.JNT6JNV>JNXFJNZNJN\VJN^^JO`&JS".JS$6JS&>JS(FJS*NJS,VJS.^JS0 >+M&JW2.JW46JW6>JW8FJW:NJW<VJW>^JW@&J[B.J[D6J[F>J[HFJ[JNJ[LVJ[N >+M^J[P&J_R.J_T6J_V>J_XFJ_ZNJ_\VJ_^^J\`&[`".[`$6[`&>[`(F[`*N[`, >+MV[`.^[`0&[$2.[$46[$6>[$8F[$:N[$<V[$>^[$@&[(B.[(D6[(F>[(HF[(J >+MN[(LV[(N^[(P&[,R.[,T6[,V>[,XF[,ZN[,\V[,^^[-`&[1".[1$6[1&>[1( >+MF[1*N[1,V[1.^[10&[52.[546[56>[58F[5:N[5<V[5>^[5@&[9B.[9D6[9F >+M>[9HF[9JN[9LV[9N^[9P&[=R.[=T6[=V>[=XF[=ZN[=\V[=^^[>`&[B".[B$ >+M6[B&>[B(F[B*N[B,V[B.^[B0&[F2.[F46[F6>[F8F[F:N[F<V[F>^[F@&[JB >+M.[JD6[JF>[JHF[JJN[JLV[JN^[JP&[NR.[NT6[NV>[NXF[NZN[N\V[N^^[O` >+M&[S".[S$6[S&>[S(F[S*N[S,V[S.^[S0&[W2.[W46[W6>[W8F[W:N[W<V[W> >+M^[W@&[[B.[[D6[[F>[[HF[[JN[[LV[[N^[[P&[_R.[_T6[_V>[_XF[_ZN[_\ >+MV[_^^[\`',`"/,`$7,`&?,`(G,`*O,`,W,`._,`0',$2/,$47,$6?,$8G,$: >+MO,$<W,$>_,$@',(B/,(D7,(F?,(HG,(JO,(LW,(N_,(P',,R/,,T7,,V?,,X >+MG,,ZO,,\W,,^_,-`',1"/,1$7,1&?,1(G,1*O,1,W,1._,10',52/,547,56 >+M?,58G,5:O,5<W,5>_,5@',9B/,9D7,9F?,9HG,9JO,9LW,9N_,9P',=R/,=T >+M7,=V?,=XG,=ZO,=\W,=^_,>`',B"/,B$7,B&?,B(G,B*O,B,W,B._,B0',F2 >+M/,F47,F6?,F8G,F:O,F<W,F>_,F@',JB/,JD7,JF?,JHG,JJO,JLW,JN_,JP >+M',NR/,NT7,NV?,NXG,NZO,N\W,N^_,O`',S"/,S$7,S&?,S(G,S*O,S,W,S. >+M_,S0',W2/,W47,W6?,W8G,W:O,W<W,W>_,W@',[B/,[D7,[F?,[HG,[JO,[L >+MW,[N_,[P',_R/,_T7,_V?,_XG,_ZO,_\W,_^_,\`'=`"/=`$7=`&?=`(G=`* >+MO=`,W=`._=`0'=$2/=$47=$6?=$8G=$:O=$<W=$>_=$@'=(B/=(D7=(F?=(H >+MG=(JO=(LW=(N_=(P'=,R/=,T7=,V?=,XG=,ZO=,\W=,^_=-`'=1"/=1$7=1& >+M?=1(G=1*O=1,W=1._=10'=52/=547=56?=58G=5:O=5<W=5>_=5@'=9B/=9D >+M7=9F?=9HG=9JO=9LW=9N_=9P'==R/==T7==V?==XG==ZO==\W==^_=>`'=B" >+M/=B$7=B&?=B(G=B*O=B,W=B._=B0'=F2/=F47=F6?=F8G=F:O=F<W=F>_=F@ >+M'=JB/=JD7=JF?=JHG=JJO=JLW=JN_=JP'=NR/=NT7=NV?=NXG=NZO=N\W=N^ >+M_=O`'=S"/=S$7=S&?=S(G=S*O=S,W=S._=S0'=W2/=W47=W6?=W8G=W:O=W< >+MW=W>_=W@'=[B/=[D7=[F?=[HG=[JO=[LW=[N_=[P'=_R/=_T7=_V?=_XG=_Z >+MO=_\W=_^_=\`'N`"/N`$7N`&?N`(GN`*ON`,WN`._N`0'N$2/N$47N$6?N$8 >+MGN$:ON$<WN$>_N$@'N(B/N(D7N(F?N(HGN(JON(LWN(N_N(P'N,R/N,T7N,V >+M?N,XGN,ZON,\WN,^_N-`'N1"/N1$7N1&?N1(GN1*ON1,WN1._N10'N52/N54 >+M7N56?N58GN5:ON5<WN5>_N5@'N9B/N9D7N9F?N9HGN9JON9LWN9N_N9P'N=R >+M/N=T7N=V?N=XGN=ZON=\WN=^_N>`'NB"/NB$7NB&?NB(GNB*ONB,WNB._NB0 >+M'NF2/NF47NF6?NF8GNF:ONF<WNF>_NF@'NJB/NJD7NJF?NJHGNJJONJLWNJN >+M_NJP'NNR/NNT7NNV?NNXGNNZONN\WNN^_NO`'NS"/NS$7NS&?NS(GNS*ONS, >+MWNS._NS0'NW2/NW47NW6?NW8GNW:ONW<WNW>_NW@'N[B/N[D7N[F?N[HGN[J >+MON[LWN[N_N[P'N_R/N_T7N_V?N_XGN_ZON_\WN_^_N\`'_`"/_`$7_`&?_`( >+MG_`*O_`,W_`.__`0'_$2/_$47_$6?_$8G_$:O_$<W_$>__$@'_(B/_(D7_(F >+M?_(HG_(JO_(LW_(N__(P'_,R/_,T7_,V?_,XG_,ZO_,\W_,^__-`'_1"/_1$ >+M7_1&?_1(G_1*O_1,W_1.__10'_52/_547_56?_58G_5:O_5<W_5>__5@'_9B >+M/_9D7_9F?_9HG_9JO_9LW_9N__9P'_=R/_=T7_=V?_=XG_=ZO_=\W_=^__>` >+M'_B"/_B$7_B&?_B(G_B*O_B,W_B.__B0'_F2/_F47_F6?_F8G_F:O_F<W_F> >+M__F@'_JB/_JD7_JF?_JHG_JJO_JLW_JN__JP'_NR/_NT7_NV?_NXG_NZO_N\ >+MW_N^__O`'_S"/_S$7_S&?_S(G_S*O_S,W_S.__S0'_W2/_W47_W6?_W8G_W: >+MO_W<W_W>__W@'_[B/_[D7_[F?_[HG_[JO_[LW_[N__[P'__R/__T7__V?__X >+MG__ZO__\W__^__\`,``*P`%(``N@`3R`"#`!*L`%R``;H`-\@!`P`DK`"4@! >+M*Z`%O(`8,`-JP`W(`3N@!_R`(#`$BL`12`)+H`D\@2@P!:K`%<@"6Z`+?($P >+M,`;*P!E(`VN@#;R!.#`'ZL`=R`-[H`_\@4`P"`K!(4@$BZ`1/()(,`DJP27( >+M!)N@$WR"4#`*2L$I2`6KH!6\@E@P"VK!+<@%NZ`7_()@,`R*P3%(!LN@&3R# >+M:#`-JL$UR`;;H!M\@W`P#LK!.4@'ZZ`=O(-X,`_JP3W(!_N@'_R#@#`0"L)! >+M2`@+H2$\A(@P$2K"1<@(&Z$C?(20,!)*PDE("2NA);R$F#`3:L)-R`D[H2?\ >+MA*`P%(K"44@*2Z$I/(6H,!6JPE7("ENA*WR%L#`6RL)92`MKH2V\A;@P%^K" >+M7<@+>Z$O_(7`,!@*PV%(#(NA,3R&R#`9*L-ER`R;H3-\AM`P&DK#:4@-JZ$U >+MO(;8,!MJPVW(#;NA-_R&X#`<BL-Q2`[+H3D\A^@P':K#=<@.VZ$[?(?P,![* >+MPWE(#^NA/;R'^#`?ZL-]R`_[H3_\AP`Q(`K$@4@0"Z)!/(@(,2$JQ(7($!NB >+M0WR($#$B2L2)2!%ID@)8"`TA+6C$C8@11$)'6`D;02C4@+;`$E!"6&`+,@$E >+MBH08T!-@`@UP"40!!G#$F4@3FT)6D`H;@2I8!8UX!]!`&2@#;"`ML(63*!-J >+MHE$\BD@Q*2K%I<@4FZ)3?(I0,2I*Q:E(%:NB5;R*6#$K:L6MR!6[HE?\BF`Q >+M+(K%L4@6RZ)9/(MH,2VJQ;7(%MNB6WR+<#$NRL6Y2!?KHEV\BW@Q+^K%O<@7 >+M^Z)?_(N`,3`*QL%(&`NC83R,B#$Q*L;%R!@;HV-\C)`Q,DK&R4@9*Z-EO(R8 >+),3-JQLW(&0$C >+` >+end >diff --git a/contrib/libarchive/libarchive/test/test_read_format_xar.c b/contrib/libarchive/libarchive/test/test_read_format_xar.c >index daff2921690a..5c306e58522e 100644 >--- a/contrib/libarchive/libarchive/test/test_read_format_xar.c >+++ b/contrib/libarchive/libarchive/test/test_read_format_xar.c >@@ -620,7 +620,7 @@ has the corresponding timestamps unset. > archive_write_set_format_xar(a); > archive_write_add_filter_none(a); > size_t used, buffsize = 1500; >- char *buff = (char*) malloc(buffsize); >+ char *buff = malloc(buffsize); > archive_write_open_memory(a, buff, buffsize, &used); > > struct archive_entry *ae = archive_entry_new(); >@@ -827,7 +827,7 @@ static void verifyB(unsigned char *d, size_t s) { > assertA(0 == archive_read_next_header(a, &entry)); > buf_size = (size_t) archive_entry_size(entry); > assertA(buf_size == 12); >- buf = (unsigned char*) malloc(buf_size); >+ buf = malloc(buf_size); > assertA(NULL != buf); > assertA(buf_size == (size_t) archive_read_data(a, buf, buf_size)); > free(buf); >@@ -836,7 +836,7 @@ static void verifyB(unsigned char *d, size_t s) { > assertA(0 == archive_read_next_header(a, &entry)); > buf_size = (size_t) archive_entry_size(entry); > assertA(buf_size == 12); >- buf = (unsigned char*) malloc(buf_size); >+ buf = malloc(buf_size); > assertA(NULL != buf); > assertA(buf_size == (size_t) archive_read_data(a, buf, buf_size)); > free(buf); >@@ -860,3 +860,34 @@ DEFINE_TEST(test_read_format_xar) > verify(archive12, sizeof(archive12), verify12, NULL, GZIP); > verifyB(archive13, sizeof(archive13)); > } >+ >+DEFINE_TEST(test_read_format_xar_duplicate_filename_node) >+{ >+ static const char *reffiles[] = >+ { >+ "test_read_format_xar_duplicate_filename_node.xar", >+ NULL >+ }; >+ struct archive_entry *ae; >+ struct archive *a; >+ int r; >+ >+ extract_reference_files(reffiles); >+ assert((a = archive_read_new()) != NULL); >+ assertA(0 == archive_read_support_filter_all(a)); >+ >+ r = archive_read_support_format_xar(a); >+ if (r == ARCHIVE_WARN) { >+ skipping("xar reading not fully supported on this platform"); >+ assertEqualInt(ARCHIVE_OK, archive_read_free(a)); >+ return; >+ } >+ >+ assertA(0 == archive_read_open_filenames(a, reffiles, 10240)); >+ >+ assertA(0 == archive_read_next_header(a, &ae)); >+ assertEqualString("File", archive_entry_pathname(ae)); >+ >+ assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a)); >+ assertEqualInt(ARCHIVE_OK, archive_read_free(a)); >+} >diff --git a/contrib/libarchive/libarchive/test/test_read_format_xar_duplicate_filename_node.xar.uu b/contrib/libarchive/libarchive/test/test_read_format_xar_duplicate_filename_node.xar.uu >new file mode 100644 >index 000000000000..18cbcf5898df >--- /dev/null >+++ b/contrib/libarchive/libarchive/test/test_read_format_xar_duplicate_filename_node.xar.uu >@@ -0,0 +1,14 @@ >+begin 644 test_read_format_xar_duplicate_filename_node.xar >+M>&%R(0`<``$````````!EP````````.]`````7B<A5-);H,P%-U7ZAT0>VIC >+MC('((;N<H-UT][$-L<H0@1,E.7T-`0H=TI6?__OSP'>7JG3.JNUT4V]=_P6[ >+MCJI%(W5=;-VWU[T7N[OT^8E?H+6/XW#3B`%8*%H%QMIY1E<J)9A0#S//IZ\$ >+M;PC=^(RCM<ID=U#BHSM53F>NI=JZW0%\=R0MW>1YITR*.1K1S'3ZUL?A:`"C >+M-S2YFP2Y+I6CI:UFX;0&&W]O&8X&^#]AKD>5Y@,QP)G0=2-M&E'"DIBC^V\F >+MI3IKH>HF]0-&68!]PM$LF[6JW@8S9CM4K<Q/6O:%]\\L*^ZR8BD3O[<<)^^V >+M'XM>][$>J%9K57B@"FM5"0;FG_V7JB[,(?5MHB-<D.,<R<^1SD-=S7203VLX >+M;0D<CZ46PS:ABU?<]-%UT-(`6G'09R6]W_<KIG$LJ9\%"6!)"&80R#`)<"!R >+M'(DL)T`CH2384K\[6J5U,2T(\V>8#&+(0L`DQED2!@!)1(,PS^.$,I&)+"-1 >+M&`*)./KIZ:N]:-%?COHMO%\?NI\?1_T]?@(L`P/8\;44V2:R;"\D48GC?CRL >+C(UAG)C5XG./E`@``)@`8>)R%4TEN@S`4W5?J'1![:F.,@<@` >+` >+end >diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_nested.c b/contrib/libarchive/libarchive/test/test_read_format_zip_nested.c >index 95945638b074..b32e4bb94211 100644 >--- a/contrib/libarchive/libarchive/test/test_read_format_zip_nested.c >+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_nested.c >@@ -49,7 +49,7 @@ DEFINE_TEST(test_read_format_zip_nested) > > /* Save contents of inner Zip. */ > innerLength = (size_t)archive_entry_size(ae); >- inner = calloc(innerLength, sizeof(char)); >+ inner = calloc(innerLength, sizeof(*inner)); > assertEqualInt(innerLength, archive_read_data(a, inner, innerLength)); > > assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); >diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_traditional_encryption_data.c b/contrib/libarchive/libarchive/test/test_read_format_zip_traditional_encryption_data.c >index 8f0cfe6dc896..0cf2d0a1576d 100644 >--- a/contrib/libarchive/libarchive/test/test_read_format_zip_traditional_encryption_data.c >+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_traditional_encryption_data.c >@@ -41,7 +41,7 @@ DEFINE_TEST(test_read_format_zip_traditional_encryption_data) > assertEqualIntA(a, ARCHIVE_OK, archive_write_add_filter_none(a)); > if (ARCHIVE_OK != archive_write_set_options(a, > "zip:encryption=traditional")) { >- skipping("This system does not have cryptographic liberary"); >+ skipping("This system does not have cryptographic library"); > archive_write_free(a); > return; > } >diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes.c b/contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes.c >index 7c5d5ea61f77..9b609b4f29ff 100644 >--- a/contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes.c >+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes.c >@@ -38,7 +38,7 @@ test_winzip_aes(const char *refname, int need_libz) > assertEqualIntA(a, ARCHIVE_OK, archive_write_add_filter_none(a)); > if (ARCHIVE_OK != archive_write_set_options(a, > "zip:encryption=aes256")) { >- skipping("This system does not have cryptographic liberary"); >+ skipping("This system does not have cryptographic library"); > archive_write_free(a); > return; > } >diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes_large.c b/contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes_large.c >index 4b6202bde164..4f52bb911147 100644 >--- a/contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes_large.c >+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes_large.c >@@ -39,7 +39,7 @@ DEFINE_TEST(test_read_format_zip_winzip_aes256_large) > assertEqualIntA(a, ARCHIVE_OK, archive_write_add_filter_none(a)); > if (ARCHIVE_OK != archive_write_set_options(a, > "zip:encryption=aes256")) { >- skipping("This system does not have cryptographic liberary"); >+ skipping("This system does not have cryptographic library"); > archive_write_free(a); > return; > } >diff --git a/contrib/libarchive/libarchive/test/test_read_truncated_filter.c b/contrib/libarchive/libarchive/test/test_read_truncated_filter.c >index 9c5348d935d2..fc8ddf51b73b 100644 >--- a/contrib/libarchive/libarchive/test/test_read_truncated_filter.c >+++ b/contrib/libarchive/libarchive/test/test_read_truncated_filter.c >@@ -43,12 +43,12 @@ test_truncation(const char *compression, > int i, r, use_prog; > > buffsize = 2000000; >- assert(NULL != (buff = (char *)malloc(buffsize))); >+ assert(NULL != (buff = malloc(buffsize))); > if (buff == NULL) > return; > > datasize = 10000; >- assert(NULL != (data = (char *)malloc(datasize))); >+ assert(NULL != (data = malloc(datasize))); > if (data == NULL) { > free(buff); > return; >diff --git a/contrib/libarchive/libarchive/test/test_sparse_basic.c b/contrib/libarchive/libarchive/test/test_sparse_basic.c >index 0350df1e9f27..963d5e8beeaf 100644 >--- a/contrib/libarchive/libarchive/test/test_sparse_basic.c >+++ b/contrib/libarchive/libarchive/test/test_sparse_basic.c >@@ -67,13 +67,16 @@ struct sparse { > > static void create_sparse_file(const char *, const struct sparse *); > >-#if defined(__APPLE__) >-/* On APFS holes need to be at least 4096x4097 bytes */ >-#define MIN_HOLE 16781312 >-#else >-/* Elsewhere we work with 4096*10 bytes */ >-#define MIN_HOLE 409600 >-#endif >+/* This should be large enough that any OS/filesystem that >+ * does support sparse files is certain to store a gap this big >+ * as a hole. */ >+/* A few data points: >+ * = ZFS on FreeBSD needs this to be at least 200kB >+ * = macOS APFS needs this to be at least 4096x4097 bytes >+ * >+ * 32MiB here is bigger than either of the above. >+ */ >+#define MIN_HOLE (32 * 1024UL * 1024UL) > > #if defined(_WIN32) && !defined(__CYGWIN__) > #include <winioctl.h> >diff --git a/contrib/libarchive/libarchive/test/test_tar_large.c b/contrib/libarchive/libarchive/test/test_tar_large.c >index 7ff3fee17717..c1f379162ad7 100644 >--- a/contrib/libarchive/libarchive/test/test_tar_large.c >+++ b/contrib/libarchive/libarchive/test/test_tar_large.c >@@ -99,7 +99,7 @@ memory_write(struct archive *a, void *_private, const void *buff, size_t size) > } else { > /* Yes, we're assuming the very first write is metadata. */ > /* It's header or metadata, copy and save it. */ >- block = (struct memblock *)malloc(sizeof(*block)); >+ block = malloc(sizeof(*block)); > memset(block, 0, sizeof(*block)); > block->size = size; > block->buff = malloc(size); >diff --git a/contrib/libarchive/libarchive/test/test_ustar_filename_encoding.c b/contrib/libarchive/libarchive/test/test_ustar_filename_encoding.c >index cc62453f1c1b..1242bd1d3cd2 100644 >--- a/contrib/libarchive/libarchive/test/test_ustar_filename_encoding.c >+++ b/contrib/libarchive/libarchive/test/test_ustar_filename_encoding.c >@@ -390,3 +390,105 @@ DEFINE_TEST(test_ustar_filename_encoding_CP932_UTF8) > assertEqualMem(buff, "\xE8\xA1\xA8.txt", 7); > } > >+DEFINE_TEST(test_ustar_filename_encoding_UTF16_win) >+{ >+#if !defined(_WIN32) || defined(__CYGWIN__) >+ skipping("This test is meant to verify unicode string handling" >+ " on Windows with UTF-16 names"); >+ return; >+#else >+ struct archive *a; >+ struct archive_entry *entry; >+ char buff[4096]; >+ size_t used; >+ >+ /* >+ * Don't call setlocale because we're verifying that the '_w' functions >+ * work as expected when 'hdrcharset' is UTF-8 >+ */ >+ >+ /* Part 1: file */ >+ a = archive_write_new(); >+ assertEqualInt(ARCHIVE_OK, archive_write_set_format_ustar(a)); >+ if (archive_write_set_options(a, "hdrcharset=UTF-8") != ARCHIVE_OK) { >+ skipping("This system cannot convert character-set" >+ " from UTF-16 to UTF-8."); >+ archive_write_free(a); >+ return; >+ } >+ assertEqualInt(ARCHIVE_OK, >+ archive_write_open_memory(a, buff, sizeof(buff), &used)); >+ >+ entry = archive_entry_new2(a); >+ /* Set the filename using a UTF-16 string */ >+ archive_entry_copy_pathname_w(entry, L"\u8868.txt"); >+ archive_entry_set_filetype(entry, AE_IFREG); >+ archive_entry_set_size(entry, 0); >+ assertEqualInt(ARCHIVE_OK, archive_write_header(a, entry)); >+ archive_entry_free(entry); >+ assertEqualInt(ARCHIVE_OK, archive_write_free(a)); >+ >+ /* Check UTF-8 version. */ >+ assertEqualMem(buff, "\xE8\xA1\xA8.txt", 7); >+ >+ /* Part 2: directory */ >+ a = archive_write_new(); >+ assertEqualInt(ARCHIVE_OK, archive_write_set_format_ustar(a)); >+ assertEqualInt(ARCHIVE_OK, archive_write_set_options(a, "hdrcharset=UTF-8")); >+ assertEqualInt(ARCHIVE_OK, >+ archive_write_open_memory(a, buff, sizeof(buff), &used)); >+ >+ entry = archive_entry_new2(a); >+ /* Set the directory name using a UTF-16 string */ >+ /* NOTE: Explicitly not adding trailing slash to test that code path */ >+ archive_entry_copy_pathname_w(entry, L"\u8868"); >+ archive_entry_set_filetype(entry, AE_IFDIR); >+ archive_entry_set_size(entry, 0); >+ assertEqualInt(ARCHIVE_OK, archive_write_header(a, entry)); >+ archive_entry_free(entry); >+ assertEqualInt(ARCHIVE_OK, archive_write_free(a)); >+ >+ /* Check UTF-8 version. */ >+ assertEqualMem(buff, "\xE8\xA1\xA8/", 4); >+ >+ /* Part 3: symlink */ >+ a = archive_write_new(); >+ assertEqualInt(ARCHIVE_OK, archive_write_set_format_ustar(a)); >+ assertEqualInt(ARCHIVE_OK, archive_write_set_options(a, "hdrcharset=UTF-8")); >+ assertEqualInt(ARCHIVE_OK, >+ archive_write_open_memory(a, buff, sizeof(buff), &used)); >+ >+ entry = archive_entry_new2(a); >+ /* Set the symlink target using a UTF-16 string */ >+ archive_entry_set_pathname(entry, "link.txt"); >+ archive_entry_copy_symlink_w(entry, L"\u8868.txt"); >+ archive_entry_set_filetype(entry, AE_IFLNK); >+ archive_entry_set_symlink_type(entry, AE_SYMLINK_TYPE_FILE); >+ archive_entry_set_size(entry, 0); >+ assertEqualInt(ARCHIVE_OK, archive_write_header(a, entry)); >+ archive_entry_free(entry); >+ assertEqualInt(ARCHIVE_OK, archive_write_free(a)); >+ >+ /* Check UTF-8 version. */ >+ assertEqualMem(buff + 157, "\xE8\xA1\xA8.txt", 7); >+ >+ /* Part 4: hardlink */ >+ a = archive_write_new(); >+ assertEqualInt(ARCHIVE_OK, archive_write_set_format_ustar(a)); >+ assertEqualInt(ARCHIVE_OK, archive_write_set_options(a, "hdrcharset=UTF-8")); >+ assertEqualInt(ARCHIVE_OK, >+ archive_write_open_memory(a, buff, sizeof(buff), &used)); >+ >+ entry = archive_entry_new2(a); >+ /* Set the symlink target using a UTF-16 string */ >+ archive_entry_set_pathname(entry, "link.txt"); >+ archive_entry_copy_hardlink_w(entry, L"\u8868.txt"); >+ archive_entry_set_size(entry, 0); >+ assertEqualInt(ARCHIVE_OK, archive_write_header(a, entry)); >+ archive_entry_free(entry); >+ assertEqualInt(ARCHIVE_OK, archive_write_free(a)); >+ >+ /* Check UTF-8 version. */ >+ assertEqualMem(buff + 157, "\xE8\xA1\xA8.txt", 7); >+#endif >+} >diff --git a/contrib/libarchive/libarchive/test/test_write_disk_secure_noabsolutepaths.c b/contrib/libarchive/libarchive/test/test_write_disk_secure_noabsolutepaths.c >new file mode 100644 >index 000000000000..df244727fe44 >--- /dev/null >+++ b/contrib/libarchive/libarchive/test/test_write_disk_secure_noabsolutepaths.c >@@ -0,0 +1,88 @@ >+/*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * >+ * Copyright (c) 2024 Mostyn Bramley-Moore <mostyn@antipode.se> >+ */ >+ >+#include "test.h" >+ >+#include <stdlib.h> >+ >+#if defined(_WIN32) && !defined(__CYGWIN__) >+#define UNLINK _unlink >+#else >+#include <unistd.h> >+#define UNLINK unlink >+#endif >+ >+/* >+ * Exercise security checks that should prevent writing absolute paths >+ * when extracting archives. >+ */ >+DEFINE_TEST(test_write_disk_secure_noabsolutepaths) >+{ >+ struct archive *a, *ad; >+ struct archive_entry *ae; >+ >+ char buff[10000]; >+ >+ size_t used; >+ >+ // Create an archive_write object. >+ assert((a = archive_write_new()) != NULL); >+ assertEqualIntA(a, ARCHIVE_OK, archive_write_set_format_ustar(a)); >+ assertEqualIntA(a, ARCHIVE_OK, archive_write_add_filter_none(a)); >+ assertEqualIntA(a, ARCHIVE_OK, archive_write_open_memory(a, buff, sizeof(buff), &used)); >+ >+ // Create an absolute path for a test file inside testworkdir. >+ char *entry_suffix = "/badfile"; >+ size_t entry_suffix_length = strlen(entry_suffix); >+ size_t testworkdir_length = strlen(testworkdir); >+ size_t temp_absolute_file_name_length = testworkdir_length + entry_suffix_length; >+ char *temp_absolute_file_name = calloc(1, temp_absolute_file_name_length + 1); // +1 for null character. >+ assertEqualInt(snprintf(temp_absolute_file_name, temp_absolute_file_name_length + 1, "%s%s", testworkdir, entry_suffix), >+ temp_absolute_file_name_length); >+ >+ // Convert to a unix-style path, so we can compare it to the entry >+ // path when reading back the archive. >+ for (char *p = temp_absolute_file_name; *p != '\0'; p++) >+ if (*p == '\\') *p = '/'; >+ >+ // Add a regular file entry with an absolute path. >+ assert((ae = archive_entry_new()) != NULL); >+ archive_entry_copy_pathname(ae, temp_absolute_file_name); >+ archive_entry_set_mode(ae, S_IFREG | 0777); >+ archive_entry_set_size(ae, 6); >+ assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae)); >+ archive_entry_free(ae); >+ assertEqualInt(6, archive_write_data(a, "hello", 6)); >+ assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a)); >+ assertEqualInt(ARCHIVE_OK, archive_write_free(a)); >+ >+ // Now try to extract the data. >+ assert((a = archive_read_new()) != NULL); >+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); >+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); >+ assertEqualIntA(a, ARCHIVE_OK, archive_read_open_memory(a, buff, used)); >+ >+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); >+ assertEqualString(temp_absolute_file_name, archive_entry_pathname(ae)); >+ assertEqualInt(AE_IFREG, archive_entry_filetype(ae)); >+ assertEqualInt(AE_IFREG | 0777, archive_entry_mode(ae)); >+ assertEqualInt(6, archive_entry_size(ae)); >+ >+ // This should succeed. >+ assertEqualInt(ARCHIVE_OK, archive_read_extract(a, ae, 0)); >+ UNLINK(temp_absolute_file_name); >+ >+ // This should fail, since the archive entry has an absolute path. >+ assert(ARCHIVE_OK != archive_read_extract(a, ae, ARCHIVE_EXTRACT_SECURE_NOABSOLUTEPATHS)); >+ >+ // This should also fail. >+ assert((ad = archive_write_new()) != NULL); >+ assertEqualInt(ARCHIVE_OK, archive_write_disk_set_options(a, ARCHIVE_EXTRACT_SECURE_NOABSOLUTEPATHS)); >+ assert(ARCHIVE_OK != archive_read_extract2(a, ae, ad)); >+ >+ assertEqualInt(ARCHIVE_OK, archive_write_free(ad)); >+ assertEqualInt(ARCHIVE_OK, archive_read_free(a)); >+} >diff --git a/contrib/libarchive/libarchive/test/test_write_filter_b64encode.c b/contrib/libarchive/libarchive/test/test_write_filter_b64encode.c >index e33ff8a9817c..d7c4763b1cdc 100644 >--- a/contrib/libarchive/libarchive/test/test_write_filter_b64encode.c >+++ b/contrib/libarchive/libarchive/test/test_write_filter_b64encode.c >@@ -41,10 +41,10 @@ DEFINE_TEST(test_write_filter_b64encode) > int i; > > buffsize = 2000000; >- assert(NULL != (buff = (char *)malloc(buffsize))); >+ assert(NULL != (buff = malloc(buffsize))); > > datasize = 10000; >- assert(NULL != (data = (char *)malloc(datasize))); >+ assert(NULL != (data = malloc(datasize))); > memset(data, 0, datasize); > > /* >diff --git a/contrib/libarchive/libarchive/test/test_write_filter_bzip2.c b/contrib/libarchive/libarchive/test/test_write_filter_bzip2.c >index f48bcc213231..20ca0d9a7b22 100644 >--- a/contrib/libarchive/libarchive/test/test_write_filter_bzip2.c >+++ b/contrib/libarchive/libarchive/test/test_write_filter_bzip2.c >@@ -43,12 +43,12 @@ DEFINE_TEST(test_write_filter_bzip2) > int i, r, use_prog; > > buffsize = 2000000; >- assert(NULL != (buff = (char *)malloc(buffsize))); >+ assert(NULL != (buff = malloc(buffsize))); > if (buff == NULL) > return; > > datasize = 10000; >- assert(NULL != (data = (char *)malloc(datasize))); >+ assert(NULL != (data = malloc(datasize))); > if (data == NULL) { > free(buff); > return; >diff --git a/contrib/libarchive/libarchive/test/test_write_filter_compress.c b/contrib/libarchive/libarchive/test/test_write_filter_compress.c >index f7b9565b7db2..6a0c022c48e1 100644 >--- a/contrib/libarchive/libarchive/test/test_write_filter_compress.c >+++ b/contrib/libarchive/libarchive/test/test_write_filter_compress.c >@@ -43,10 +43,10 @@ DEFINE_TEST(test_write_filter_compress) > int i; > > buffsize = 1000000; >- assert(NULL != (buff = (char *)malloc(buffsize))); >+ assert(NULL != (buff = malloc(buffsize))); > > datasize = 10000; >- assert(NULL != (data = (char *)malloc(datasize))); >+ assert(NULL != (data = malloc(datasize))); > memset(data, 0, datasize); > > assert((a = archive_write_new()) != NULL); >diff --git a/contrib/libarchive/libarchive/test/test_write_filter_gzip.c b/contrib/libarchive/libarchive/test/test_write_filter_gzip.c >index ae81a4fc59d6..14b14ecdd105 100644 >--- a/contrib/libarchive/libarchive/test/test_write_filter_gzip.c >+++ b/contrib/libarchive/libarchive/test/test_write_filter_gzip.c >@@ -44,12 +44,12 @@ DEFINE_TEST(test_write_filter_gzip) > int i, r, use_prog = 0; > > buffsize = 2000000; >- assert(NULL != (buff = (char *)malloc(buffsize))); >+ assert(NULL != (buff = malloc(buffsize))); > if (buff == NULL) > return; > > datasize = 10000; >- assert(NULL != (data = (char *)malloc(datasize))); >+ assert(NULL != (data = malloc(datasize))); > if (data == NULL) { > free(buff); > return; >diff --git a/contrib/libarchive/libarchive/test/test_write_filter_gzip_timestamp.c b/contrib/libarchive/libarchive/test/test_write_filter_gzip_timestamp.c >index ee29f034231c..a148f818dcec 100644 >--- a/contrib/libarchive/libarchive/test/test_write_filter_gzip_timestamp.c >+++ b/contrib/libarchive/libarchive/test/test_write_filter_gzip_timestamp.c >@@ -37,12 +37,12 @@ DEFINE_TEST(test_write_filter_gzip_timestamp) > int r, use_prog = 0; > > buffsize = 10000; >- assert(NULL != (buff = (char *)malloc(buffsize))); >+ assert(NULL != (buff = malloc(buffsize))); > if (buff == NULL) > return; > > datasize = 10000; >- assert(NULL != (data = (char *)malloc(datasize))); >+ assert(NULL != (data = malloc(datasize))); > if (data == NULL) { > free(buff); > return; >diff --git a/contrib/libarchive/libarchive/test/test_write_filter_lrzip.c b/contrib/libarchive/libarchive/test/test_write_filter_lrzip.c >index 2efc2ec284a4..8da7ae39af5d 100644 >--- a/contrib/libarchive/libarchive/test/test_write_filter_lrzip.c >+++ b/contrib/libarchive/libarchive/test/test_write_filter_lrzip.c >@@ -46,10 +46,10 @@ DEFINE_TEST(test_write_filter_lrzip) > } > > buffsize = 2000000; >- assert(NULL != (buff = (char *)malloc(buffsize))); >+ assert(NULL != (buff = malloc(buffsize))); > > datasize = 10000; >- assert(NULL != (data = (char *)malloc(datasize))); >+ assert(NULL != (data = malloc(datasize))); > memset(data, 0, datasize); > > /* >diff --git a/contrib/libarchive/libarchive/test/test_write_filter_lz4.c b/contrib/libarchive/libarchive/test/test_write_filter_lz4.c >index 97a80321dede..74a910b53530 100644 >--- a/contrib/libarchive/libarchive/test/test_write_filter_lz4.c >+++ b/contrib/libarchive/libarchive/test/test_write_filter_lz4.c >@@ -58,10 +58,10 @@ DEFINE_TEST(test_write_filter_lz4) > assertEqualInt(ARCHIVE_OK, archive_write_free(a)); > > buffsize = 2000000; >- assert(NULL != (buff = (char *)malloc(buffsize))); >+ assert(NULL != (buff = malloc(buffsize))); > > datasize = 10000; >- assert(NULL != (data = (char *)calloc(datasize, 1))); >+ assert(NULL != (data = calloc(datasize, 1))); > filecount = 10; > > /* >@@ -302,10 +302,10 @@ test_options(const char *options) > assertEqualInt(ARCHIVE_OK, archive_write_free(a)); > > buffsize = 2000000; >- assert(NULL != (buff = (char *)malloc(buffsize))); >+ assert(NULL != (buff = malloc(buffsize))); > > datasize = 10000; >- assert(NULL != (data = (char *)calloc(datasize, 1))); >+ assert(NULL != (data = calloc(datasize, 1))); > filecount = 10; > > /* >diff --git a/contrib/libarchive/libarchive/test/test_write_filter_lzip.c b/contrib/libarchive/libarchive/test/test_write_filter_lzip.c >index 8d6544668980..631fd96bd5ce 100644 >--- a/contrib/libarchive/libarchive/test/test_write_filter_lzip.c >+++ b/contrib/libarchive/libarchive/test/test_write_filter_lzip.c >@@ -43,12 +43,12 @@ DEFINE_TEST(test_write_filter_lzip) > int i, r; > > buffsize = 2000000; >- assert(NULL != (buff = (char *)malloc(buffsize))); >+ assert(NULL != (buff = malloc(buffsize))); > if (buff == NULL) > return; > > datasize = 10000; >- assert(NULL != (data = (char *)malloc(datasize))); >+ assert(NULL != (data = malloc(datasize))); > if (data == NULL) { > free(buff); > return; >diff --git a/contrib/libarchive/libarchive/test/test_write_filter_lzma.c b/contrib/libarchive/libarchive/test/test_write_filter_lzma.c >index d7c0c5b21b6b..9bb2d8eb7943 100644 >--- a/contrib/libarchive/libarchive/test/test_write_filter_lzma.c >+++ b/contrib/libarchive/libarchive/test/test_write_filter_lzma.c >@@ -42,12 +42,12 @@ DEFINE_TEST(test_write_filter_lzma) > int i, r; > > buffsize = 2000000; >- assert(NULL != (buff = (char *)malloc(buffsize))); >+ assert(NULL != (buff = malloc(buffsize))); > if (buff == NULL) > return; > > datasize = 10000; >- assert(NULL != (data = (char *)malloc(datasize))); >+ assert(NULL != (data = malloc(datasize))); > if (data == NULL) { > free(buff); > return; >diff --git a/contrib/libarchive/libarchive/test/test_write_filter_lzop.c b/contrib/libarchive/libarchive/test/test_write_filter_lzop.c >index 87843f49bd3b..8b74d224dced 100644 >--- a/contrib/libarchive/libarchive/test/test_write_filter_lzop.c >+++ b/contrib/libarchive/libarchive/test/test_write_filter_lzop.c >@@ -52,10 +52,10 @@ DEFINE_TEST(test_write_filter_lzop) > } > > buffsize = 2000000; >- assert(NULL != (buff = (char *)malloc(buffsize))); >+ assert(NULL != (buff = malloc(buffsize))); > > datasize = 10000; >- assert(NULL != (data = (char *)calloc(datasize, 1))); >+ assert(NULL != (data = calloc(datasize, 1))); > filecount = 10; > > /* >diff --git a/contrib/libarchive/libarchive/test/test_write_filter_uuencode.c b/contrib/libarchive/libarchive/test/test_write_filter_uuencode.c >index 7eda278b35cd..fbd0520880fe 100644 >--- a/contrib/libarchive/libarchive/test/test_write_filter_uuencode.c >+++ b/contrib/libarchive/libarchive/test/test_write_filter_uuencode.c >@@ -41,10 +41,10 @@ DEFINE_TEST(test_write_filter_uuencode) > int i; > > buffsize = 2000000; >- assert(NULL != (buff = (char *)malloc(buffsize))); >+ assert(NULL != (buff = malloc(buffsize))); > > datasize = 10000; >- assert(NULL != (data = (char *)malloc(datasize))); >+ assert(NULL != (data = malloc(datasize))); > memset(data, 0, datasize); > > /* >diff --git a/contrib/libarchive/libarchive/test/test_write_filter_xz.c b/contrib/libarchive/libarchive/test/test_write_filter_xz.c >index db4e5dafa274..6baa0473b8e2 100644 >--- a/contrib/libarchive/libarchive/test/test_write_filter_xz.c >+++ b/contrib/libarchive/libarchive/test/test_write_filter_xz.c >@@ -43,12 +43,12 @@ DEFINE_TEST(test_write_filter_xz) > int i, r; > > buffsize = 2000000; >- assert(NULL != (buff = (char *)malloc(buffsize))); >+ assert(NULL != (buff = malloc(buffsize))); > if (buff == NULL) > return; > > datasize = 10000; >- assert(NULL != (data = (char *)malloc(datasize))); >+ assert(NULL != (data = malloc(datasize))); > if (data == NULL) { > free(buff); > return; >diff --git a/contrib/libarchive/libarchive/test/test_write_filter_zstd.c b/contrib/libarchive/libarchive/test/test_write_filter_zstd.c >index da711f9e4bf9..41451ca86251 100644 >--- a/contrib/libarchive/libarchive/test/test_write_filter_zstd.c >+++ b/contrib/libarchive/libarchive/test/test_write_filter_zstd.c >@@ -37,12 +37,12 @@ DEFINE_TEST(test_write_filter_zstd) > int i, r; > > buffsize = 2000000; >- assert(NULL != (buff = (char *)malloc(buffsize))); >+ assert(NULL != (buff = malloc(buffsize))); > if (buff == NULL) > return; > > datasize = 10000; >- assert(NULL != (data = (char *)malloc(datasize))); >+ assert(NULL != (data = malloc(datasize))); > if (data == NULL) { > free(buff); > return; >@@ -230,12 +230,8 @@ DEFINE_TEST(test_write_filter_zstd) > archive_write_set_filter_option(a, NULL, "max-frame-out", "1GB")); > #endif > #if ZSTD_VERSION_NUMBER >= MINVER_LONG >- if ((int)(sizeof(size_t) == 4)) >- assertEqualIntA(a, ARCHIVE_OK, >- archive_write_set_filter_option(a, NULL, "long", "26")); >- else >- assertEqualIntA(a, ARCHIVE_OK, >- archive_write_set_filter_option(a, NULL, "long", "27")); >+ assertEqualIntA(a, ARCHIVE_OK, >+ archive_write_set_filter_option(a, NULL, "long", "23")); > assertEqualIntA(a, ARCHIVE_FAILED, > archive_write_set_filter_option(a, NULL, "long", "-1")); /* negative */ > #endif >diff --git a/contrib/libarchive/libarchive/test/test_write_format_iso9660_filename.c b/contrib/libarchive/libarchive/test/test_write_format_iso9660_filename.c >index 713883bdc8cb..ca617c3a94d8 100644 >--- a/contrib/libarchive/libarchive/test/test_write_format_iso9660_filename.c >+++ b/contrib/libarchive/libarchive/test/test_write_format_iso9660_filename.c >@@ -321,7 +321,7 @@ DEFINE_TEST(test_write_format_iso9660_filename) > */ > fcnt = create_iso_image(buff, buffsize, &used, NULL); > >- fns.names = (char **)malloc(sizeof(char *) * fcnt); >+ fns.names = malloc(sizeof(char *) * fcnt); > assert(fns.names != NULL); > if (fns.names == NULL) { > free(buff); >diff --git a/contrib/libarchive/libarchive/test/test_write_format_zip.c b/contrib/libarchive/libarchive/test/test_write_format_zip.c >index 54240eeb7afe..583c78c3ace4 100644 >--- a/contrib/libarchive/libarchive/test/test_write_format_zip.c >+++ b/contrib/libarchive/libarchive/test/test_write_format_zip.c >@@ -699,7 +699,7 @@ DEFINE_TEST(test_write_format_zip_traditional_pkware_encryption) > assertEqualIntA(a, ARCHIVE_OK, archive_write_add_filter_none(a)); > if (ARCHIVE_OK != archive_write_set_options(a, > "zip:encryption=zipcrypt")) { >- skipping("This system does not have cryptographic liberary"); >+ skipping("This system does not have cryptographic library"); > archive_write_free(a); > free(buff); > return; >@@ -779,7 +779,7 @@ DEFINE_TEST(test_write_format_zip_winzip_aes128_encryption) > assertEqualIntA(a, ARCHIVE_OK, archive_write_add_filter_none(a)); > if (ARCHIVE_OK != archive_write_set_options(a, "zip:encryption=aes128")) > { >- skipping("This system does not have cryptographic liberary"); >+ skipping("This system does not have cryptographic library"); > archive_write_free(a); > free(buff); > return; >@@ -859,7 +859,7 @@ DEFINE_TEST(test_write_format_zip_winzip_aes256_encryption) > assertEqualIntA(a, ARCHIVE_OK, archive_write_add_filter_none(a)); > if (ARCHIVE_OK != archive_write_set_options(a, "zip:encryption=aes256")) > { >- skipping("This system does not have cryptographic liberary"); >+ skipping("This system does not have cryptographic library"); > archive_write_free(a); > free(buff); > return; >diff --git a/contrib/libarchive/libarchive/test/test_write_format_zip_entry_size_unset.c b/contrib/libarchive/libarchive/test/test_write_format_zip_entry_size_unset.c >index 10c191f7ce7d..fe69478160d5 100644 >--- a/contrib/libarchive/libarchive/test/test_write_format_zip_entry_size_unset.c >+++ b/contrib/libarchive/libarchive/test/test_write_format_zip_entry_size_unset.c >@@ -205,7 +205,7 @@ static void verify_contents(const char *zip_buff, size_t size) > assertEqualInt(i4(data_descriptor + 4), crc); > /* Check compressed size */ > assertEqualInt(i4(data_descriptor + 8), sizeof(file_data1) + sizeof(file_data2)); >- /* Chcek uncompresed size */ >+ /* Check uncompressed size */ > assertEqualInt(i4(data_descriptor + 12), sizeof(file_data1) + sizeof(file_data2)); > > /* Get folder entry in central directory */ >diff --git a/contrib/libarchive/libarchive/test/test_write_format_zip_large.c b/contrib/libarchive/libarchive/test/test_write_format_zip_large.c >index 90bd16aaa581..d08dae46d807 100644 >--- a/contrib/libarchive/libarchive/test/test_write_format_zip_large.c >+++ b/contrib/libarchive/libarchive/test/test_write_format_zip_large.c >@@ -96,7 +96,7 @@ memory_write(struct archive *a, void *_private, const void *buff, size_t size) > } else { > /* Yes, we're assuming the very first write is metadata. */ > /* It's header or metadata, copy and save it. */ >- block = (struct fileblock *)malloc(sizeof(*block)); >+ block = malloc(sizeof(*block)); > memset(block, 0, sizeof(*block)); > block->size = (int)size; > block->buff = malloc(size); >diff --git a/contrib/libarchive/libarchive/test/test_write_format_zip_stream.c b/contrib/libarchive/libarchive/test/test_write_format_zip_stream.c >index aff6a31ae171..78bda6c27702 100644 >--- a/contrib/libarchive/libarchive/test/test_write_format_zip_stream.c >+++ b/contrib/libarchive/libarchive/test/test_write_format_zip_stream.c >@@ -71,7 +71,11 @@ DEFINE_TEST(test_write_format_zip_stream) > unsigned long crc; > unsigned long compressed_size = 0; > int file_perm = 00644; >+#ifdef HAVE_ZLIB_H > int zip_version = 20; >+#else >+ int zip_version = 10; >+#endif > int zip_compression = 8; > short file_uid = 10, file_gid = 20; > unsigned char *buff, *buffend, *p; >@@ -82,6 +86,7 @@ DEFINE_TEST(test_write_format_zip_stream) > const char *file_name = "file"; > > #ifndef HAVE_ZLIB_H >+ zip_version = 10; > zip_compression = 0; > #endif > >diff --git a/contrib/libarchive/libarchive/test/test_write_format_zip_windows_path.c b/contrib/libarchive/libarchive/test/test_write_format_zip_windows_path.c >new file mode 100644 >index 000000000000..c8be48293638 >--- /dev/null >+++ b/contrib/libarchive/libarchive/test/test_write_format_zip_windows_path.c >@@ -0,0 +1,100 @@ >+/*- >+ * Copyright (c) 2024 Yang Zhou >+ * All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer >+ * in this position and unchanged. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+ >+#include "test.h" >+ >+static void >+test_with_hdrcharset(const char *charset) >+{ >+ static const char *raw_path = "dir_stored\\dir1/file"; >+ static const char *replaced = "dir_stored/dir1/file"; >+ struct archive *a; >+ size_t used; >+ size_t buffsize = 1000000; >+ char *buff; >+ >+ buff = malloc(buffsize); >+ >+ /* Create a new archive in memory. */ >+ assert((a = archive_write_new()) != NULL); >+ assertEqualIntA(a, ARCHIVE_OK, archive_write_set_format_zip(a)); >+ assertEqualIntA(a, ARCHIVE_OK, archive_write_add_filter_none(a)); >+ if (charset != NULL) { >+ assertEqualIntA(a, ARCHIVE_OK, archive_write_set_format_option(a, "zip", "hdrcharset", charset)); >+ } >+ assertEqualIntA(a, ARCHIVE_OK, archive_write_open_memory(a, buff, buffsize, &used)); >+ >+ /* >+ * Write a file with mixed '/' and '\' >+ */ >+ struct archive_entry *ae; >+ assert((ae = archive_entry_new()) != NULL); >+ archive_entry_set_mtime(ae, 1, 10); >+ archive_entry_copy_pathname(ae, raw_path); >+ archive_entry_set_mode(ae, AE_IFREG | 0755); >+ archive_entry_set_size(ae, 0); >+ assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae)); >+ archive_entry_free(ae); >+ >+ assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a)); >+ assertEqualIntA(a, ARCHIVE_OK, archive_write_free(a)); >+ dumpfile("constructed.zip", buff, used); >+ >+ /* >+ * Check if the generated archive contains and only contains expected path. >+ * Intentionally avoid using `archive_read_XXX` functions because it silently replaces '\' with '/', >+ * making it difficult to get the exact path written in the archive. >+ */ >+#if defined(_WIN32) && !defined(__CYGWIN__) >+ const char *expected = replaced; >+ const char *unexpected = raw_path; >+#else >+ const char *expected = raw_path; >+ const char *unexpected = replaced; >+#endif >+ int expected_found = 0; >+ int unexpected_found = 0; >+ size_t len = strlen(raw_path); >+ for (char *ptr = buff; ptr < (buff + used - len); ptr++) { >+ if (memcmp(ptr, expected, len) == 0) >+ ++expected_found; >+ if (memcmp(ptr, unexpected, len) == 0) >+ ++unexpected_found; >+ } >+ failure("should find expected path in both local and central header (charset=%s)", charset); >+ assertEqualInt(2, expected_found); >+ failure("should not find unexpected path in anywhere (charset=%s)", charset); >+ assertEqualInt(0, unexpected_found); >+} >+ >+DEFINE_TEST(test_write_format_zip_windows_path) >+{ >+ test_with_hdrcharset(NULL); >+#if defined(_WIN32) && !defined(__CYGWIN__) || HAVE_ICONV >+ test_with_hdrcharset("ISO-8859-1"); >+ test_with_hdrcharset("UTF-8"); >+#endif >+} >diff --git a/contrib/libarchive/libarchive/test/test_zip_filename_encoding.c b/contrib/libarchive/libarchive/test/test_zip_filename_encoding.c >index 448fb9b1d4ef..b6786f2c3b18 100644 >--- a/contrib/libarchive/libarchive/test/test_zip_filename_encoding.c >+++ b/contrib/libarchive/libarchive/test/test_zip_filename_encoding.c >@@ -527,3 +527,98 @@ DEFINE_TEST(test_zip_filename_encoding_CP932) > assertEqualInt(0, buff[7]); > assertEqualMem(buff + 30, "abcABC", 6); > } >+ >+DEFINE_TEST(test_zip_filename_encoding_UTF16_win) >+{ >+#if !defined(_WIN32) || defined(__CYGWIN__) >+ skipping("This test is meant to verify unicode string handling" >+ " on Windows with UTF-16 names"); >+ return; >+#else >+ struct archive *a; >+ struct archive_entry *entry; >+ char buff[4096]; >+ size_t used; >+ >+ /* >+ * Don't call setlocale because we're verifying that the '_w' functions >+ * work as expected when 'hdrcharset' is UTF-8 >+ */ >+ >+ /* Part 1: file */ >+ a = archive_write_new(); >+ assertEqualInt(ARCHIVE_OK, archive_write_set_format_zip(a)); >+ if (archive_write_set_options(a, "hdrcharset=UTF-8") != ARCHIVE_OK) { >+ skipping("This system cannot convert character-set" >+ " from UTF-16 to UTF-8."); >+ archive_write_free(a); >+ return; >+ } >+ assertEqualInt(ARCHIVE_OK, >+ archive_write_open_memory(a, buff, sizeof(buff), &used)); >+ >+ entry = archive_entry_new2(a); >+ /* Set the filename using a UTF-16 string */ >+ archive_entry_copy_pathname_w(entry, L"\u8868.txt"); >+ archive_entry_set_filetype(entry, AE_IFREG); >+ archive_entry_set_size(entry, 0); >+ assertEqualInt(ARCHIVE_OK, archive_write_header(a, entry)); >+ archive_entry_free(entry); >+ assertEqualInt(ARCHIVE_OK, archive_write_free(a)); >+ >+ /* A bit 11 of general purpose flag should be 1, >+ * which indicates the filename charset is UTF-8. */ >+ assertEqualInt(0x08, buff[7]); >+ /* Check UTF-8 version. */ >+ assertEqualMem(buff + 30, "\xE8\xA1\xA8.txt", 7); >+ >+ /* Part 2: directory */ >+ a = archive_write_new(); >+ assertEqualInt(ARCHIVE_OK, archive_write_set_format_zip(a)); >+ assertEqualInt(ARCHIVE_OK, archive_write_set_options(a, "hdrcharset=UTF-8")); >+ assertEqualInt(ARCHIVE_OK, >+ archive_write_open_memory(a, buff, sizeof(buff), &used)); >+ >+ entry = archive_entry_new2(a); >+ /* Set the directory name using a UTF-16 string */ >+ /* NOTE: Explicitly not adding trailing slash to test that code path */ >+ archive_entry_copy_pathname_w(entry, L"\u8868"); >+ archive_entry_set_filetype(entry, AE_IFDIR); >+ archive_entry_set_size(entry, 0); >+ assertEqualInt(ARCHIVE_OK, archive_write_header(a, entry)); >+ archive_entry_free(entry); >+ assertEqualInt(ARCHIVE_OK, archive_write_free(a)); >+ >+ /* A bit 11 of general purpose flag should be 1, >+ * which indicates the filename charset is UTF-8. */ >+ assertEqualInt(0x08, buff[7]); >+ /* Check UTF-8 version. */ >+ assertEqualMem(buff+ 30, "\xE8\xA1\xA8/", 4); >+ >+ /* Part 3: symlink */ >+ a = archive_write_new(); >+ assertEqualInt(ARCHIVE_OK, archive_write_set_format_zip(a)); >+ assertEqualInt(ARCHIVE_OK, archive_write_set_options(a, "hdrcharset=UTF-8")); >+ assertEqualInt(ARCHIVE_OK, >+ archive_write_open_memory(a, buff, sizeof(buff), &used)); >+ >+ entry = archive_entry_new2(a); >+ /* Set the symlink target using a UTF-16 string */ >+ archive_entry_set_pathname(entry, "link.txt"); >+ archive_entry_copy_symlink_w(entry, L"\u8868.txt"); >+ archive_entry_set_filetype(entry, AE_IFLNK); >+ archive_entry_set_symlink_type(entry, AE_SYMLINK_TYPE_FILE); >+ archive_entry_set_size(entry, 0); >+ assertEqualInt(ARCHIVE_OK, archive_write_header(a, entry)); >+ archive_entry_free(entry); >+ assertEqualInt(ARCHIVE_OK, archive_write_free(a)); >+ >+ /* A bit 11 of general purpose flag should be 0, >+ * because the file name is ASCII. */ >+ assertEqualInt(0, buff[7]); >+ /* Check UTF-8 version. */ >+ assertEqualMem(buff + 38, "\xE8\xA1\xA8.txt", 7); >+ >+ /* NOTE: ZIP does not support hardlinks */ >+#endif >+} >diff --git a/contrib/libarchive/tar/bsdtar.1 b/contrib/libarchive/tar/bsdtar.1 >index fe9ec9504674..7a7b0d5d9fb1 100644 >--- a/contrib/libarchive/tar/bsdtar.1 >+++ b/contrib/libarchive/tar/bsdtar.1 >@@ -1,28 +1,10 @@ >+.\" >+.\" SPDX-License-Identifier: BSD-2-Clause >+.\" > .\" Copyright (c) 2003-2007 Tim Kientzle > .\" Copyright (c) 2017 Martin Matuska > .\" All rights reserved. > .\" >-.\" Redistribution and use in source and binary forms, with or without >-.\" modification, are permitted provided that the following conditions >-.\" are met: >-.\" 1. Redistributions of source code must retain the above copyright >-.\" notice, this list of conditions and the following disclaimer. >-.\" 2. Redistributions in binary form must reproduce the above copyright >-.\" notice, this list of conditions and the following disclaimer in the >-.\" documentation and/or other materials provided with the distribution. >-.\" >-.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND >-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE >-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE >-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE >-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL >-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS >-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) >-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT >-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY >-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF >-.\" SUCH DAMAGE. >-.\" > .Dd April 23, 2024 > .Dt TAR 1 > .Os >diff --git a/contrib/libarchive/tar/bsdtar.c b/contrib/libarchive/tar/bsdtar.c >index 42baab2861bd..439093ded76a 100644 >--- a/contrib/libarchive/tar/bsdtar.c >+++ b/contrib/libarchive/tar/bsdtar.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2008 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > > #include "bsdtar_platform.h" >@@ -43,6 +25,9 @@ > #ifdef HAVE_LANGINFO_H > #include <langinfo.h> > #endif >+#ifdef HAVE_LIMITS_H >+#include <limits.h> >+#endif > #ifdef HAVE_LOCALE_H > #include <locale.h> > #endif >diff --git a/contrib/libarchive/tar/bsdtar.h b/contrib/libarchive/tar/bsdtar.h >index 22056c7920c4..42520c88f2bc 100644 >--- a/contrib/libarchive/tar/bsdtar.h >+++ b/contrib/libarchive/tar/bsdtar.h >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > > #ifndef BSDTAR_H_INCLUDED >diff --git a/contrib/libarchive/tar/bsdtar_platform.h b/contrib/libarchive/tar/bsdtar_platform.h >index a4f37d95e9b3..02f64dcd7a04 100644 >--- a/contrib/libarchive/tar/bsdtar_platform.h >+++ b/contrib/libarchive/tar/bsdtar_platform.h >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > > /* >@@ -115,7 +97,7 @@ > #define __LA_NORETURN __attribute__((__noreturn__)) > #elif defined(_MSC_VER) > #define __LA_NORETURN __declspec(noreturn) >-#else >+#else > #define __LA_NORETURN > #endif > >diff --git a/contrib/libarchive/tar/cmdline.c b/contrib/libarchive/tar/cmdline.c >index 2a89f42b0880..35cb1cb43bf1 100644 >--- a/contrib/libarchive/tar/cmdline.c >+++ b/contrib/libarchive/tar/cmdline.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2008 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > > /* >diff --git a/contrib/libarchive/tar/creation_set.c b/contrib/libarchive/tar/creation_set.c >index 5cd1232b764c..6883090418b0 100644 >--- a/contrib/libarchive/tar/creation_set.c >+++ b/contrib/libarchive/tar/creation_set.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > > #include "bsdtar_platform.h" >@@ -134,7 +116,7 @@ _cset_add_filter(struct creation_set *cset, int program, const char *filter) > struct filter_set *new_ptr; > char *new_filter; > >- new_ptr = (struct filter_set *)realloc(cset->filters, >+ new_ptr = realloc(cset->filters, > sizeof(*cset->filters) * (cset->filter_count + 1)); > if (new_ptr == NULL) > lafe_errc(1, 0, "No memory"); >diff --git a/contrib/libarchive/tar/read.c b/contrib/libarchive/tar/read.c >index a7f14a07bb35..8563fe714f9a 100644 >--- a/contrib/libarchive/tar/read.c >+++ b/contrib/libarchive/tar/read.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > > #include "bsdtar_platform.h" >diff --git a/contrib/libarchive/tar/subst.c b/contrib/libarchive/tar/subst.c >index 9747abb906c4..0194cc84bd2d 100644 >--- a/contrib/libarchive/tar/subst.c >+++ b/contrib/libarchive/tar/subst.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2008 Joerg Sonnenberger > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > > #include "bsdtar_platform.h" >diff --git a/contrib/libarchive/tar/test/test.h b/contrib/libarchive/tar/test/test.h >index 549357b4e0fd..823ec0824f8c 100644 >--- a/contrib/libarchive/tar/test/test.h >+++ b/contrib/libarchive/tar/test/test.h >@@ -1,26 +1,8 @@ > /* >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2017 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > > /* Every test program should #include "test.h" as the first thing. */ >diff --git a/contrib/libarchive/tar/test/test_0.c b/contrib/libarchive/tar/test/test_0.c >index 7a3c2e46858f..9c25056255e1 100644 >--- a/contrib/libarchive/tar/test/test_0.c >+++ b/contrib/libarchive/tar/test/test_0.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_basic.c b/contrib/libarchive/tar/test/test_basic.c >index a59236c92b55..a74ed0a13591 100644 >--- a/contrib/libarchive/tar/test/test_basic.c >+++ b/contrib/libarchive/tar/test/test_basic.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_copy.c b/contrib/libarchive/tar/test/test_copy.c >index fd47a6d877e6..d1263dc7928f 100644 >--- a/contrib/libarchive/tar/test/test_copy.c >+++ b/contrib/libarchive/tar/test/test_copy.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >@@ -190,7 +172,7 @@ create_tree(void) > #define LIMIT_USTAR 100 > > static void >-verify_tree(size_t limit) >+verify_tree(size_t limit, const char *format) > { > char name1[260]; > char name2[260]; >@@ -203,6 +185,7 @@ verify_tree(size_t limit) > /* Verify a file named "f/abcdef..." */ > snprintf(name1, sizeof(name1), "f/%s", filenames[i]); > if (i <= limit) { >+ failure("Verifying %s", format); > assertFileExists(name1); > assertFileContents(name1, (int)strlen(name1), name1); > } >@@ -210,6 +193,7 @@ verify_tree(size_t limit) > snprintf(name2, sizeof(name2), "l/%s", filenames[i]); > if (i + 2 <= limit) { > /* Verify hardlink "l/abcdef..." */ >+ failure("Verifying %s", format); > assertIsHardlink(name1, name2); > /* Verify hardlink "m/abcdef..." */ > name2[0] = 'm'; >@@ -220,13 +204,16 @@ verify_tree(size_t limit) > /* Verify symlink "s/abcdef..." */ > snprintf(name1, sizeof(name1), "s/%s", filenames[i]); > snprintf(name2, sizeof(name2), "../f/%s", filenames[i]); >- if (strlen(name2) <= limit) >+ if (strlen(name2) <= limit) { >+ failure("Verifying %s", format); > assertIsSymlink(name1, name2, 0); >+ } > } > > /* Verify dir "d/abcdef...". */ > snprintf(name1, sizeof(name1), "d/%s", filenames[i]); > if (i + 1 <= limit) { /* +1 for trailing slash */ >+ failure("Verifying %s", format); > if (assertIsDir(name1, -1)) { > /* TODO: opendir/readdir this > * directory and make sure >@@ -246,7 +233,7 @@ verify_tree(size_t limit) > char dir[2]; > dir[0] = *dp; dir[1] = '\0'; > d = opendir(dir); >- failure("Unable to open dir '%s'", dir); >+ failure("Unable to open dir '%s' for testing %s", dir, format); > if (!assert(d != NULL)) > continue; > while ((de = readdir(d)) != NULL) { >@@ -278,25 +265,25 @@ verify_tree(size_t limit) > } > > static void >-copy_basic(void) >+copy_basic(const char *extra_args, const char *name) > { > int r; > > /* NOTE: for proper operation on cygwin-1.5 and windows, the >- * length of the name of the directory below, "plain", must be >+ * length of the name of the directory below must be > * less than or equal to the length of the name of the original > * directory, "original" This restriction derives from the > * extremely limited pathname lengths on those platforms. > */ >- assertMakeDir("plain", 0775); >- assertEqualInt(0, chdir("plain")); >+ assertMakeDir(name, 0775); >+ assertEqualInt(0, chdir(name)); > > /* > * Use the tar program to create an archive. > */ >- r = systemf("%s cf archive -C ../original f d l m s >pack.out 2>pack.err", >- testprog); >- failure("Error invoking \"%s cf\"", testprog); >+ r = systemf("%s cf archive %s -C ../original f d l m s >pack.out 2>pack.err", >+ testprog, extra_args); >+ failure("Error invoking \"%s cf archive %s\"", testprog, extra_args); > assertEqualInt(r, 0); > > /* Verify that nothing went to stdout or stderr. */ >@@ -314,7 +301,7 @@ copy_basic(void) > assertEmptyFile("unpack.err"); > assertEmptyFile("unpack.out"); > >- verify_tree(LIMIT_NONE); >+ verify_tree(LIMIT_NONE, name); > assertEqualInt(0, chdir("..")); > } > >@@ -357,8 +344,8 @@ copy_ustar(void) > assertEmptyFile("unpack.err"); > assertEmptyFile("unpack.out"); > >- verify_tree(LIMIT_USTAR); >- assertEqualInt(0, chdir("../..")); >+ verify_tree(LIMIT_USTAR, "ustar"); >+ assertEqualInt(0, chdir("..")); > } > > DEFINE_TEST(test_copy) >@@ -367,8 +354,11 @@ DEFINE_TEST(test_copy) > create_tree(); /* Create sample files in "original" dir. */ > > /* Test simple "tar -c | tar -x" pipeline copy. */ >- copy_basic(); >+ copy_basic("", "default"); > > /* Same, but constrain to ustar format. */ > copy_ustar(); >+ >+ /* Same, but with pax format. */ >+ copy_basic(" --format pax", "pax"); > } >diff --git a/contrib/libarchive/tar/test/test_empty_mtree.c b/contrib/libarchive/tar/test/test_empty_mtree.c >index 11cdfb56690a..9ef098fe4e47 100644 >--- a/contrib/libarchive/tar/test/test_empty_mtree.c >+++ b/contrib/libarchive/tar/test/test_empty_mtree.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2009 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_extract_tar_Z.c b/contrib/libarchive/tar/test/test_extract_tar_Z.c >index b03aca6d1da5..cd195560ceb0 100644 >--- a/contrib/libarchive/tar/test/test_extract_tar_Z.c >+++ b/contrib/libarchive/tar/test/test_extract_tar_Z.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_extract_tar_bz2.c b/contrib/libarchive/tar/test/test_extract_tar_bz2.c >index 02b3ee326d5b..3c30c5ac4bb0 100644 >--- a/contrib/libarchive/tar/test/test_extract_tar_bz2.c >+++ b/contrib/libarchive/tar/test/test_extract_tar_bz2.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_extract_tar_grz.c b/contrib/libarchive/tar/test/test_extract_tar_grz.c >index f0adf994dec6..f0eb0017191b 100644 >--- a/contrib/libarchive/tar/test/test_extract_tar_grz.c >+++ b/contrib/libarchive/tar/test/test_extract_tar_grz.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_extract_tar_gz.c b/contrib/libarchive/tar/test/test_extract_tar_gz.c >index b17d66f01529..b0e69da7b57e 100644 >--- a/contrib/libarchive/tar/test/test_extract_tar_gz.c >+++ b/contrib/libarchive/tar/test/test_extract_tar_gz.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_extract_tar_lrz.c b/contrib/libarchive/tar/test/test_extract_tar_lrz.c >index d6049809bb22..8b63f7de448b 100644 >--- a/contrib/libarchive/tar/test/test_extract_tar_lrz.c >+++ b/contrib/libarchive/tar/test/test_extract_tar_lrz.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_extract_tar_lz.c b/contrib/libarchive/tar/test/test_extract_tar_lz.c >index 3889138928d1..221cc46855d5 100644 >--- a/contrib/libarchive/tar/test/test_extract_tar_lz.c >+++ b/contrib/libarchive/tar/test/test_extract_tar_lz.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_extract_tar_lz4.c b/contrib/libarchive/tar/test/test_extract_tar_lz4.c >index f0e03ed3206e..eef2275b7313 100644 >--- a/contrib/libarchive/tar/test/test_extract_tar_lz4.c >+++ b/contrib/libarchive/tar/test/test_extract_tar_lz4.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2012,2014 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_extract_tar_lzma.c b/contrib/libarchive/tar/test/test_extract_tar_lzma.c >index fd9f547fb524..68b9e4918316 100644 >--- a/contrib/libarchive/tar/test/test_extract_tar_lzma.c >+++ b/contrib/libarchive/tar/test/test_extract_tar_lzma.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_extract_tar_lzo.c b/contrib/libarchive/tar/test/test_extract_tar_lzo.c >index 9c05e15a6b04..22566a290b7c 100644 >--- a/contrib/libarchive/tar/test/test_extract_tar_lzo.c >+++ b/contrib/libarchive/tar/test/test_extract_tar_lzo.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_extract_tar_xz.c b/contrib/libarchive/tar/test/test_extract_tar_xz.c >index 8684072d76f5..f9cd18d1e2ad 100644 >--- a/contrib/libarchive/tar/test/test_extract_tar_xz.c >+++ b/contrib/libarchive/tar/test/test_extract_tar_xz.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_extract_tar_zstd.c b/contrib/libarchive/tar/test/test_extract_tar_zstd.c >index 1eced8817387..a2e8d43928e2 100644 >--- a/contrib/libarchive/tar/test/test_extract_tar_zstd.c >+++ b/contrib/libarchive/tar/test/test_extract_tar_zstd.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2017 Sean Purcell > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_format_newc.c b/contrib/libarchive/tar/test/test_format_newc.c >index 5357cc7cdae4..ec84b75b7f19 100644 >--- a/contrib/libarchive/tar/test/test_format_newc.c >+++ b/contrib/libarchive/tar/test/test_format_newc.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_help.c b/contrib/libarchive/tar/test/test_help.c >index fd97a217b789..51575bbfe287 100644 >--- a/contrib/libarchive/tar/test/test_help.c >+++ b/contrib/libarchive/tar/test/test_help.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_leading_slash.c b/contrib/libarchive/tar/test/test_leading_slash.c >index ca64ad154055..7aab992c842c 100644 >--- a/contrib/libarchive/tar/test/test_leading_slash.c >+++ b/contrib/libarchive/tar/test/test_leading_slash.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2014 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_missing_file.c b/contrib/libarchive/tar/test/test_missing_file.c >index 1cc40f3745e8..7c0557268dfc 100644 >--- a/contrib/libarchive/tar/test/test_missing_file.c >+++ b/contrib/libarchive/tar/test/test_missing_file.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2016 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_option_C_mtree.c b/contrib/libarchive/tar/test/test_option_C_mtree.c >index 25679644af61..b6ab159941d8 100644 >--- a/contrib/libarchive/tar/test/test_option_C_mtree.c >+++ b/contrib/libarchive/tar/test/test_option_C_mtree.c >@@ -1,29 +1,11 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2018 The FreeBSD Foundation > * All rights reserved. >- * >+ * > * This software was developed by Arshan Khanifar <arshankhanifar@gmail.com> > * under sponsorship from the FreeBSD Foundation. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >@@ -39,12 +21,12 @@ DEFINE_TEST(test_option_C_mtree) > char *p; > #endif > >- /* an absolute path to mtree file */ >- char *mtree_file = "/METALOG.mtree"; >+ /* an absolute path to mtree file */ >+ char *mtree_file = "/METALOG.mtree"; > char *absolute_path = malloc(strlen(testworkdir) + strlen(mtree_file) + 1); > strcpy(absolute_path, testworkdir); > strcat(absolute_path, mtree_file ); >- >+ > /* Create an archive using an mtree file. */ > assertMakeFile(absolute_path, 0777, content); > assertMakeDir("bar", 0775); >diff --git a/contrib/libarchive/tar/test/test_option_C_upper.c b/contrib/libarchive/tar/test/test_option_C_upper.c >index cadc924e1d47..a4eb82a153f2 100644 >--- a/contrib/libarchive/tar/test/test_option_C_upper.c >+++ b/contrib/libarchive/tar/test/test_option_C_upper.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2010 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_option_H_upper.c b/contrib/libarchive/tar/test/test_option_H_upper.c >index 097a9729d26f..ac4993bdef06 100644 >--- a/contrib/libarchive/tar/test/test_option_H_upper.c >+++ b/contrib/libarchive/tar/test/test_option_H_upper.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2010 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >@@ -78,7 +60,7 @@ DEFINE_TEST(test_option_H_upper) > /* Test 3: With -H, some symlinks on command line. */ > assertMakeDir("test3", 0755); > assertEqualInt(0, >- systemf("%s -cf test3/archive.tar -H -C in ld1 d1 link2 linkY >test2/c.out 2>test2/c.err", testprog)); >+ systemf("%s -cf test3/archive.tar -H -C in ld1 d1 link2 linkY >test3/c.out 2>test3/c.err", testprog)); > assertChdir("test3"); > assertEqualInt(0, > systemf("%s -xf archive.tar >c.out 2>c.err", testprog)); >@@ -88,4 +70,20 @@ DEFINE_TEST(test_option_H_upper) > assertIsReg("link2", umasked(0644)); > assertIsSymlink("linkY", "d1/fileY", 0); > assertChdir(".."); >+ >+#if defined(_WIN32) && !defined(__CYGWIN__) >+ /* Test 4: With -H, using wildcards with some symlinks on command line. (wildcards are supported only in Windows) */ >+ assertMakeDir("test4", 0755); >+ assertEqualInt(0, >+ systemf("%s -cf test4/archive.tar -H -C in * >test4/c.out 2>test4/c.err", testprog)); >+ assertChdir("test4"); >+ assertEqualInt(0, >+ systemf("%s -xf archive.tar >c.out 2>c.err", testprog)); >+ assertIsDir("ld1", umasked(0755)); >+ assertIsSymlink("d1/linkX", "fileX", 0); >+ assertIsSymlink("d1/link1", "file1", 0); >+ assertIsReg("link2", umasked(0644)); >+ assertIsSymlink("linkY", "d1/fileY", 0); >+ assertChdir(".."); >+#endif > } >diff --git a/contrib/libarchive/tar/test/test_option_L_upper.c b/contrib/libarchive/tar/test/test_option_L_upper.c >index fd1ed0a52c76..919c15c6f376 100644 >--- a/contrib/libarchive/tar/test/test_option_L_upper.c >+++ b/contrib/libarchive/tar/test/test_option_L_upper.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2010 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >@@ -78,7 +60,7 @@ DEFINE_TEST(test_option_L_upper) > /* Test 3: With -L, some symlinks on command line. */ > assertMakeDir("test3", 0755); > assertEqualInt(0, >- systemf("%s -cf test3/archive.tar -L -C in ld1 d1 link2 linkY >test2/c.out 2>test2/c.err", testprog)); >+ systemf("%s -cf test3/archive.tar -L -C in ld1 d1 link2 linkY >test3/c.out 2>test3/c.err", testprog)); > assertChdir("test3"); > assertEqualInt(0, > systemf("%s -xf archive.tar >c.out 2>c.err", testprog)); >@@ -88,4 +70,20 @@ DEFINE_TEST(test_option_L_upper) > assertIsReg("link2", umasked(0644)); > assertIsSymlink("linkY", "d1/fileY", 0); > assertChdir(".."); >+ >+#if defined(_WIN32) && !defined(__CYGWIN__) >+ /* Test 4: With -L, using wildcards with some symlinks on command line. (wildcards are supported only in Windows) */ >+ assertMakeDir("test4", 0755); >+ assertEqualInt(0, >+ systemf("%s -cf test4/archive.tar -L -C in * >test4/c.out 2>test4/c.err", testprog)); >+ assertChdir("test4"); >+ assertEqualInt(0, >+ systemf("%s -xf archive.tar >c.out 2>c.err", testprog)); >+ assertIsDir("ld1", umasked(0755)); >+ assertIsReg("d1/link1", umasked(0644)); >+ assertIsSymlink("d1/linkX", "fileX", 0); >+ assertIsReg("link2", umasked(0644)); >+ assertIsSymlink("linkY", "d1/fileY", 0); >+ assertChdir(".."); >+#endif > } >diff --git a/contrib/libarchive/tar/test/test_option_O_upper.c b/contrib/libarchive/tar/test/test_option_O_upper.c >index a5540dbe8417..f70d7e3b4413 100644 >--- a/contrib/libarchive/tar/test/test_option_O_upper.c >+++ b/contrib/libarchive/tar/test/test_option_O_upper.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2010 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_option_P.c b/contrib/libarchive/tar/test/test_option_P.c >new file mode 100644 >index 000000000000..e63da3e0875c >--- /dev/null >+++ b/contrib/libarchive/tar/test/test_option_P.c >@@ -0,0 +1,82 @@ >+/*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * >+ * Copyright (c) 2024 Mostyn Bramley-Moore <mostyn@antipode.se> >+ */ >+ >+#include "test.h" >+ >+#include <stdlib.h> >+#include <string.h> >+ >+#if defined(_WIN32) && !defined(__CYGWIN__) >+#define UNLINK _unlink >+#else >+#define UNLINK unlink >+#endif >+ >+DEFINE_TEST(test_extract_tar_absolute_paths) >+{ >+ int r; >+ >+ // Create an absolute path for a test file inside testworkdir. >+ char *entry_suffix = "/tar-noabs"; >+ size_t entry_suffix_length = strlen(entry_suffix); >+ size_t testworkdir_length = strlen(testworkdir); >+ size_t temp_absolute_file_name_length = testworkdir_length + entry_suffix_length; >+ char *temp_absolute_file_name = calloc(1, temp_absolute_file_name_length + 1); // +1 for null character. >+ assertEqualInt(snprintf(temp_absolute_file_name, temp_absolute_file_name_length + 1, "%s%s", testworkdir, entry_suffix), >+ temp_absolute_file_name_length); >+ >+#if defined(_WIN32) && !defined(__CYGWIN__) >+ // I'm unsure how to specify paths with spaces for the test invocation on windows. >+ // Adding quotes doesn't seem to work. We should find a way to escape these paths, >+ // but for now let's fail in a place that's obviously related to the test setup if >+ // testworkdir contains spaces. >+ for (char *p = temp_absolute_file_name; *p != '\0'; p++) >+ { >+ assert(*p != ' '); >+ if (*p == ' ') break; >+ } >+#endif >+ >+ // Create the file. >+ const char *sample_data = "test file from test_extract_tar_absolute_paths"; >+ assertMakeFile(temp_absolute_file_name, 0644, sample_data); >+ >+ // Create an archive with the test file, using an absolute path. >+#if defined(_WIN32) && !defined(__CYGWIN__) >+ r = systemf("%s --absolute-paths -cf test.tar %s", testprog, temp_absolute_file_name); >+#else >+ r = systemf("%s --absolute-paths -cf test.tar \"%s\"", testprog, temp_absolute_file_name); >+#endif >+ assertEqualInt(r, 0); >+ >+ UNLINK(temp_absolute_file_name); >+ >+ // Extracting the archive without -P / --absolute-paths should strip leading drive letter or slash >+ r = systemf("%s -xf test.tar", testprog); >+ assertEqualInt(r, 0); >+ assertFileNotExists(temp_absolute_file_name); >+ >+ // Check that the mangled path exists. >+#if defined(_WIN32) && !defined(__CYGWIN__) >+ assertFileExists(temp_absolute_file_name + 3); // Skip the drive letter, colon and slash. >+ UNLINK(temp_absolute_file_name + 3); >+#else >+ assertFileExists(temp_absolute_file_name + 1); // Skip the slash. >+ UNLINK(temp_absolute_file_name + 1); >+#endif >+ >+ // Extracting the archive with -P / --absolute-paths should create the file. >+ r = systemf("%s --absolute-paths -xf test.tar", testprog); >+ assertEqualInt(r, 0); >+ assertFileExists(temp_absolute_file_name); >+ >+ // Check that the mangled path wasn't created. >+#if defined(_WIN32) && !defined(__CYGWIN__) >+ assertFileNotExists(temp_absolute_file_name + 3); // Skip the drive letter, colon and slash. >+#else >+ assertFileNotExists(temp_absolute_file_name + 1); // Skip the slash. >+#endif >+} >diff --git a/contrib/libarchive/tar/test/test_option_T_upper.c b/contrib/libarchive/tar/test/test_option_T_upper.c >index c64767fcfb84..e3c5bc2d30cd 100644 >--- a/contrib/libarchive/tar/test/test_option_T_upper.c >+++ b/contrib/libarchive/tar/test/test_option_T_upper.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2008 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_option_U_upper.c b/contrib/libarchive/tar/test/test_option_U_upper.c >index 4518a5f9fd8e..841874b6b196 100644 >--- a/contrib/libarchive/tar/test/test_option_U_upper.c >+++ b/contrib/libarchive/tar/test/test_option_U_upper.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2010 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_option_X_upper.c b/contrib/libarchive/tar/test/test_option_X_upper.c >index b5ea98b9a0d7..a2eac676b2e7 100644 >--- a/contrib/libarchive/tar/test/test_option_X_upper.c >+++ b/contrib/libarchive/tar/test/test_option_X_upper.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2010 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_option_a.c b/contrib/libarchive/tar/test/test_option_a.c >index 52797411c751..0a58fc665c1f 100644 >--- a/contrib/libarchive/tar/test/test_option_a.c >+++ b/contrib/libarchive/tar/test/test_option_a.c >@@ -1,27 +1,9 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_option_acls.c b/contrib/libarchive/tar/test/test_option_acls.c >index 333ac2e4fb47..5bbe977e5cf2 100644 >--- a/contrib/libarchive/tar/test/test_option_acls.c >+++ b/contrib/libarchive/tar/test/test_option_acls.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2017 Martin Matuska > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_option_b.c b/contrib/libarchive/tar/test/test_option_b.c >index d7e0f399c297..2b2225de6531 100644 >--- a/contrib/libarchive/tar/test/test_option_b.c >+++ b/contrib/libarchive/tar/test/test_option_b.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2010 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_option_b64encode.c b/contrib/libarchive/tar/test/test_option_b64encode.c >index b9a2b809ea4a..3a083e79b31f 100644 >--- a/contrib/libarchive/tar/test/test_option_b64encode.c >+++ b/contrib/libarchive/tar/test/test_option_b64encode.c >@@ -1,27 +1,9 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_option_exclude.c b/contrib/libarchive/tar/test/test_option_exclude.c >index b21ec624aec2..9c8d8bec27b9 100644 >--- a/contrib/libarchive/tar/test/test_option_exclude.c >+++ b/contrib/libarchive/tar/test/test_option_exclude.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2010 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_option_exclude_vcs.c b/contrib/libarchive/tar/test/test_option_exclude_vcs.c >index ec4dc5594f5c..ccc19d29d4dd 100644 >--- a/contrib/libarchive/tar/test/test_option_exclude_vcs.c >+++ b/contrib/libarchive/tar/test/test_option_exclude_vcs.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2019 Martin Matuska > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >@@ -63,7 +45,7 @@ DEFINE_TEST(test_option_exclude_vcs) > assertMakeDir("_darcs", 0755); > assertMakeFile("_darcs/format", 0644, ""); > assertChdir(".."); >- >+ > assertEqualInt(0, systemf("%s -c -C in -f included.tar .", testprog)); > assertEqualInt(0, > systemf("%s -c --exclude-vcs -C in -f excluded.tar .", testprog)); >diff --git a/contrib/libarchive/tar/test/test_option_fflags.c b/contrib/libarchive/tar/test/test_option_fflags.c >index 045c780edefc..a796f571f49a 100644 >--- a/contrib/libarchive/tar/test/test_option_fflags.c >+++ b/contrib/libarchive/tar/test/test_option_fflags.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2017 Martin Matuska > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >@@ -97,7 +79,7 @@ DEFINE_TEST(test_option_fflags) > assertMakeDir("nofflags_fflags", 0755); > clear_fflags("nofflags_fflags"); > r = systemf("%s -x -C nofflags_fflags --no-same-permissions --fflags -f nofflags.tar >nofflags_fflags.out 2>nofflags_fflags.err", testprog); >- assertEqualInt(r, 0); >+ assertEqualInt(r, 0); > assertUnequalFflags("f", "nofflags_fflags/f"); > > /* Extract nofflags with nofflags */ >diff --git a/contrib/libarchive/tar/test/test_option_gid_gname.c b/contrib/libarchive/tar/test/test_option_gid_gname.c >index a4cff1ab2f64..38220772dc12 100644 >--- a/contrib/libarchive/tar/test/test_option_gid_gname.c >+++ b/contrib/libarchive/tar/test/test_option_gid_gname.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2010 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_option_group.c b/contrib/libarchive/tar/test/test_option_group.c >index d429ddab9f9f..8d3cc651362a 100644 >--- a/contrib/libarchive/tar/test/test_option_group.c >+++ b/contrib/libarchive/tar/test/test_option_group.c >@@ -1,27 +1,9 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2010 Tim Kientzle > * Copyright (c) 2024 Haelwenn (lanodan) Monnier > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_option_grzip.c b/contrib/libarchive/tar/test/test_option_grzip.c >index d898e4408151..d63751631a46 100644 >--- a/contrib/libarchive/tar/test/test_option_grzip.c >+++ b/contrib/libarchive/tar/test/test_option_grzip.c >@@ -1,27 +1,9 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_option_ignore_zeros.c b/contrib/libarchive/tar/test/test_option_ignore_zeros.c >index 985ad3082fce..31e0dd940460 100644 >--- a/contrib/libarchive/tar/test/test_option_ignore_zeros.c >+++ b/contrib/libarchive/tar/test/test_option_ignore_zeros.c >@@ -1,27 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2021 Ryan Libby > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer >- * in this position and unchanged. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >@@ -89,6 +70,14 @@ DEFINE_TEST(test_option_ignore_zeros_mode_x) > > DEFINE_TEST(test_option_ignore_zeros_mode_c) > { >+#if defined(_WIN32) && !defined(__CYGWIN__) >+ // The first command run by systemf below prints this to stderr: >+ // bsdtar.exe: a: Can't translate uname '(null)' to UTF-8 >+ // bsdtar.exe: b: Can't translate uname '(null)' to UTF-8 >+ skipping("TODO: figure out why this test fails on github workflows with MSVC"); >+ return; >+#endif >+ > if (make_files()) > return; > >diff --git a/contrib/libarchive/tar/test/test_option_j.c b/contrib/libarchive/tar/test/test_option_j.c >index cf4d91d0afac..a67ef7412738 100644 >--- a/contrib/libarchive/tar/test/test_option_j.c >+++ b/contrib/libarchive/tar/test/test_option_j.c >@@ -1,27 +1,9 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_option_k.c b/contrib/libarchive/tar/test/test_option_k.c >index 873a1209b0a9..85bf1c8263ae 100644 >--- a/contrib/libarchive/tar/test/test_option_k.c >+++ b/contrib/libarchive/tar/test/test_option_k.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2010 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_option_keep_newer_files.c b/contrib/libarchive/tar/test/test_option_keep_newer_files.c >index 2572a98c5812..18e1e1152251 100644 >--- a/contrib/libarchive/tar/test/test_option_keep_newer_files.c >+++ b/contrib/libarchive/tar/test/test_option_keep_newer_files.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2010 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_option_lrzip.c b/contrib/libarchive/tar/test/test_option_lrzip.c >index 8bf4633f643e..0ed128586c01 100644 >--- a/contrib/libarchive/tar/test/test_option_lrzip.c >+++ b/contrib/libarchive/tar/test/test_option_lrzip.c >@@ -1,27 +1,9 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_option_lz4.c b/contrib/libarchive/tar/test/test_option_lz4.c >index 1b766d04969f..6a9a4c3d429b 100644 >--- a/contrib/libarchive/tar/test/test_option_lz4.c >+++ b/contrib/libarchive/tar/test/test_option_lz4.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2014 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_option_lzma.c b/contrib/libarchive/tar/test/test_option_lzma.c >index 1d8697b53ee8..e309a64d2bad 100644 >--- a/contrib/libarchive/tar/test/test_option_lzma.c >+++ b/contrib/libarchive/tar/test/test_option_lzma.c >@@ -1,27 +1,9 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_option_lzop.c b/contrib/libarchive/tar/test/test_option_lzop.c >index d96a14f08fea..ac9b57c973dd 100644 >--- a/contrib/libarchive/tar/test/test_option_lzop.c >+++ b/contrib/libarchive/tar/test/test_option_lzop.c >@@ -1,27 +1,9 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_option_n.c b/contrib/libarchive/tar/test/test_option_n.c >index a6bda0599e16..0a20c5a897e8 100644 >--- a/contrib/libarchive/tar/test/test_option_n.c >+++ b/contrib/libarchive/tar/test/test_option_n.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2010 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_option_newer_than.c b/contrib/libarchive/tar/test/test_option_newer_than.c >index a250a4c8d8c6..4486472f1de5 100644 >--- a/contrib/libarchive/tar/test/test_option_newer_than.c >+++ b/contrib/libarchive/tar/test/test_option_newer_than.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2010 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_option_nodump.c b/contrib/libarchive/tar/test/test_option_nodump.c >index 6a5b66e3215a..33768a47f28c 100644 >--- a/contrib/libarchive/tar/test/test_option_nodump.c >+++ b/contrib/libarchive/tar/test/test_option_nodump.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_option_older_than.c b/contrib/libarchive/tar/test/test_option_older_than.c >index d57c4d414b8f..ffbde8da7cdd 100644 >--- a/contrib/libarchive/tar/test/test_option_older_than.c >+++ b/contrib/libarchive/tar/test/test_option_older_than.c >@@ -1,27 +1,9 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2010 Tim Kientzle > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_option_owner.c b/contrib/libarchive/tar/test/test_option_owner.c >index 04c86cc0e8d4..ed212031058d 100644 >--- a/contrib/libarchive/tar/test/test_option_owner.c >+++ b/contrib/libarchive/tar/test/test_option_owner.c >@@ -1,27 +1,9 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2010 Tim Kientzle > * Copyright (c) 2024 Haelwenn (lanodan) Monnier > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_option_passphrase.c b/contrib/libarchive/tar/test/test_option_passphrase.c >index 74f3d3d5d031..968a33c00bdb 100644 >--- a/contrib/libarchive/tar/test/test_option_passphrase.c >+++ b/contrib/libarchive/tar/test/test_option_passphrase.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2014 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_option_q.c b/contrib/libarchive/tar/test/test_option_q.c >index fd4b55e545ae..4bb3ef86b743 100644 >--- a/contrib/libarchive/tar/test/test_option_q.c >+++ b/contrib/libarchive/tar/test/test_option_q.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_option_r.c b/contrib/libarchive/tar/test/test_option_r.c >index 655b973ad1e2..622512c95f71 100644 >--- a/contrib/libarchive/tar/test/test_option_r.c >+++ b/contrib/libarchive/tar/test/test_option_r.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_option_s.c b/contrib/libarchive/tar/test/test_option_s.c >index 564793b97d5e..1a36280c111f 100644 >--- a/contrib/libarchive/tar/test/test_option_s.c >+++ b/contrib/libarchive/tar/test/test_option_s.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2008 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_option_safe_writes.c b/contrib/libarchive/tar/test/test_option_safe_writes.c >index d1e36cfd4736..b88479bc5f35 100644 >--- a/contrib/libarchive/tar/test/test_option_safe_writes.c >+++ b/contrib/libarchive/tar/test/test_option_safe_writes.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2020 Martin Matuska > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_option_uid_uname.c b/contrib/libarchive/tar/test/test_option_uid_uname.c >index 261e3b86565b..a6f3c5bb979b 100644 >--- a/contrib/libarchive/tar/test/test_option_uid_uname.c >+++ b/contrib/libarchive/tar/test/test_option_uid_uname.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2010 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_option_uuencode.c b/contrib/libarchive/tar/test/test_option_uuencode.c >index 4bb6e0898c2b..f492764eed6a 100644 >--- a/contrib/libarchive/tar/test/test_option_uuencode.c >+++ b/contrib/libarchive/tar/test/test_option_uuencode.c >@@ -1,27 +1,9 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_option_xattrs.c b/contrib/libarchive/tar/test/test_option_xattrs.c >index eef6c779bb52..8c711a9ae4b2 100644 >--- a/contrib/libarchive/tar/test/test_option_xattrs.c >+++ b/contrib/libarchive/tar/test/test_option_xattrs.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2017 Martin Matuska > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >@@ -73,7 +55,7 @@ DEFINE_TEST(test_option_xattrs) > /* Extract noxattrs with xattrs */ > assertMakeDir("noxattrs_xattrs", 0755); > r = systemf("%s -x -C noxattrs_xattrs --no-same-permissions --xattrs -f noxattrs.tar >noxattrs_xattrs.out 2>noxattrs_xattrs.err", testprog); >- assertEqualInt(r, 0); >+ assertEqualInt(r, 0); > readval = getXattr("noxattrs_xattrs/f", testattr, &size); > assert(readval == NULL); > >diff --git a/contrib/libarchive/tar/test/test_option_xz.c b/contrib/libarchive/tar/test/test_option_xz.c >index 45163e735f19..71043947526d 100644 >--- a/contrib/libarchive/tar/test/test_option_xz.c >+++ b/contrib/libarchive/tar/test/test_option_xz.c >@@ -1,27 +1,9 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_option_z.c b/contrib/libarchive/tar/test/test_option_z.c >index 8e10e37ba22e..a14380de4262 100644 >--- a/contrib/libarchive/tar/test/test_option_z.c >+++ b/contrib/libarchive/tar/test/test_option_z.c >@@ -1,27 +1,9 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_option_zstd.c b/contrib/libarchive/tar/test/test_option_zstd.c >index f9983670249c..192c20948ec9 100644 >--- a/contrib/libarchive/tar/test/test_option_zstd.c >+++ b/contrib/libarchive/tar/test/test_option_zstd.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2017 Sean Purcell > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_patterns.c b/contrib/libarchive/tar/test/test_patterns.c >index 64f8fffe90f9..7df66904cd95 100644 >--- a/contrib/libarchive/tar/test/test_patterns.c >+++ b/contrib/libarchive/tar/test/test_patterns.c >@@ -1,27 +1,9 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2009 Michihiro NAKAJIMA > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_print_longpath.c b/contrib/libarchive/tar/test/test_print_longpath.c >index a21651fa15eb..c55651e9717e 100644 >--- a/contrib/libarchive/tar/test/test_print_longpath.c >+++ b/contrib/libarchive/tar/test/test_print_longpath.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2011 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_stdio.c b/contrib/libarchive/tar/test/test_stdio.c >index d046727a2dd3..0c27c59a2af6 100644 >--- a/contrib/libarchive/tar/test/test_stdio.c >+++ b/contrib/libarchive/tar/test/test_stdio.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_strip_components.c b/contrib/libarchive/tar/test/test_strip_components.c >index 9bf79ab7cf20..97c90b3b426e 100644 >--- a/contrib/libarchive/tar/test/test_strip_components.c >+++ b/contrib/libarchive/tar/test/test_strip_components.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_symlink_dir.c b/contrib/libarchive/tar/test/test_symlink_dir.c >index 4c5666204388..22a98a19617f 100644 >--- a/contrib/libarchive/tar/test/test_symlink_dir.c >+++ b/contrib/libarchive/tar/test/test_symlink_dir.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/test/test_version.c b/contrib/libarchive/tar/test/test_version.c >index 1b896c0c49d1..f46e3442a4b7 100644 >--- a/contrib/libarchive/tar/test/test_version.c >+++ b/contrib/libarchive/tar/test/test_version.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2017 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/tar/util.c b/contrib/libarchive/tar/util.c >index 37c3a23231bd..a152f3506994 100644 >--- a/contrib/libarchive/tar/util.c >+++ b/contrib/libarchive/tar/util.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > > #include "bsdtar_platform.h" >@@ -234,6 +216,7 @@ yes(const char *fmt, ...) > char buff[32]; > char *p; > ssize_t l; >+ int read_fd = 2; /* stderr */ > > va_list ap; > va_start(ap, fmt); >@@ -242,7 +225,24 @@ yes(const char *fmt, ...) > fprintf(stderr, " (y/N)? "); > fflush(stderr); > >- l = read(2, buff, sizeof(buff) - 1); >+#if defined(_WIN32) && !defined(__CYGWIN__) >+ /* To be resilient when stdin is a pipe, bsdtar prefers to read from >+ * stderr. On Windows, stderr cannot be read. The nearest "piping >+ * resilient" equivalent is reopening the console input handle. >+ */ >+ read_fd = _open("CONIN$", O_RDONLY); >+ if (read_fd < 0) { >+ fprintf(stderr, "Keyboard read failed\n"); >+ exit(1); >+ } >+#endif >+ >+ l = read(read_fd, buff, sizeof(buff) - 1); >+ >+#if defined(_WIN32) && !defined(__CYGWIN__) >+ _close(read_fd); >+#endif >+ > if (l < 0) { > fprintf(stderr, "Keyboard read failed\n"); > exit(1); >diff --git a/contrib/libarchive/tar/write.c b/contrib/libarchive/tar/write.c >index 5c7b13ae682f..f1838d6b5dea 100644 >--- a/contrib/libarchive/tar/write.c >+++ b/contrib/libarchive/tar/write.c >@@ -1,27 +1,9 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * Copyright (c) 2012 Michihiro NAKAJIMA > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > > #include "bsdtar_platform.h" >@@ -32,7 +14,9 @@ > #ifdef HAVE_SYS_STAT_H > #include <sys/stat.h> > #endif >-#ifdef HAVE_ATTR_XATTR_H >+#if HAVE_SYS_XATTR_H >+#include <sys/xattr.h> >+#elif HAVE_ATTR_XATTR_H > #include <attr/xattr.h> > #endif > #ifdef HAVE_ERRNO_H >@@ -942,7 +926,9 @@ write_hierarchy(struct bsdtar *bsdtar, struct archive *a, const char *path) > > while (entry != NULL) { > write_file(bsdtar, a, entry); >- archive_entry_free(entry); >+ if (entry != spare_entry) { >+ archive_entry_free(entry); >+ } > entry = spare_entry; > spare_entry = NULL; > } >@@ -980,12 +966,11 @@ write_entry(struct bsdtar *bsdtar, struct archive *a, > safe_fprintf(stderr, "a "); > list_item_verbose(bsdtar, stderr, entry); > lafe_warnc(0, ": %s", archive_error_string(a)); >- } else if (bsdtar->verbose > 0) { >+ } else { > lafe_warnc(0, "%s: %s", > archive_entry_pathname(entry), > archive_error_string(a)); >- } else >- fprintf(stderr, ": %s", archive_error_string(a)); >+ } > } > > if (e == ARCHIVE_FATAL) >diff --git a/contrib/libarchive/test_utils/test_common.h b/contrib/libarchive/test_utils/test_common.h >index 8e1ec82436f8..9a20224a2065 100644 >--- a/contrib/libarchive/test_utils/test_common.h >+++ b/contrib/libarchive/test_utils/test_common.h >@@ -48,6 +48,9 @@ > #endif > > #include <sys/types.h> /* Windows requires this before sys/stat.h */ >+#if !HAVE_SUSECONDS_T >+#define suseconds_t long >+#endif > #include <sys/stat.h> > > #if HAVE_DIRENT_H >@@ -313,7 +316,7 @@ int assertion_non_empty_file(const char *, int, const char *); > int assertion_set_nodump(const char *, int, const char *); > int assertion_text_file_contents(const char *, int, const char *buff, const char *f); > int assertion_umask(const char *, int, int); >-int assertion_utimes(const char *, int, const char *, long, long, long, long ); >+int assertion_utimes(const char *, int, const char *, time_t, suseconds_t, time_t, suseconds_t); > int assertion_version(const char*, int, const char *, const char *); > > void skipping_setup(const char *, int); >diff --git a/contrib/libarchive/test_utils/test_main.c b/contrib/libarchive/test_utils/test_main.c >index 6617732a335b..76fcd79406ff 100644 >--- a/contrib/libarchive/test_utils/test_main.c >+++ b/contrib/libarchive/test_utils/test_main.c >@@ -85,6 +85,10 @@ > #include <membership.h> > #endif > >+#ifndef nitems >+#define nitems(arr) (sizeof(arr) / sizeof((arr)[0])) >+#endif >+ > /* > * > * Windows support routines >@@ -121,6 +125,8 @@ > #define access _access > #undef chdir > #define chdir _chdir >+#undef chmod >+#define chmod _chmod > #endif > #ifndef fileno > #define fileno _fileno >@@ -217,7 +223,8 @@ my_CreateSymbolicLinkA(const char *linkname, const char *target, > static BOOLEAN (WINAPI *f)(LPCSTR, LPCSTR, DWORD); > DWORD attrs; > static int set; >- int ret, tmpflags, llen, tlen; >+ int ret, tmpflags; >+ size_t llen, tlen; > int flags = 0; > char *src, *tgt, *p; > if (!set) { >@@ -233,10 +240,10 @@ my_CreateSymbolicLinkA(const char *linkname, const char *target, > if (tlen == 0 || llen == 0) > return (0); > >- tgt = malloc((tlen + 1) * sizeof(char)); >+ tgt = malloc(tlen + 1); > if (tgt == NULL) > return (0); >- src = malloc((llen + 1) * sizeof(char)); >+ src = malloc(llen + 1); > if (src == NULL) { > free(tgt); > return (0); >@@ -1237,16 +1244,19 @@ assertion_file_contains_lines_any_order(const char *file, int line, > } > expected_count = i; > if (expected_count) { >- expected = malloc(sizeof(char *) * expected_count); >+ expected = calloc(expected_count, sizeof(*expected)); > if (expected == NULL) { > failure_start(pathname, line, "Can't allocate memory"); > failure_finish(NULL); >- free(expected); >- free(buff); >- return (0); >+ goto cleanup; > } > for (i = 0; lines[i] != NULL; ++i) { > expected[i] = strdup(lines[i]); >+ if (expected[i] == NULL) { >+ failure_start(pathname, line, "Can't allocate memory"); >+ failure_finish(NULL); >+ goto cleanup; >+ } > } > } > >@@ -1264,9 +1274,7 @@ assertion_file_contains_lines_any_order(const char *file, int line, > if (actual == NULL) { > failure_start(pathname, line, "Can't allocate memory"); > failure_finish(NULL); >- free(expected); >- free(buff); >- return (0); >+ goto cleanup; > } > for (j = 0, p = buff; p < buff + buff_size; > p += 1 + strlen(p)) { >@@ -1279,8 +1287,6 @@ assertion_file_contains_lines_any_order(const char *file, int line, > > /* Erase matching lines from both lists */ > for (i = 0; i < expected_count; ++i) { >- if (expected[i] == NULL) >- continue; > for (j = 0; j < actual_count; ++j) { > if (actual[j] == NULL) > continue; >@@ -1303,9 +1309,9 @@ assertion_file_contains_lines_any_order(const char *file, int line, > ++actual_failure; > } > if (expected_failure == 0 && actual_failure == 0) { >- free(buff); >- free(expected); > free(actual); >+ free(expected); >+ free(buff); > return (1); > } > failure_start(file, line, "File doesn't match: %s", pathname); >@@ -1313,6 +1319,7 @@ assertion_file_contains_lines_any_order(const char *file, int line, > if (expected[i] != NULL) { > logprintf(" Expected but not present: %s\n", expected[i]); > free(expected[i]); >+ expected[i] = NULL; > } > } > for (j = 0; j < actual_count; ++j) { >@@ -1320,9 +1327,15 @@ assertion_file_contains_lines_any_order(const char *file, int line, > logprintf(" Present but not expected: %s\n", actual[j]); > } > failure_finish(NULL); >- free(buff); >- free(expected); >+cleanup: > free(actual); >+ if (expected != NULL) { >+ for (i = 0; i < expected_count; ++i) >+ if (expected[i] != NULL) >+ free(expected[i]); >+ free(expected); >+ } >+ free(buff); > return (0); > } > >@@ -1766,16 +1779,17 @@ is_symlink(const char *file, int line, > FILE_FLAG_OPEN_REPARSE_POINT; > > /* Replace slashes with backslashes in pathname */ >- pn = malloc((strlen(pathname) + 1) * sizeof(char)); >- p = pathname; >- s = pn; >- while(*p != '\0') { >- if(*p == '/') >+ pn = malloc(strlen(pathname) + 1); >+ if (pn == NULL) { >+ failure_start(file, line, "Can't allocate memory"); >+ failure_finish(NULL); >+ return (0); >+ } >+ for (p = pathname, s = pn; *p != '\0'; p++, s++) { >+ if (*p == '/') > *s = '\\'; > else > *s = *p; >- p++; >- s++; > } > *s = '\0'; > >@@ -2083,8 +2097,8 @@ assertion_umask(const char *file, int line, int mask) > > /* Set times, report failures. */ > int >-assertion_utimes(const char *file, int line, >- const char *pathname, long at, long at_nsec, long mt, long mt_nsec) >+assertion_utimes(const char *file, int line, const char *pathname, >+ time_t at, suseconds_t at_nsec, time_t mt, suseconds_t mt_nsec) > { > int r; > >@@ -2950,7 +2964,6 @@ setTestAcl(const char *path) > acl_permset_t permset; > const uid_t uid = 1; > uuid_t uuid; >- int i; > const acl_perm_t acl_perms[] = { > ACL_READ_DATA, > ACL_WRITE_DATA, >@@ -2992,7 +3005,7 @@ setTestAcl(const char *path) > failure("acl_get_permset() error: %s", strerror(errno)); > if (assertEqualInt(r, 0) == 0) > goto testacl_free; >- for (i = 0; i < (int)(sizeof(acl_perms) / sizeof(acl_perms[0])); i++) { >+ for (size_t i = 0; i < nitems(acl_perms); i++) { > r = acl_add_perm(permset, acl_perms[i]); > failure("acl_add_perm() error: %s", strerror(errno)); > if (assertEqualInt(r, 0) == 0) >@@ -3642,7 +3655,7 @@ test_run(int i, const char *tmpdir) > static void > usage(const char *program) > { >- static const int limit = sizeof(tests) / sizeof(tests[0]); >+ static const int limit = nitems(tests); > int i; > > printf("Usage: %s [options] <test> <test> ...\n", program); >@@ -3874,12 +3887,13 @@ get_test_set(int *test_set, int limit, const char *test) > int > main(int argc, char **argv) > { >- static const int limit = sizeof(tests) / sizeof(tests[0]); >- int test_set[sizeof(tests) / sizeof(tests[0])]; >+ static const int limit = nitems(tests); >+ int test_set[nitems(tests)]; > int i = 0, j = 0, tests_run = 0, tests_failed = 0, option; >- int testprogdir_len; >+ size_t testprogdir_len; >+ size_t tmplen; > #ifdef PROGRAM >- int tmp2_len; >+ size_t tmp2_len; > #endif > time_t now; > struct tm *tmptr; >@@ -3922,7 +3936,7 @@ main(int argc, char **argv) > */ > progname = p = argv[0]; > testprogdir_len = strlen(progname) + 1; >- if ((testprogdir = (char *)malloc(testprogdir_len)) == NULL) >+ if ((testprogdir = malloc(testprogdir_len)) == NULL) > { > fprintf(stderr, "ERROR: Out of memory."); > exit(1); >@@ -3950,7 +3964,7 @@ main(int argc, char **argv) > #endif > { > /* Fixup path for relative directories. */ >- if ((testprogdir = (char *)realloc(testprogdir, >+ if ((testprogdir = realloc(testprogdir, > strlen(pwd) + 1 + strlen(testprogdir) + 1)) == NULL) > { > fprintf(stderr, "ERROR: Out of memory."); >@@ -3977,6 +3991,9 @@ main(int argc, char **argv) > tmp = getenv("TEMPDIR"); > else > tmp = "/tmp"; >+ tmplen = strlen(tmp); >+ while (tmplen > 0 && tmp[tmplen - 1] == '/') >+ tmplen--; > > /* Allow -d to be controlled through the environment. */ > if (getenv(ENVBASE "_DEBUG") != NULL) >@@ -4070,7 +4087,7 @@ main(int argc, char **argv) > if (testprogfile == NULL) > { > tmp2_len = strlen(testprogdir) + 1 + strlen(PROGRAM) + 1; >- if ((tmp2 = (char *)malloc(tmp2_len)) == NULL) >+ if ((tmp2 = malloc(tmp2_len)) == NULL) > { > fprintf(stderr, "ERROR: Out of memory."); > exit(1); >@@ -4083,7 +4100,7 @@ main(int argc, char **argv) > > { > char *testprg; >- int testprg_len; >+ size_t testprg_len; > #if defined(_WIN32) && !defined(__CYGWIN__) > /* Command.com sometimes rejects '/' separators. */ > testprg = strdup(testprogfile); >@@ -4129,16 +4146,16 @@ main(int argc, char **argv) > #endif > strftime(tmpdir_timestamp, sizeof(tmpdir_timestamp), > "%Y-%m-%dT%H.%M.%S", tmptr); >- if ((strlen(tmp) + 1 + strlen(progname) + 1 + >- strlen(tmpdir_timestamp) + 1 + 3) > >- (sizeof(tmpdir) / sizeof(char))) { >+ if (tmplen + 1 + strlen(progname) + 1 + >+ strlen(tmpdir_timestamp) + 1 + 3 >= >+ nitems(tmpdir)) { > fprintf(stderr, > "ERROR: Temp directory pathname too long\n"); > exit(1); > } >- snprintf(tmpdir, sizeof(tmpdir), "%s/%s.%s-%03d", tmp, >- progname, tmpdir_timestamp, i); >- if (assertMakeDir(tmpdir,0755)) >+ snprintf(tmpdir, sizeof(tmpdir), "%.*s/%s.%s-%03d", >+ (int)tmplen, tmp, progname, tmpdir_timestamp, i); >+ if (assertMakeDir(tmpdir, 0755)) > break; > if (i >= 999) { > fprintf(stderr, >diff --git a/contrib/libarchive/unzip/bsdunzip.1 b/contrib/libarchive/unzip/bsdunzip.1 >index a67ca2327066..932f947090f0 100644 >--- a/contrib/libarchive/unzip/bsdunzip.1 >+++ b/contrib/libarchive/unzip/bsdunzip.1 >@@ -1,28 +1,9 @@ > .\"- >+.\" SPDX-License-Identifier: BSD-2-Clause >+.\" > .\" Copyright (c) 2007-2008 Dag-Erling Smørgrav > .\" All rights reserved. > .\" >-.\" Redistribution and use in source and binary forms, with or without >-.\" modification, are permitted provided that the following conditions >-.\" are met: >-.\" 1. Redistributions of source code must retain the above copyright >-.\" notice, this list of conditions and the following disclaimer. >-.\" 2. Redistributions in binary form must reproduce the above copyright >-.\" notice, this list of conditions and the following disclaimer in the >-.\" documentation and/or other materials provided with the distribution. >-.\" >-.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND >-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE >-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE >-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE >-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL >-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS >-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) >-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT >-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY >-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF >-.\" SUCH DAMAGE. >-.\" > .Dd June 27, 2023 > .Dt BSDUNZIP 1 > .Os >@@ -215,4 +196,4 @@ double-dash string used to separate options from arguments will need to > be repeated. > For example, to extract a "-a.jpg" from "-b.zip" with overwrite, one > would need to invoke >-.Dl bsdunzip -o -- -a.jpg -- -b.zip >+.Dl bsdunzip -o -- -a.jpg -- -b.zip >diff --git a/contrib/libarchive/unzip/bsdunzip.c b/contrib/libarchive/unzip/bsdunzip.c >index af3fb14c3636..5058e8798753 100644 >--- a/contrib/libarchive/unzip/bsdunzip.c >+++ b/contrib/libarchive/unzip/bsdunzip.c >@@ -4,43 +4,11 @@ > * Copyright (c) 2009, 2010 Joerg Sonnenberger <joerg@NetBSD.org> > * Copyright (c) 2007-2008 Dag-Erling Smørgrav > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer >- * in this position and unchanged. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND >- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE >- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE >- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE >- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL >- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS >- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) >- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT >- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY >- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF >- * SUCH DAMAGE. >- * >- * This file would be much shorter if we didn't care about command-line >- * compatibility with Info-ZIP's UnZip, which requires us to duplicate >- * parts of libarchive in order to gain more detailed control of its >- * behaviour for the purpose of implementing the -n, -o, -L and -a >- * options. > */ > > #include "bsdunzip_platform.h" > >-#ifdef HAVE_SYS_QUEUE_H >-#include <sys/queue.h> >-#else > #include "la_queue.h" >-#endif > #ifdef HAVE_SYS_STAT_H > #include <sys/stat.h> > #endif >@@ -484,13 +452,8 @@ handle_existing_file(char **path) > fprintf(stderr, > "replace %s? [y]es, [n]o, [A]ll, [N]one, [r]ename: ", > *path); >- if (fgets(buf, sizeof(buf), stdin) == NULL) { >- clearerr(stdin); >- printf("NULL\n(EOF or read error, " >- "treating as \"[N]one\"...)\n"); >- n_opt = 1; >- return -1; >- } >+ if (fgets(buf, sizeof(buf), stdin) == NULL) >+ goto stdin_err; > switch (*buf) { > case 'A': > o_opt = 1; >@@ -512,6 +475,8 @@ handle_existing_file(char **path) > *path = NULL; > alen = 0; > len = getline(path, &alen, stdin); >+ if (len < 1) >+ goto stdin_err; > if ((*path)[len - 1] == '\n') > (*path)[len - 1] = '\0'; > return 0; >@@ -519,6 +484,12 @@ handle_existing_file(char **path) > break; > } > } >+stdin_err: >+ clearerr(stdin); >+ printf("NULL\n(EOF or read error, " >+ "treating as \"[N]one\"...)\n"); >+ n_opt = 1; >+ return -1; > } > > /* >diff --git a/contrib/libarchive/unzip/bsdunzip.h b/contrib/libarchive/unzip/bsdunzip.h >index ab81e3930ec2..e2b7747e4419 100644 >--- a/contrib/libarchive/unzip/bsdunzip.h >+++ b/contrib/libarchive/unzip/bsdunzip.h >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2023, Martin Matuska > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > > #ifndef BSDUNZIP_H_INCLUDED >diff --git a/contrib/libarchive/unzip/bsdunzip_platform.h b/contrib/libarchive/unzip/bsdunzip_platform.h >index d4fcbb1aeab4..f00d57981db2 100644 >--- a/contrib/libarchive/unzip/bsdunzip_platform.h >+++ b/contrib/libarchive/unzip/bsdunzip_platform.h >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > > /* >@@ -58,7 +40,7 @@ > #define __LA_NORETURN __attribute__((__noreturn__)) > #elif defined(_MSC_VER) > #define __LA_NORETURN __declspec(noreturn) >-#else >+#else > #define __LA_NORETURN > #endif > >diff --git a/contrib/libarchive/unzip/cmdline.c b/contrib/libarchive/unzip/cmdline.c >index 4c6efc3e0694..8afddedd5ead 100644 >--- a/contrib/libarchive/unzip/cmdline.c >+++ b/contrib/libarchive/unzip/cmdline.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2008 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > > /* >diff --git a/contrib/libarchive/unzip/la_getline.c b/contrib/libarchive/unzip/la_getline.c >index 79a6bc010214..40ab35cde842 100644 >--- a/contrib/libarchive/unzip/la_getline.c >+++ b/contrib/libarchive/unzip/la_getline.c >@@ -1,32 +1,10 @@ > /* $NetBSD: getline.c,v 1.2 2014/09/16 17:23:50 christos Exp $ */ > > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2011 The NetBSD Foundation, Inc. > * All rights reserved. >- * >- * This code is derived from software contributed to The NetBSD Foundation >- * by Christos Zoulas. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS >- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED >- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS >- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR >- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF >- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS >- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN >- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) >- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE >- * POSSIBILITY OF SUCH DAMAGE. > */ > > #include "bsdunzip_platform.h" >diff --git a/contrib/libarchive/unzip/test/test.h b/contrib/libarchive/unzip/test/test.h >index 822c3f08133f..03cd03921c9c 100644 >--- a/contrib/libarchive/unzip/test/test.h >+++ b/contrib/libarchive/unzip/test/test.h >@@ -1,26 +1,8 @@ > /* >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2017 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > > /* Every test program should #include "test.h" as the first thing. */ >diff --git a/contrib/libarchive/unzip/test/test_0.c b/contrib/libarchive/unzip/test/test_0.c >index 41279d388b1f..32f757c9b0c6 100644 >--- a/contrib/libarchive/unzip/test/test_0.c >+++ b/contrib/libarchive/unzip/test/test_0.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2007 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/unzip/test/test_C.c b/contrib/libarchive/unzip/test/test_C.c >index fc11b970c2f3..66835c8406f3 100644 >--- a/contrib/libarchive/unzip/test/test_C.c >+++ b/contrib/libarchive/unzip/test/test_C.c >@@ -1,27 +1,8 @@ > /* >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2023 Adrian Vovk > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer >- * in this position and unchanged. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/unzip/test/test_I.c b/contrib/libarchive/unzip/test/test_I.c >index d189edca1a5c..2a656012f0a8 100644 >--- a/contrib/libarchive/unzip/test/test_I.c >+++ b/contrib/libarchive/unzip/test/test_I.c >@@ -1,27 +1,8 @@ > /* >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2023 Aaron Lindros > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer >- * in this position and unchanged. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >@@ -33,7 +14,12 @@ > DEFINE_TEST(test_I) > { > const char *reffile = "test_I.zip"; >- const char *lang; >+#if !defined(_WIN32) || defined(__CYGWIN__) >+ const char *envstr = "env LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 " >+ "LC_CTYPE=en_US.UTF-8"; >+#else >+ const char *envstr = ""; >+#endif > int r; > > #if HAVE_SETLOCALE >@@ -45,18 +31,12 @@ DEFINE_TEST(test_I) > skipping("setlocale() not available on this system."); > #endif > >- lang = getenv("LANG"); >- setenv("LANG", "en_US.UTF-8", 1); > extract_reference_file(reffile); >- r = systemf("%s -I UTF-8 %s >test.out 2>test.err", testprog, reffile); >+ r = systemf("%s %s -I UTF-8 %s >test.out 2>test.err", envstr, testprog, >+ reffile); > assertEqualInt(0, r); > assertNonEmptyFile("test.out"); > assertEmptyFile("test.err"); > > assertTextFileContents("Hello, World!\n", "Îειά ÏÎ¿Ï ÎÏÏμε.txt"); >- >- if (lang == NULL) >- unsetenv("LANG"); >- else >- setenv("LANG", lang, 1); > } >diff --git a/contrib/libarchive/unzip/test/test_L.c b/contrib/libarchive/unzip/test/test_L.c >index 4815cb2b139d..5b004d5d5707 100644 >--- a/contrib/libarchive/unzip/test/test_L.c >+++ b/contrib/libarchive/unzip/test/test_L.c >@@ -1,27 +1,8 @@ > /* >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2023 Adrian Vovk > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer >- * in this position and unchanged. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/unzip/test/test_P_encryption.c b/contrib/libarchive/unzip/test/test_P_encryption.c >index beabbaa646ee..e2cf3cda0ebd 100644 >--- a/contrib/libarchive/unzip/test/test_P_encryption.c >+++ b/contrib/libarchive/unzip/test/test_P_encryption.c >@@ -1,32 +1,13 @@ > /* >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2023 Adrian Vovk > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer >- * in this position and unchanged. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > > /* Test P arg - password protected */ >-DEFINE_TEST(test_P) >+DEFINE_TEST(test_P_encryption) > { > const char *reffile = "test_encrypted.zip"; > int r; >diff --git a/contrib/libarchive/unzip/test/test_Z1.c b/contrib/libarchive/unzip/test/test_Z1.c >index 58dc750030dd..2a3012b5bf8f 100644 >--- a/contrib/libarchive/unzip/test/test_Z1.c >+++ b/contrib/libarchive/unzip/test/test_Z1.c >@@ -1,27 +1,8 @@ > /* >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2023 Adrian Vovk > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer >- * in this position and unchanged. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/unzip/test/test_basic.c b/contrib/libarchive/unzip/test/test_basic.c >index e997755e7e57..1f37dcd416a3 100644 >--- a/contrib/libarchive/unzip/test/test_basic.c >+++ b/contrib/libarchive/unzip/test/test_basic.c >@@ -1,27 +1,8 @@ > /* >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2023 Adrian Vovk > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer >- * in this position and unchanged. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/unzip/test/test_d.c b/contrib/libarchive/unzip/test/test_d.c >index 01ab9b8caaa3..ea67246207f2 100644 >--- a/contrib/libarchive/unzip/test/test_d.c >+++ b/contrib/libarchive/unzip/test/test_d.c >@@ -1,27 +1,8 @@ > /* >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2023 Adrian Vovk > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer >- * in this position and unchanged. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/unzip/test/test_doubledash.c b/contrib/libarchive/unzip/test/test_doubledash.c >index eb7d34e4f6cc..4467213dbb89 100644 >--- a/contrib/libarchive/unzip/test/test_doubledash.c >+++ b/contrib/libarchive/unzip/test/test_doubledash.c >@@ -1,27 +1,8 @@ > /* >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2023 Adrian Vovk > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer >- * in this position and unchanged. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/unzip/test/test_glob.c b/contrib/libarchive/unzip/test/test_glob.c >index b334ce4bd37d..b53aa16fd85c 100644 >--- a/contrib/libarchive/unzip/test/test_glob.c >+++ b/contrib/libarchive/unzip/test/test_glob.c >@@ -1,27 +1,8 @@ > /* >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2023 Adrian Vovk > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer >- * in this position and unchanged. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/unzip/test/test_j.c b/contrib/libarchive/unzip/test/test_j.c >index a449e02644b5..b87229f42e25 100644 >--- a/contrib/libarchive/unzip/test/test_j.c >+++ b/contrib/libarchive/unzip/test/test_j.c >@@ -1,27 +1,8 @@ > /* >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2023 Adrian Vovk > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer >- * in this position and unchanged. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/unzip/test/test_n.c b/contrib/libarchive/unzip/test/test_n.c >index 4e893f04b7ae..bb75c5d7696d 100644 >--- a/contrib/libarchive/unzip/test/test_n.c >+++ b/contrib/libarchive/unzip/test/test_n.c >@@ -1,31 +1,12 @@ > /* >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2023 Adrian Vovk > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer >- * in this position and unchanged. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >-/* Test n arg - don't overrite existing files */ >+/* Test n arg - don't overwrite existing files */ > DEFINE_TEST(test_n) > { > const char *reffile = "test_basic.zip"; >diff --git a/contrib/libarchive/unzip/test/test_not_exist.c b/contrib/libarchive/unzip/test/test_not_exist.c >index aa660dc646e5..6b206a74b261 100644 >--- a/contrib/libarchive/unzip/test/test_not_exist.c >+++ b/contrib/libarchive/unzip/test/test_not_exist.c >@@ -1,31 +1,12 @@ > /* >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2023 Adrian Vovk > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer >- * in this position and unchanged. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >-/* Test non existant file */ >+/* Test non existent file */ > DEFINE_TEST(test_not_exist) > { > int r; >diff --git a/contrib/libarchive/unzip/test/test_o.c b/contrib/libarchive/unzip/test/test_o.c >index af0c4128686f..64f946774440 100644 >--- a/contrib/libarchive/unzip/test/test_o.c >+++ b/contrib/libarchive/unzip/test/test_o.c >@@ -1,31 +1,12 @@ > /* >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2023 Adrian Vovk > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer >- * in this position and unchanged. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >-/* Test o arg - overrite existing files */ >+/* Test o arg - overwrite existing files */ > DEFINE_TEST(test_o) > { > const char *reffile = "test_basic.zip"; >diff --git a/contrib/libarchive/unzip/test/test_p.c b/contrib/libarchive/unzip/test/test_p.c >index f34a5eae8e13..8bfffbe5dc39 100644 >--- a/contrib/libarchive/unzip/test/test_p.c >+++ b/contrib/libarchive/unzip/test/test_p.c >@@ -1,27 +1,8 @@ > /* >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2023 Adrian Vovk > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer >- * in this position and unchanged. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/unzip/test/test_q.c b/contrib/libarchive/unzip/test/test_q.c >index 9a532c888366..13222a483992 100644 >--- a/contrib/libarchive/unzip/test/test_q.c >+++ b/contrib/libarchive/unzip/test/test_q.c >@@ -1,27 +1,8 @@ > /* >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2023 Adrian Vovk > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer >- * in this position and unchanged. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/unzip/test/test_singlefile.c b/contrib/libarchive/unzip/test/test_singlefile.c >index 70c376eb3932..a72811f046d9 100644 >--- a/contrib/libarchive/unzip/test/test_singlefile.c >+++ b/contrib/libarchive/unzip/test/test_singlefile.c >@@ -1,27 +1,8 @@ > /* >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2023 Adrian Vovk > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer >- * in this position and unchanged. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/unzip/test/test_t.c b/contrib/libarchive/unzip/test/test_t.c >index 40d8d39e54d5..55a516fc636f 100644 >--- a/contrib/libarchive/unzip/test/test_t.c >+++ b/contrib/libarchive/unzip/test/test_t.c >@@ -1,27 +1,8 @@ > /* >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2023 Adrian Vovk > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer >- * in this position and unchanged. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/unzip/test/test_t_bad.c b/contrib/libarchive/unzip/test/test_t_bad.c >index f9afbb40dae2..a9535ca511e9 100644 >--- a/contrib/libarchive/unzip/test/test_t_bad.c >+++ b/contrib/libarchive/unzip/test/test_t_bad.c >@@ -1,27 +1,8 @@ > /* >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2023 Adrian Vovk > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer >- * in this position and unchanged. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/unzip/test/test_version.c b/contrib/libarchive/unzip/test/test_version.c >index efa797982d57..607a4f501363 100644 >--- a/contrib/libarchive/unzip/test/test_version.c >+++ b/contrib/libarchive/unzip/test/test_version.c >@@ -1,26 +1,8 @@ > /*- >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2003-2017 Tim Kientzle > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/contrib/libarchive/unzip/test/test_x.c b/contrib/libarchive/unzip/test/test_x.c >index d55376849ce9..959beb1950df 100644 >--- a/contrib/libarchive/unzip/test/test_x.c >+++ b/contrib/libarchive/unzip/test/test_x.c >@@ -1,27 +1,8 @@ > /* >+ * SPDX-License-Identifier: BSD-2-Clause >+ * > * Copyright (c) 2023 Adrian Vovk > * All rights reserved. >- * >- * Redistribution and use in source and binary forms, with or without >- * modification, are permitted provided that the following conditions >- * are met: >- * 1. Redistributions of source code must retain the above copyright >- * notice, this list of conditions and the following disclaimer >- * in this position and unchanged. >- * 2. Redistributions in binary form must reproduce the above copyright >- * notice, this list of conditions and the following disclaimer in the >- * documentation and/or other materials provided with the distribution. >- * >- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR >- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES >- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. >- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, >- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT >- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > #include "test.h" > >diff --git a/lib/libarchive/tests/Makefile b/lib/libarchive/tests/Makefile >index dc3767c319c3..2684d1661e57 100644 >--- a/lib/libarchive/tests/Makefile >+++ b/lib/libarchive/tests/Makefile >@@ -26,12 +26,14 @@ CFLAGS.test_utils.c+= -Wno-cast-align > > .PATH: ${_LIBARCHIVEDIR}/libarchive/test > TESTS_SRCS= \ >+ test_7zip_filename_encoding.c \ > test_acl_nfs4.c \ > test_acl_pax.c \ > test_acl_platform_nfs4.c \ > test_acl_platform_posix1e.c \ > test_acl_posix1e.c \ > test_acl_text.c \ >+ test_ar_mode.c \ > test_archive_api_feature.c \ > test_archive_clear_error.c \ > test_archive_cmdline.c \ >@@ -41,6 +43,7 @@ TESTS_SRCS= \ > test_archive_match_owner.c \ > test_archive_match_path.c \ > test_archive_pathmatch.c \ >+ test_archive_read.c \ > test_archive_read_add_passphrase.c \ > test_archive_read_close_twice.c \ > test_archive_read_close_twice_open_fd.c \ >@@ -108,6 +111,7 @@ TESTS_SRCS= \ > test_read_file_nonexistent.c \ > test_read_filter_compress.c \ > test_read_filter_grzip.c \ >+ test_read_filter_gzip_recursive.c \ > test_read_filter_lrzip.c \ > test_read_filter_lzop.c \ > test_read_filter_lzop_multiple_parts.c \ >@@ -146,6 +150,7 @@ TESTS_SRCS= \ > test_read_format_gtar_lzma.c \ > test_read_format_gtar_sparse.c \ > test_read_format_gtar_sparse_skip_entry.c \ >+ test_read_format_huge_rpm.c \ > test_read_format_iso_Z.c \ > test_read_format_iso_multi_extent.c \ > test_read_format_iso_xorriso.c \ >@@ -167,6 +172,7 @@ TESTS_SRCS= \ > test_read_format_pax_bz2.c \ > test_read_format_rar.c \ > test_read_format_rar5.c \ >+ test_read_format_rar_encryption.c \ > test_read_format_rar_encryption_data.c \ > test_read_format_rar_encryption_header.c \ > test_read_format_rar_encryption_partially.c \ >@@ -180,6 +186,7 @@ TESTS_SRCS= \ > test_read_format_tar_empty_with_gnulabel.c \ > test_read_format_tar_filename.c \ > test_read_format_tar_invalid_pax_size.c \ >+ test_read_format_tar_pax_large_attr.c \ > test_read_format_tbz.c \ > test_read_format_tgz.c \ > test_read_format_tlz.c \ >@@ -238,6 +245,7 @@ TESTS_SRCS= \ > test_write_disk_no_hfs_compression.c \ > test_write_disk_perms.c \ > test_write_disk_secure.c \ >+ test_write_disk_secure_noabsolutepaths.c \ > test_write_disk_secure744.c \ > test_write_disk_secure745.c \ > test_write_disk_secure746.c \ >@@ -304,6 +312,7 @@ TESTS_SRCS= \ > test_write_format_zip_zip64.c \ > test_write_format_zip64_stream.c \ > test_write_format_zip_stream.c \ >+ test_write_format_zip_windows_path.c \ > test_write_open_memory.c \ > test_write_read_format_zip.c \ > test_xattr_platform.c \ >@@ -429,6 +438,7 @@ ${PACKAGE}FILES+= test_rar_multivolume_uncompressed_files.part08.rar.uu > ${PACKAGE}FILES+= test_rar_multivolume_uncompressed_files.part09.rar.uu > ${PACKAGE}FILES+= test_rar_multivolume_uncompressed_files.part10.rar.uu > ${PACKAGE}FILES+= test_read_filter_grzip.tar.grz.uu >+${PACKAGE}FILES+= test_read_filter_gzip_recursive.gz.uu > ${PACKAGE}FILES+= test_read_filter_lrzip.tar.lrz.uu > ${PACKAGE}FILES+= test_read_filter_lzop.tar.lzo.uu > ${PACKAGE}FILES+= test_read_filter_lzop_multiple_parts.tar.lzo.uu >@@ -462,6 +472,7 @@ ${PACKAGE}FILES+= test_read_format_7zip_empty_file.7z.uu > ${PACKAGE}FILES+= test_read_format_7zip_encryption.7z.uu > ${PACKAGE}FILES+= test_read_format_7zip_encryption_header.7z.uu > ${PACKAGE}FILES+= test_read_format_7zip_encryption_partially.7z.uu >+${PACKAGE}FILES+= test_read_format_7zip_extract_second.7z.uu > ${PACKAGE}FILES+= test_read_format_7zip_lzma1.7z.uu > ${PACKAGE}FILES+= test_read_format_7zip_lzma1_2.7z.uu > ${PACKAGE}FILES+= test_read_format_7zip_lzma1_lzma2.7z.uu >@@ -503,8 +514,10 @@ ${PACKAGE}FILES+= test_read_format_gtar_sparse_1_17_posix01.tar.uu > ${PACKAGE}FILES+= test_read_format_gtar_sparse_1_17_posix10.tar.uu > ${PACKAGE}FILES+= test_read_format_gtar_sparse_1_17_posix10_modified.tar.uu > ${PACKAGE}FILES+= test_read_format_gtar_sparse_skip_entry.tar.Z.uu >+${PACKAGE}FILES+= test_read_format_huge_rpm.rpm.uu > ${PACKAGE}FILES+= test_read_format_iso.iso.Z.uu > ${PACKAGE}FILES+= test_read_format_iso_2.iso.Z.uu >+${PACKAGE}FILES+= test_read_format_iso_3.iso.Z.uu > ${PACKAGE}FILES+= test_read_format_iso_joliet.iso.Z.uu > ${PACKAGE}FILES+= test_read_format_iso_joliet_by_nero.iso.Z.uu > ${PACKAGE}FILES+= test_read_format_iso_joliet_long.iso.Z.uu >@@ -555,9 +568,14 @@ ${PACKAGE}FILES+= test_read_format_rar_sfx.exe.uu > ${PACKAGE}FILES+= test_read_format_rar_subblock.rar.uu > ${PACKAGE}FILES+= test_read_format_rar_unicode.rar.uu > ${PACKAGE}FILES+= test_read_format_rar_windows.rar.uu >+${PACKAGE}FILES+= test_read_format_rar4_encrypted.rar.uu >+${PACKAGE}FILES+= test_read_format_rar4_encrypted_filenames.rar.uu >+${PACKAGE}FILES+= test_read_format_rar4_solid_encrypted.rar.uu >+${PACKAGE}FILES+= test_read_format_rar4_solid_encrypted_filenames.rar.uu > ${PACKAGE}FILES+= test_read_format_rar5_arm.rar.uu > ${PACKAGE}FILES+= test_read_format_rar5_arm_filter_on_window_boundary.rar.uu > ${PACKAGE}FILES+= test_read_format_rar5_bad_window_sz_in_mltarc_file.rar.uu >+${PACKAGE}FILES+= test_read_format_rar5_data_ready_pointer_leak.rar.uu > ${PACKAGE}FILES+= test_read_format_rar5_blake2.rar.uu > ${PACKAGE}FILES+= test_read_format_rar5_block_size_is_too_small.rar.uu > ${PACKAGE}FILES+= test_read_format_rar5_compressed.rar.uu >@@ -566,6 +584,10 @@ ${PACKAGE}FILES+= test_read_format_rar5_different_solid_window_size.rar.uu > ${PACKAGE}FILES+= test_read_format_rar5_different_window_size.rar.uu > ${PACKAGE}FILES+= test_read_format_rar5_different_winsize_on_merge.rar.uu > ${PACKAGE}FILES+= test_read_format_rar5_distance_overflow.rar.uu >+${PACKAGE}FILES+= test_read_format_rar5_encrypted.rar.uu >+${PACKAGE}FILES+= test_read_format_rar5_encrypted_filenames.rar.uu >+${PACKAGE}FILES+= test_read_format_rar5_solid_encrypted.rar.uu >+${PACKAGE}FILES+= test_read_format_rar5_solid_encrypted_filenames.rar.uu > ${PACKAGE}FILES+= test_read_format_rar5_extra_field_version.rar.uu > ${PACKAGE}FILES+= test_read_format_rar5_fileattr.rar.uu > ${PACKAGE}FILES+= test_read_format_rar5_hardlink.rar.uu >@@ -608,11 +630,13 @@ ${PACKAGE}FILES+= test_read_format_tar_empty_with_gnulabel.tar.uu > ${PACKAGE}FILES+= test_read_format_tar_empty_pax.tar.Z.uu > ${PACKAGE}FILES+= test_read_format_tar_filename_koi8r.tar.Z.uu > ${PACKAGE}FILES+= test_read_format_tar_invalid_pax_size.tar.uu >+${PACKAGE}FILES+= test_read_format_tar_pax_large_attr.tar.Z.uu > ${PACKAGE}FILES+= test_read_format_ustar_filename_cp866.tar.Z.uu > ${PACKAGE}FILES+= test_read_format_ustar_filename_eucjp.tar.Z.uu > ${PACKAGE}FILES+= test_read_format_ustar_filename_koi8r.tar.Z.uu > ${PACKAGE}FILES+= test_read_format_warc.warc.uu > ${PACKAGE}FILES+= test_read_format_xar_doublelink.xar.uu >+${PACKAGE}FILES+= test_read_format_xar_duplicate_filename_node.xar.uu > ${PACKAGE}FILES+= test_read_format_zip.zip.uu > ${PACKAGE}FILES+= test_read_format_zip_7075_utf8_paths.zip.uu > ${PACKAGE}FILES+= test_read_format_zip_7z_deflate.zip.uu >diff --git a/usr.bin/cpio/tests/Makefile b/usr.bin/cpio/tests/Makefile >index 385112c1a9a2..9e1028c7eb58 100644 >--- a/usr.bin/cpio/tests/Makefile >+++ b/usr.bin/cpio/tests/Makefile >@@ -33,6 +33,7 @@ TESTS_SRCS= \ > test_0.c \ > test_basic.c \ > test_cmdline.c \ >+ test_extract_cpio_absolute_paths.c \ > test_extract_cpio_Z.c \ > test_extract_cpio_bz2.c \ > test_extract_cpio_grz.c \ >diff --git a/usr.bin/tar/tests/Makefile b/usr.bin/tar/tests/Makefile >index 4f143993f8f1..e684ab6b8873 100644 >--- a/usr.bin/tar/tests/Makefile >+++ b/usr.bin/tar/tests/Makefile >@@ -47,6 +47,7 @@ TESTS_SRCS= \ > test_option_H_upper.c \ > test_option_L_upper.c \ > test_option_O_upper.c \ >+ test_option_P.c \ > test_option_T_upper.c \ > test_option_U_upper.c \ > test_option_X_upper.c \
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 282047
:
254196
|
254197