Title: [281972] trunk/Source/_javascript_Core
Revision
281972
Author
ysuz...@apple.com
Date
2021-09-02 19:14:37 -0700 (Thu, 02 Sep 2021)

Log Message

[JSC] Fix WebKitAdditions directory traversal in offlineasm
https://bugs.webkit.org/show_bug.cgi?id=229841

Reviewed by Mark Lam.

When DEPLOYMENT_LOCATION is YES, WebKitAdditions directory becomes /usr/local/include/WebKitAdditions.
This patch adds --use-deployment-location option to generate_offset_extractor.rb, generate_settings_extractor.rb,
and asm.rb. And they pass it to parser to change the include directory.

* _javascript_Core.xcodeproj/project.pbxproj:
* offlineasm/asm.rb:
* offlineasm/generate_offset_extractor.rb:
* offlineasm/generate_settings_extractor.rb:
* offlineasm/parser.rb:

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (281971 => 281972)


--- trunk/Source/_javascript_Core/ChangeLog	2021-09-03 01:38:18 UTC (rev 281971)
+++ trunk/Source/_javascript_Core/ChangeLog	2021-09-03 02:14:37 UTC (rev 281972)
@@ -1,3 +1,20 @@
+2021-09-02  Yusuke Suzuki  <ysuz...@apple.com>
+
+        [JSC] Fix WebKitAdditions directory traversal in offlineasm
+        https://bugs.webkit.org/show_bug.cgi?id=229841
+
+        Reviewed by Mark Lam.
+
+        When DEPLOYMENT_LOCATION is YES, WebKitAdditions directory becomes /usr/local/include/WebKitAdditions.
+        This patch adds --use-deployment-location option to generate_offset_extractor.rb, generate_settings_extractor.rb,
+        and asm.rb. And they pass it to parser to change the include directory.
+
+        * _javascript_Core.xcodeproj/project.pbxproj:
+        * offlineasm/asm.rb:
+        * offlineasm/generate_offset_extractor.rb:
+        * offlineasm/generate_settings_extractor.rb:
+        * offlineasm/parser.rb:
+
 2021-09-02  Ross Kirsling  <ross.kirsl...@sony.com>
 
         [JSC] ScriptExecutable::newCodeBlockFor should handle exceptions more predictably

Modified: trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj (281971 => 281972)


--- trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj	2021-09-03 01:38:18 UTC (rev 281971)
+++ trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj	2021-09-03 02:14:37 UTC (rev 281972)
@@ -1417,10 +1417,10 @@
 		A38CA59E26DD84DE00C8D84C /* ISO8601.h in Headers */ = {isa = PBXBuildFile; fileRef = A38CA59C26DD84DE00C8D84C /* ISO8601.h */; };
 		A38D250E25800D440042BFDD /* JSArrayBufferPrototypeInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = A38D250D25800D430042BFDD /* JSArrayBufferPrototypeInlines.h */; };
 		A38D5BFC2666D3DA00A109A6 /* InByStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = A38D5BFA2666D3DA00A109A6 /* InByStatus.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		A3EE8543262514B000FC9B8D /* IntlWorkaround.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A37619402625127C00CBCBA9 /* IntlWorkaround.cpp */; };
 		A3C7EDB626B0DB38004C34C5 /* TemporalDurationPrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = A3C7EDB026B0DB36004C34C5 /* TemporalDurationPrototype.h */; };
 		A3C7EDB926B0DB38004C34C5 /* TemporalDuration.h in Headers */ = {isa = PBXBuildFile; fileRef = A3C7EDB326B0DB37004C34C5 /* TemporalDuration.h */; };
 		A3C7EDBA26B0DB38004C34C5 /* TemporalDurationConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = A3C7EDB426B0DB37004C34C5 /* TemporalDurationConstructor.h */; };
+		A3EE8543262514B000FC9B8D /* IntlWorkaround.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A37619402625127C00CBCBA9 /* IntlWorkaround.cpp */; };
 		A3FF9BC72234749100B1A9AB /* YarrFlags.h in Headers */ = {isa = PBXBuildFile; fileRef = A3FF9BC52234746600B1A9AB /* YarrFlags.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		A503FA1A188E0FB000110F14 /* _javascript_CallFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = A503FA14188E0FAF00110F14 /* _javascript_CallFrame.h */; };
 		A503FA1E188E0FB000110F14 /* JSJavaScriptCallFramePrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = A503FA18188E0FB000110F14 /* JSJavaScriptCallFramePrototype.h */; };
