Title: [285349] trunk/Tools
Revision
285349
Author
timothy_hor...@apple.com
Date
2021-11-05 12:08:39 -0700 (Fri, 05 Nov 2021)

Log Message

generate-xcfilelists doesn't work if build path contains a `+`
https://bugs.webkit.org/show_bug.cgi?id=232493

Reviewed by Simon Fraser.

* Scripts/webkitpy/generate_xcfilelists_lib/generators.py:
(BaseGenerator._generate_derived):
(BaseGenerator._replaceSinglePrefix):
(BaseGenerator._replacePrefix):
(BaseGenerator._unexpand._try_unexpand):
(BaseGenerator._replace): Deleted.
The xcfilelist generator had a regex injection issue that resulted in
paths with not-very-special characters causing it to infinitely
regenerate the xcfilelists; we can just use simple string prefix
replacement instead.

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (285348 => 285349)


--- trunk/Tools/ChangeLog	2021-11-05 18:57:00 UTC (rev 285348)
+++ trunk/Tools/ChangeLog	2021-11-05 19:08:39 UTC (rev 285349)
@@ -1,3 +1,21 @@
+2021-11-05  Tim Horton  <timothy_hor...@apple.com>
+
+        generate-xcfilelists doesn't work if build path contains a `+`
+        https://bugs.webkit.org/show_bug.cgi?id=232493
+
+        Reviewed by Simon Fraser.
+
+        * Scripts/webkitpy/generate_xcfilelists_lib/generators.py:
+        (BaseGenerator._generate_derived):
+        (BaseGenerator._replaceSinglePrefix):
+        (BaseGenerator._replacePrefix):
+        (BaseGenerator._unexpand._try_unexpand):
+        (BaseGenerator._replace): Deleted.
+        The xcfilelist generator had a regex injection issue that resulted in
+        paths with not-very-special characters causing it to infinitely
+        regenerate the xcfilelists; we can just use simple string prefix
+        replacement instead.
+
 2021-11-05  Devin Rousso  <drou...@apple.com>
 
         [css-values-4] viewport units should be floats

Modified: trunk/Tools/Scripts/webkitpy/generate_xcfilelists_lib/generators.py (285348 => 285349)


--- trunk/Tools/Scripts/webkitpy/generate_xcfilelists_lib/generators.py	2021-11-05 18:57:00 UTC (rev 285348)
+++ trunk/Tools/Scripts/webkitpy/generate_xcfilelists_lib/generators.py	2021-11-05 19:08:39 UTC (rev 285349)
@@ -278,10 +278,10 @@
             input_lines = self._get_file_lines(input.name)
             output_lines = self._get_file_lines(output.name)
 
-            input_lines = self._replace(input_lines, "^_javascript_Core/",               "$(PROJECT_DIR)/")
-            input_lines = self._replace(input_lines, "^_javascript_CorePrivateHeaders/", "$(_javascript_CORE_PRIVATE_HEADERS_DIR)/")
-            input_lines = self._replace(input_lines, "^WebCore/",                      "$(PROJECT_DIR)/")
-            input_lines = self._replace(input_lines, "^WebKit2PrivateHeaders/",        "$(WEBKIT2_PRIVATE_HEADERS_DIR)/")
+            input_lines = self._replacePrefix(input_lines, "_javascript_Core/",               "$(PROJECT_DIR)/")
+            input_lines = self._replacePrefix(input_lines, "_javascript_CorePrivateHeaders/", "$(_javascript_CORE_PRIVATE_HEADERS_DIR)/")
+            input_lines = self._replacePrefix(input_lines, "WebCore/",                      "$(PROJECT_DIR)/")
+            input_lines = self._replacePrefix(input_lines, "WebKit2PrivateHeaders/",        "$(WEBKIT2_PRIVATE_HEADERS_DIR)/")
 
             input_lines = self._unexpand(input_lines, "_javascript_CORE_PRIVATE_HEADERS_DIR")
             input_lines = self._unexpand(input_lines, "PROJECT_DIR")
@@ -290,7 +290,7 @@
             input_lines = self._unexpand(input_lines, "WEBKITADDITIONS_HEADERS_FOLDER_PATH")
             input_lines = self._unexpand(input_lines, "BUILT_PRODUCTS_DIR")    # Do this last, since it's a prefix of some other variables and will "intercept" them if executed earlier than them.
 
-            output_lines = self._replace(output_lines, "^", self._get_derived_sources_dir() + "/")
+            output_lines = [self._get_derived_sources_dir() + "/" + line for line in output_lines]
             output_lines = self._unexpand(output_lines, "BUILT_PRODUCTS_DIR")
 
             self.added_lines_input_derived = self._find_added_lines(input_lines, self._get_input_derived_xcfilelist_project_path())
@@ -343,9 +343,14 @@
     # Utility for post-processing the initial .xcfilelist content. Used to
     # replace text in the file.
 
+    def _replaceSinglePrefix(self, line, prefix, replace_with):
+        if line.startswith(prefix):
+            return replace_with + line[len(prefix):]
+        return line
+
     @util.LogEntryExit
-    def _replace(self, lines, to_replace, replace_with):
-        return set([re.sub(to_replace, replace_with, line) for line in lines])
+    def _replacePrefix(self, lines, to_replace, replace_with):
+        return set([self._replaceSinglePrefix(line, to_replace, replace_with) for line in lines])
 
     # Utility for post-processing the initial .xcfilelist content. Used to
     # replace file path segments with the variables that represent those path
@@ -417,7 +422,7 @@
             return (x for x in _gen(path))
 
         def _try_unexpand(prefix, line):
-            new_line = re.sub("^{}/".format(prefix), "$({})/".format(variable_name), line)
+            new_line = self._replaceSinglePrefix(line, prefix + "/", "$({})/".format(variable_name))
             return new_line != line, new_line
 
         def _do_unexpand(line):
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to