[ 
https://issues.apache.org/jira/browse/MSHARED-1453?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17901429#comment-17901429
 ] 

ASF GitHub Bot commented on MSHARED-1453:
-----------------------------------------

gnodet commented on code in PR #77:
URL: https://github.com/apache/maven-archiver/pull/77#discussion_r1860344521


##########
src/test/java/org/apache/maven/shared/archiver/PomPropertiesUtilTest.java:
##########
@@ -81,4 +82,36 @@ void testUnicodeEscape() throws IOException {
         assertEquals("version=2.1.5", contents.get(2));
         assertEquals(3, contents.size());
     }
+
+    @Test
+    void testWhitespaceEscape() throws IOException {
+        Path pomPropertiesFile = tempDirectory.resolve("bar.properties");
+        Path customPomPropertiesFile = 
tempDirectory.resolve("custom.properties");
+        try (Writer out = Files.newBufferedWriter(customPomPropertiesFile, 
StandardCharsets.ISO_8859_1)) {
+            
out.write("a\\u0020key\\u0020with\\u0009whitespace=value\\u0020with\\u0009whitespace\n");
+        }
+
+        util.createPomProperties(
+                (Session) null,
+                "org.foo",
+                "こんにちは",
+                "2.1.5",
+                new JarArchiver(),
+                customPomPropertiesFile,
+                pomPropertiesFile,
+                true);
+        assertThat(pomPropertiesFile).exists();
+
+        Properties actual = new Properties();
+        actual.load(Files.newInputStream(pomPropertiesFile));
+        assertEquals("value with\twhitespace", actual.getProperty("a key 
with\twhitespace"));
+
+        // Now read the file directly to check for alphabetical order and 
encoding
+        List<String> contents = Files.readAllLines(pomPropertiesFile, 
StandardCharsets.ISO_8859_1);
+        assertEquals(4, contents.size());
+        assertEquals("a\\ key\\ with\\\twhitespace=value\\ 
with\\\twhitespace", contents.get(0));

Review Comment:
   the test is wrong afaik. The mechanism is different for keys and values
   
   > Then every entry in this Properties table is written out, one per line. 
For each entry the key string is written, then an ASCII =, then the associated 
element string. For the key, all space characters are written with a preceding 
\ character. For the element, leading space characters, but not embedded or 
trailing space characters, are written with a preceding \ character. The key 
and element characters #, !, =, and : are written with a preceding backslash to 
ensure that they are properly loaded.





> Canonicalize properties files for reproducible builds
> -----------------------------------------------------
>
>                 Key: MSHARED-1453
>                 URL: https://issues.apache.org/jira/browse/MSHARED-1453
>             Project: Maven Shared Components
>          Issue Type: Bug
>          Components: maven-archiver
>            Reporter: Elliotte Rusty Harold
>            Assignee: Elliotte Rusty Harold
>            Priority: Minor
>
> See discussion on https://github.com/apache/maven-archiver/pull/77/files
> Briefly, properties files have non-unique representations and there's no 
> guarantee two JDKs from different companies and Java versions produce the 
> same byte-per-byte serialization. Our current code accounts for property 
> order and comments, but not variations in escaping (hex vs. UTF-8), separator 
> characters, and insignificant whitespace. 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to