@@ -10164,6 +10164,7 @@
 				86D446EA25B2125300ECAE75 /* JITOpaqueByproducts.h in Headers */,
 				E3CA3A4E2527AB2F004802BF /* JITOperationList.h in Headers */,
 				0F24E54D17EE274900ABB217 /* JITOperations.h in Headers */,
+				6B2360CE26C6253D0054AEEC /* JITOperationValidation.h in Headers */,
 				726B91B726581653008E6F82 /* JITPlan.h in Headers */,
 				72131BFA26587EF2007114CF /* JITPlanStage.h in Headers */,
 				FE3A06C01C11041A00390FDD /* JITRightShiftGenerator.h in Headers */,
@@ -10348,7 +10349,6 @@
 				86E3C61D167BABEE006D760A /* JSVirtualMachineInternal.h in Headers */,
 				795AC61820A2355E0052C76C /* JSVirtualMachinePrivate.h in Headers */,
 				A7CA3AE817DA41AE006538AF /* JSWeakMap.h in Headers */,
-				6B2360CE26C6253D0054AEEC /* JITOperationValidation.h in Headers */,
 				FEF5B4272628ABD90016E776 /* JSWeakMapInlines.h in Headers */,
 				A7482E93116A7CAD003B0712 /* JSWeakObjectMapRefInternal.h in Headers */,
 				A7482B9311671147003B0712 /* JSWeakObjectMapRefPrivate.h in Headers */,
