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