From e23aefe2888d59763b013eeb491026a2ffc8930b Mon Sep 17 00:00:00 2001 From: k0kubun Date: Mon, 5 Feb 2018 15:39:55 +0000 Subject: transform_mjit_header.rb: restrict transformation to whitelisted patterns. This fix is for NetBSD. [Bug #14439] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62235 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- tool/transform_mjit_header.rb | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'tool') diff --git a/tool/transform_mjit_header.rb b/tool/transform_mjit_header.rb index c27f9ea8f6..d844b5a2ac 100644 --- a/tool/transform_mjit_header.rb +++ b/tool/transform_mjit_header.rb @@ -11,6 +11,7 @@ module MJITHeader ATTR_VALUE_REGEXP = /[^()]|\([^()]*\)/ ATTR_REGEXP = /__attribute__\s*\(\((#{ATTR_VALUE_REGEXP})*\)\)/ FUNC_HEADER_REGEXP = /\A(\s*#{ATTR_REGEXP})*[^\[{(]*\((#{ATTR_REGEXP}|[^()])*\)(\s*#{ATTR_REGEXP})*\s*/ + TARGET_NAME_REGEXP = /\A(rb|ruby|vm|insn|attr)_/ # For MinGW's ras.h. Those macros have its name in its definition and can't be preprocessed multiple times. RECURSIVE_MACROS = %w[ @@ -167,6 +168,11 @@ while (decl_range = MJITHeader.find_decl(code, stop_pos)) code[decl_range] = "static inline #{decl}" elsif (match = /#{MJITHeader::FUNC_HEADER_REGEXP}{/.match(decl)) && (header = match[0]) !~ /static/ + unless decl_name.match(MJITHeader::TARGET_NAME_REGEXP) + puts "#{PROGRAM}: SKIPPED to transform #{decl_name}" + next + end + extern_names << decl_name decl[match.begin(0)...match.end(0)] = '' -- cgit v1.2.3