File 0731-stdlib-fix-failed-tests-asserting-for-is_ustar.patch of Package erlang

From 451d2d0612e6cc1c28f4f3e4b0bc2ece128fc55c Mon Sep 17 00:00:00 2001
From: lucioleKi <isabell@erlang.org>
Date: Mon, 14 Oct 2024 09:44:36 +0200
Subject: [PATCH] stdlib: fix failed tests asserting for is_ustar

When user's id has a length > 7 in octal, tars created in tar_SUITE
always have typeflag 'x'. They are not plain USTAR archives. Asserting
true for `is_ustar`` in those cases will fail. This fix adds the uid
info to config, and skip assertions for `is_ustar` when uid is long.
---
 lib/stdlib/src/erl_tar.erl    |  2 +-
 lib/stdlib/test/tar_SUITE.erl | 45 +++++++++++++++++++++++++----------
 2 files changed, 34 insertions(+), 13 deletions(-)

diff --git a/lib/stdlib/doc/src/erl_tar.xml b/lib/stdlib/doc/src/erl_tar.xml
index 90302906a2..e05d1176f7 100644
--- a/lib/stdlib/doc/src/erl_tar.xml
+++ b/lib/stdlib/doc/src/erl_tar.xml
@@ -119,7 +119,7 @@
         apply them manually.</p>
       </item>
       <item>
-        <p>Like the above, if you must remain USTAR compatible, you must also ensure than paths for
+        <p>Like the above, if you must remain USTAR compatible, you must also ensure that paths for
         symbolic/hard links are no more than 100 bytes, otherwise PAX headers will be used.</p>
       </item>
     </list>
diff --git a/lib/stdlib/test/tar_SUITE.erl b/lib/stdlib/test/tar_SUITE.erl
index 294741574c..499a9ee5d2 100644
--- a/lib/stdlib/test/tar_SUITE.erl
+++ b/lib/stdlib/test/tar_SUITE.erl
@@ -50,7 +50,7 @@ groups() ->
     [].
 
 init_per_suite(Config) ->
-    Config.
+    uid_config(Config).
 
 end_per_suite(_Config) ->
     ok.
@@ -83,7 +83,7 @@ borderline(Config) when is_list(Config) ->
     Record = 512,
     Block = 20 * Record,
 
-    lists:foreach(fun(Size) -> borderline_test(Size, TempDir) end,
+    lists:foreach(fun(Size) -> borderline_test(Size, TempDir, Config) end,
 		  [0, 1, 10, 13, 127, 333, Record-1, Record, Record+1,
 		   Block-2*Record-1, Block-2*Record, Block-2*Record+1,
 		   Block-Record-1, Block-Record, Block-Record+1,
@@ -95,13 +95,16 @@ borderline(Config) when is_list(Config) ->
 
     verify_ports(Config).
 
-borderline_test(Size, TempDir) ->
+borderline_test(Size, TempDir, Config) ->
     io:format("Testing size ~p", [Size]),
-    borderline_test(Size, TempDir, true),
-    borderline_test(Size, TempDir, false),
+    case long_uid(Config) of
+        true -> ok;
+        false -> borderline_test1(Size, TempDir, true)
+    end,
+    borderline_test1(Size, TempDir, false),
     ok.
 
-borderline_test(Size, TempDir, IsUstar) ->
+borderline_test1(Size, TempDir, IsUstar) ->
     Prefix = case IsUstar of
                  true ->
                      "file_";
@@ -341,7 +344,6 @@ create_long_names() ->
     ok = erl_tar:tt(TarName),
 
     %% Extract and verify.
-    true = is_ustar(TarName),
     ExtractDir = "extract_dir",
     ok = file:make_dir(ExtractDir),
     ok = erl_tar:extract(TarName, [{cwd,ExtractDir}]),
@@ -588,7 +590,7 @@ symlinks(Config) when is_list(Config) ->
 	      {error, enotsup} ->
 		  {skip, "Symbolic links not supported on this platform"};
 	      ok ->
-		  symlinks(Dir, "bad_symlink", PointsTo),
+		  symlinks(Dir, "bad_symlink", PointsTo, Config),
 		  long_symlink(Dir),
                   symlink_vulnerability(VulnerableDir)
 	  end,
@@ -621,7 +623,7 @@ make_symlink(Path, Link) ->
 	    file:make_symlink(Path, Link)
     end.
 
-symlinks(Dir, BadSymlink, PointsTo) ->
+symlinks(Dir, BadSymlink, PointsTo, Config) ->
     Tar = filename:join(Dir, "symlink.tar"),
     DerefTar = filename:join(Dir, "dereference.tar"),
 
@@ -634,7 +636,6 @@ symlinks(Dir, BadSymlink, PointsTo) ->
     ok = file:write_file(AFile, ALine),
     ok = file:make_symlink(AFile, GoodSymlink),
     ok = erl_tar:create(Tar, [BadSymlink, GoodSymlink, AFile], [verbose]),
-    true = is_ustar(Tar),
 
     %% List contents of tar file.
 
@@ -643,7 +644,12 @@ symlinks(Dir, BadSymlink, PointsTo) ->
     %% Also create another archive with the dereference flag.
 
     ok = erl_tar:create(DerefTar, [AFile, GoodSymlink], [dereference, verbose]),
-    true = is_ustar(DerefTar),
+    case long_uid(Config) of
+        true -> ok;
+        false ->
+            true = is_ustar(Tar),
+            true = is_ustar(DerefTar)
+    end,
 
     %% Extract files to a new directory.
 
@@ -774,7 +780,11 @@ open_add_close(Config) when is_list(Config) ->
     ok = erl_tar:add(AD, ADir, [verbose]),
     ok = erl_tar:add(AD, AnotherDir, [verbose]),
     ok = erl_tar:close(AD),
-    true = is_ustar(TarOne),
+    case long_uid(Config) of
+        true -> ok;
+        false ->
+            true = is_ustar(TarOne)
+    end,
 
     ok = erl_tar:t(TarOne),
     ok = erl_tar:tt(TarOne),
@@ -1137,3 +1147,14 @@ verify_ports(Config) ->
         [_|_]=Rem ->
             error({leaked_ports,Rem})
     end.
+
+uid_config(Config) ->
+    DataDir = proplists:get_value(data_dir, Config),
+    Long = filename:join(DataDir, "long_names.tar"),
+    {ok, FileInfo} = file:read_file_info(Long),
+    Uid = FileInfo#file_info.uid,
+    Octal = integer_to_list(Uid, 8),
+    [{longuid, length(Octal) > 7}|Config].
+
+long_uid(Config) ->
+    proplists:get_value(longuid, Config).
\ No newline at end of file
-- 
2.43.0

openSUSE Build Service is sponsored by