@@ -11229,7 +11229,7 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/sh;
-			shellScript = "set -e\n\nmkdir -p \"${BUILT_PRODUCTS_DIR}/LLIntOffsets/${ARCHS}\"\n\n/usr/bin/env ruby \"${SRCROOT}/offlineasm/generate_offset_extractor.rb\" \"-I${BUILT_PRODUCTS_DIR}/DerivedSources/_javascript_Core\" \"${SRCROOT}/llint/LowLevelInterpreter.asm\"  \"${BUILT_PRODUCTS_DIR}/JSCLLIntSettingsExtractor\" \"${BUILT_PRODUCTS_DIR}/LLIntOffsets/${ARCHS}/LLIntDesiredOffsets.h\" \"${ARCHS} C_LOOP\" \"${BUILD_VARIANTS}\"\n";
+			shellScript = "set -e\n\nOFFLINEASM_ARGS=\"\"\nif [[ \"${DEPLOYMENT_LOCATION}\" == \"YES\" ]]; then\n    OFFLINEASM_ARGS=\"${OFFLINEASM_ARGS} --use-deployment-location\"\nfi\n\nmkdir -p \"${BUILT_PRODUCTS_DIR}/LLIntOffsets/${ARCHS}\"\n\n/usr/bin/env ruby \"${SRCROOT}/offlineasm/generate_offset_extractor.rb\" \"-I${BUILT_PRODUCTS_DIR}/DerivedSources/_javascript_Core\" \"${SRCROOT}/llint/LowLevelInterpreter.asm\"  \"${BUILT_PRODUCTS_DIR}/JSCLLIntSettingsExtractor\" \"${BUILT_PRODUCTS_DIR}/LLIntOffsets/${ARCHS}/LLIntDesiredOffsets.h\" \"${ARCHS} C_LOOP\" \"${BUILD_VARIANTS}\" ${OFFLINEASM_ARGS}\n";
 		};
 		14BD6892215191450050DAFF /* Generate Derived Sources */ = {
 			isa = PBXShellScriptBuildPhase;
@@ -11243,7 +11243,7 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/sh;
-			shellScript = "set -e\n\nmkdir -p \"${BUILT_PRODUCTS_DIR}/LLIntOffsets/${ARCHS}\"\n\n/usr/bin/env ruby \"${SRCROOT}/offlineasm/generate_settings_extractor.rb\" \"-I${BUILT_PRODUCTS_DIR}/DerivedSources/_javascript_Core\" \"${SRCROOT}/llint/LowLevelInterpreter.asm\" \"${BUILT_PRODUCTS_DIR}/LLIntOffsets/${ARCHS}/LLIntDesiredSettings.h\" \"${ARCHS} C_LOOP\"\n";
+			shellScript = "set -e\n\nOFFLINEASM_ARGS=\"\"\nif [[ \"${DEPLOYMENT_LOCATION}\" == \"YES\" ]]; then\n    OFFLINEASM_ARGS=\"${OFFLINEASM_ARGS} --use-deployment-location\"\nfi\n\nmkdir -p \"${BUILT_PRODUCTS_DIR}/LLIntOffsets/${ARCHS}\"\n\n/usr/bin/env ruby \"${SRCROOT}/offlineasm/generate_settings_extractor.rb\" \"-I${BUILT_PRODUCTS_DIR}/DerivedSources/_javascript_Core\" \"${SRCROOT}/llint/LowLevelInterpreter.asm\" \"${BUILT_PRODUCTS_DIR}/LLIntOffsets/${ARCHS}/LLIntDesiredSettings.h\" \"${ARCHS} C_LOOP\" ${OFFLINEASM_ARGS}\n";
 		};
 		1A02D9A81B34A882000D1522 /* Add Symlink in /System/Library/PrivateFrameworks */ = {
 			isa = PBXShellScriptBuildPhase;
@@ -11489,7 +11489,7 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/sh;
-			shellScript = "if [[ \"${ACTION}\" == \"installhdrs\" ]]; then\n    exit 0\nfi\n\ncd \"${BUILT_PRODUCTS_DIR}/DerivedSources/_javascript_Core\"\n\n/usr/bin/env ruby _javascript_Core/offlineasm/asm.rb \"-I${BUILT_PRODUCTS_DIR}/DerivedSources/_javascript_Core\" _javascript_Core/llint/LowLevelInterpreter.asm \"${BUILT_PRODUCTS_DIR}/JSCLLIntOffsetsExtractor\" LLIntAssembly.h \"${BUILD_VARIANTS}\" || exit 1\n";
+			shellScript = "if [[ \"${ACTION}\" == \"installhdrs\" ]]; then\n    exit 0\nfi\n\nOFFLINEASM_ARGS=\"\"\nif [[ \"${DEPLOYMENT_LOCATION}\" == \"YES\" ]]; then\n    OFFLINEASM_ARGS=\"${OFFLINEASM_ARGS} --use-deployment-location\"\nfi\n\ncd \"${BUILT_PRODUCTS_DIR}/DerivedSources/_javascript_Core\"\n\n/usr/bin/env ruby _javascript_Core/offlineasm/asm.rb \"-I${BUILT_PRODUCTS_DIR}/DerivedSources/_javascript_Core\" _javascript_Core/llint/LowLevelInterpreter.asm \"${BUILT_PRODUCTS_DIR}/JSCLLIntOffsetsExtractor\" LLIntAssembly.h \"${BUILD_VARIANTS}\" ${OFFLINEASM_ARGS} || exit 1\n";
 		};
 		65FB3F6509D11E9100F49DEB /* Generate Derived Sources */ = {
 			isa = PBXShellScriptBuildPhase;

Modified: trunk/Source/_javascript_Core/offlineasm/asm.rb (281971 => 281972)


--- trunk/Source/_javascript_Core/offlineasm/asm.rb	2021-09-03 01:38:18 UTC (rev 281971)
+++ trunk/Source/_javascript_Core/offlineasm/asm.rb	2021-09-03 02:14:37 UTC (rev 281972)
@@ -335,11 +335,14 @@
 
 $options = {}
 OptionParser.new do |opts|
-    opts.banner = "Usage: asm.rb asmFile offsetsFile outputFileName [--assembler=<ASM>]"
+    opts.banner = "Usage: asm.rb asmFile offsetsFile outputFileName [--assembler=<ASM>] [--use-deployment-location]"
     # This option is currently only used to specify the masm assembler
     opts.on("--assembler=[ASM]", "Specify an assembler to use.") do |assembler|
         $options[:assembler] = assembler
     end
+    opts.on("--use-deployment-location", "Flag to use deployment location.") do |flag|
+        $options[:use_deployment_location] = flag
+    end
 end.parse!
 
 begin
@@ -358,7 +361,7 @@
 $commentPrefix = $emitWinAsm ? ";" : "//"
 
 inputHash =
-    $commentPrefix + " offlineasm input hash: " + parseHash(asmFile) +
+    $commentPrefix + " offlineasm input hash: " + parseHash(asmFile, $options) +
     " " + Digest::SHA1.hexdigest(configurationList.map{|v| (v[0] + [v[1]]).join(' ')}.join(' ')) +
     " " + selfHash +
     " " + Digest::SHA1.hexdigest($options.has_key?(:assembler) ? $options[:assembler] : "")
@@ -387,7 +390,7 @@
 
     $asm = Assembler.new($output)
     
-    ast = parse(asmFile)
+    ast = parse(asmFile, $options)
     settingsCombinations = computeSettingsCombinations(ast)
 
     configurationList.each {

Modified: trunk/Source/_javascript_Core/offlineasm/generate_offset_extractor.rb (281971 => 281972)


--- trunk/Source/_javascript_Core/offlineasm/generate_offset_extractor.rb	2021-09-03 01:38:18 UTC (rev 281971)
+++ trunk/Source/_javascript_Core/offlineasm/generate_offset_extractor.rb	2021-09-03 02:14:37 UTC (rev 281972)
@@ -29,6 +29,7 @@
 require "backends"
 require "digest/sha1"
 require "offsets"
+require 'optparse'
 require "parser"
 require "self_hash"
 require "settings"
@@ -45,6 +46,14 @@
 
 variants = ARGV.shift.split(/[,\s]+/)
 
+$options = {}
+OptionParser.new do |opts|
+    opts.banner = "Usage: generate_offset_extractor.rb asmFile settingFile outputFileName backends variants [--use-deployment-location]"
+    opts.on("--use-deployment-location", "Flag to use deployment location.") do |flag|
+        $options[:use_deployment_location] = flag
+    end
+end.parse!
+
 begin
     configurationList = configurationIndicesForVariants(settingsFlnm, variants)
 rescue MissingMagicValuesException
@@ -60,7 +69,7 @@
 end
 
 configurationHash = Digest::SHA1.hexdigest(configurationList.join(' '))
-inputHash = "// OffsetExtractor input hash: #{parseHash(inputFlnm)} #{configurationHash} #{selfHash}"
+inputHash = "// OffsetExtractor input hash: #{parseHash(inputFlnm, $options)} #{configurationHash} #{selfHash}"
 
 if FileTest.exist? outputFlnm
     File.open(outputFlnm, "r") {
@@ -73,7 +82,7 @@
     }
 end
 
-ast = parse(inputFlnm)
+ast = parse(inputFlnm, $options)
 settingsCombinations = computeSettingsCombinations(ast)
 
 File.open(outputFlnm, "w") {

Modified: trunk/Source/_javascript_Core/offlineasm/generate_settings_extractor.rb (281971 => 281972)


--- trunk/Source/_javascript_Core/offlineasm/generate_settings_extractor.rb	2021-09-03 01:38:18 UTC (rev 281971)
+++ trunk/Source/_javascript_Core/offlineasm/generate_settings_extractor.rb	2021-09-03 02:14:37 UTC (rev 281972)
@@ -29,6 +29,7 @@
 require "backends"
 require "digest/sha1"
 require "offsets"
+require 'optparse'
 require "parser"
 require "self_hash"
 require "settings"
@@ -42,8 +43,16 @@
 validBackends = canonicalizeBackendNames(ARGV.shift.split(/[,\s]+/))
 includeOnlyBackends(validBackends)
 
-inputHash = "// SettingsExtractor input hash: #{parseHash(inputFlnm)} #{selfHash}"
+$options = {}
+OptionParser.new do |opts|
+    opts.banner = "Usage: generate_settings_extractor.rb asmFile settingFile [--use-deployment-location]"
+    opts.on("--use-deployment-location", "Flag to use deployment location.") do |flag|
+        $options[:use_deployment_location] = flag
+    end
+end.parse!
 
+inputHash = "// SettingsExtractor input hash: #{parseHash(inputFlnm, $options)} #{selfHash}"
+
 if FileTest.exist? outputFlnm
     File.open(outputFlnm, "r") {
         | inp |
@@ -55,7 +64,7 @@
     }
 end
 
-originalAST = parse(inputFlnm)
+originalAST = parse(inputFlnm, $options)
 prunedAST = Sequence.new(originalAST.codeOrigin, originalAST.filter(Setting))
 
 File.open(outputFlnm, "w") {

Modified: trunk/Source/_javascript_Core/offlineasm/parser.rb (281971 => 281972)


--- trunk/Source/_javascript_Core/offlineasm/parser.rb	2021-09-03 01:38:18 UTC (rev 281971)
+++ trunk/Source/_javascript_Core/offlineasm/parser.rb	2021-09-03 02:14:37 UTC (rev 281972)
@@ -259,7 +259,7 @@
 #
 
 class Parser
-    def initialize(data, fileName)
+    def initialize(data, fileName, options)
         @tokens = lex(data, fileName)
         @idx = 0
         @annotation = nil
@@ -266,6 +266,7 @@
         # FIXME: CMake does not currently set BUILT_PRODUCTS_DIR.
         # https://bugs.webkit.org/show_bug.cgi?id=229340
         @buildProductsDirectory = ENV['BUILT_PRODUCTS_DIR'];
+        @options = options
     end
     
     def parseError(*comment)
@@ -830,7 +831,11 @@
                 parseError unless isIdentifier(@tokens[@idx])
                 moduleName = @tokens[@idx].string
                 @idx += 1
-                additionsDirectoryName = "#{@buildProductsDirectory}/usr/local/include/WebKitAdditions/"
+                if @options[:use_deployment_location]
+                    additionsDirectoryName = "/usr/local/include/WebKitAdditions/"
+                else
+                    additionsDirectoryName = "#{@buildProductsDirectory}/usr/local/include/WebKitAdditions/"
+                end
                 fileName = IncludeFile.new(moduleName, additionsDirectoryName).fileName
                 if not File.exists?(fileName)
                     fileName = IncludeFile.new(moduleName, @tokens[@idx].codeOrigin.fileName.dirname).fileName
@@ -837,7 +842,7 @@
                 end
                 fileExists = File.exists?(fileName)
                 raise "File not found: #{fileName}" if not fileExists and not isOptional
-                list << parse(fileName) if fileExists
+                list << parse(fileName, @options) if fileExists
             else
                 parseError "Expecting terminal #{final} #{comment}"
             end
@@ -862,7 +867,11 @@
                 parseError unless isIdentifier(@tokens[@idx])
                 moduleName = @tokens[@idx].string
                 @idx += 1
-                additionsDirectoryName = "#{@buildProductsDirectory}/usr/local/include/WebKitAdditions/"
+                if @options[:use_deployment_location]
+                    additionsDirectoryName = "/usr/local/include/WebKitAdditions/"
+                else
+                    additionsDirectoryName = "#{@buildProductsDirectory}/usr/local/include/WebKitAdditions/"
+                end
                 fileName = IncludeFile.new(moduleName, additionsDirectoryName).fileName
                 if not File.exists?(fileName)
                     fileName = IncludeFile.new(moduleName, @tokens[@idx].codeOrigin.fileName.dirname).fileName
@@ -890,17 +899,17 @@
     return data
 end
 
-def parseData(data, fileName)
-    parser = Parser.new(data, SourceFile.new(fileName))
+def parseData(data, fileName, options)
+    parser = Parser.new(data, SourceFile.new(fileName), options)
     parser.parseSequence(nil, "")
 end
 
-def parse(fileName)
-    parseData(readTextFile(fileName), fileName)
+def parse(fileName, options)
+    parseData(readTextFile(fileName), fileName, options)
 end
 
-def parseHash(fileName)
-    parser = Parser.new(readTextFile(fileName), SourceFile.new(fileName))
+def parseHash(fileName, options)
+    parser = Parser.new(readTextFile(fileName), SourceFile.new(fileName), options)
     fileList = parser.parseIncludes(nil, "")
     fileListHash(fileList)
 end
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to