Fixes #452. Solves a number of crashes caused by Regexp.new() on 1.9 without an explicit language specified

git-svn-id: file:///home/svn/framework3/trunk@7320 4d416f70-5f16-0410-b530-b9f4589650da
This commit is contained in:
HD Moore 2009-11-02 17:09:13 +00:00
parent c0a0507fdf
commit 176996fe61
12 changed files with 175 additions and 171 deletions

View File

@ -254,3 +254,4 @@ module Msf
end
end

View File

@ -904,7 +904,7 @@ class Core
end
begin
regex = Regexp.new(match, true)
regex = Regexp.new(match, true, 'n')
rescue RegexpError => e
print_error("Invalid regular expression: #{match} (hint: try .*)")
return

View File

@ -56,7 +56,7 @@ module Msf
# Perform the search
found = []
filter = Regexp.new(text, Regexp::IGNORECASE)
filter = Regexp.new(text, Regexp::IGNORECASE, 'n')
$gtk2driver.module_tree.refresh(filter)
$gtk2driver.module_tree.expand

View File

@ -74,7 +74,7 @@ module Net # :nodoc:
Net::DNS::RR::Classes.regexp +
"|CLASS\\d+)?\\s*(" +
Net::DNS::RR::Types.regexp +
"|TYPE\\d+)?\\s*(.*)$", Regexp::IGNORECASE)
"|TYPE\\d+)?\\s*(.*)$", Regexp::IGNORECASE, 'n')
# Dimension of the sum of class, type, TTL and rdlength fields in a
# RR portion of the packet, in bytes

View File

@ -1,4 +1,3 @@
#!/usr/bin/env ruby
# $Id$
@ -58,7 +57,7 @@ class JmpRegScanner < Generic
regexstr += "\xff[#{jmps}]|([#{pushs1}]|\xff[#{pushs2}])(\xc3|\xc2..))"
self.regex = Regexp.new(regexstr)
self.regex = Regexp.new(regexstr, nil, 'n')
end
# build a list for regex of the possible bytes, based on a base
@ -137,7 +136,7 @@ class PopPopRetScanner < JmpRegScanner
def config(param)
pops = _build_byte_list(0x58, (0 .. 7).to_a - [4]) # we don't want pop esp's...
self.regex = Regexp.new("[#{pops}][#{pops}](\xc3|\xc2..)")
self.regex = Regexp.new("[#{pops}][#{pops}](\xc3|\xc2..)", nil, 'n')
end
def scan_segment(program_header, param={})
@ -172,7 +171,7 @@ end
class RegexScanner < JmpRegScanner
def config(param)
self.regex = Regexp.new(param['args'])
self.regex = Regexp.new(param['args'], nil, 'n')
end
def scan_segment(program_header, param={})
@ -205,3 +204,4 @@ end
end
end
end

View File

@ -66,7 +66,7 @@ class JmpRegScanner < Generic
regexstr += "\xff[#{jmps}]|([#{pushs1}]|\xff[#{pushs2}])(\xc3|\xc2..))"
self.regex = Regexp.new(regexstr)
self.regex = Regexp.new(regexstr, nil, 'n')
end
# build a list for regex of the possible bytes, based on a base
@ -145,7 +145,7 @@ class PopPopRetScanner < JmpRegScanner
def config(param)
pops = _build_byte_list(0x58, (0 .. 7).to_a - [4]) # we don't want pop esp's...
self.regex = Regexp.new("[#{pops}][#{pops}](\xc3|\xc2..)")
self.regex = Regexp.new("[#{pops}][#{pops}](\xc3|\xc2..)", nil, 'n')
end
def scan_segment(segment, param={})
@ -181,7 +181,7 @@ end
class RegexScanner < JmpRegScanner
def config(param)
self.regex = Regexp.new(param['args'])
self.regex = Regexp.new(param['args'], nil, 'n')
end
def scan_segment(segment, param={})
@ -214,3 +214,4 @@ end
end
end
end

View File

@ -58,7 +58,7 @@ module Analyze
@sigs.each_pair do |name, data|
begin
if (buf.match(Regexp.new('^' + data[0])))
if (buf.match(Regexp.new('^' + data[0], nil, 'n')))
$stdout.puts param['file'] + ": " + name
end
rescue RegexpError
@ -237,7 +237,7 @@ module Analyze
res = pe.resources[rkey]
path = File.join(dest, rkey.split('/')[1] + '_' + res.file)
fd = File.new(path, 'w')
fd = File.new(path, 'wb')
fd.write(res.data)
fd.close
end
@ -267,7 +267,7 @@ module Analyze
path = File.join(dest, File.basename(param['file']) + ".map")
end
fd = File.new(path, "w")
fd = File.new(path, "wb")
pe.all_sections.each do |section|
# Skip over known bad sections
@ -278,7 +278,7 @@ module Analyze
while offset < section.size
byte = section.read(offset, 1)[0]
if byte != 0
chunkbase = pe.rva_to_vma( section.base_rva) + offset
chunkbase = pe.rva_to_vma(section.base_rva) + offset
data = ''
while byte != 0
data << byte
@ -306,3 +306,4 @@ module Analyze
end
end
end

View File

@ -58,7 +58,7 @@ module Scanner
regexstr += "\xff[#{jmps}]|([#{pushs1}]|\xff[#{pushs2}])(\xc3|\xc2..))"
self.regex = Regexp.new(regexstr)
self.regex = Regexp.new(regexstr, nil, 'n')
end
# build a list for regex of the possible bytes, based on a base
@ -137,7 +137,7 @@ module Scanner
def config(param)
pops = _build_byte_list(0x58, (0 .. 7).to_a - [4]) # we don't want pop esp's...
self.regex = Regexp.new("[#{pops}][#{pops}](\xc3|\xc2..)")
self.regex = Regexp.new("[#{pops}][#{pops}](\xc3|\xc2..)", nil, 'n')
end
def scan_section(section, param={})
@ -171,7 +171,7 @@ module Scanner
class RegexScanner < JmpRegScanner
def config(param)
self.regex = Regexp.new(param['args'])
self.regex = Regexp.new(param['args'], nil, 'n')
end
def scan_section(section, param={})
@ -203,3 +203,4 @@ module Scanner
end
end
end

View File

@ -24,7 +24,7 @@ class Handle
uuid_re = '[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}'
rev_re = '\d+.\d+'
proto_re = '(?:' + @@protocols.join('|') + ')'
re = Regexp.new("(#{uuid_re}):(#{rev_re})\@(#{proto_re}):(.*?)\\[(.*)\\]$")
re = Regexp.new("(#{uuid_re}):(#{rev_re})\@(#{proto_re}):(.*?)\\[(.*)\\]$", true, 'n')
match = re.match(handle)
raise ArgumentError if !match

View File

@ -168,7 +168,7 @@ module Text
# the regex the first time it is used and never check again. Since we
# want to know how many to capture on every instance, we do it this
# way.
return str.unpack('H*')[0].gsub(Regexp.new(".{#{count * 2}}")) { |s| prefix + s }
return str.unpack('H*')[0].gsub(Regexp.new(".{#{count * 2}}", nil, 'n')) { |s| prefix + s }
end
#

View File

@ -465,7 +465,7 @@ module Zip
end
path = @file.expand_path(aDirectoryName).ensure_end("/")
subDirEntriesRegex = Regexp.new("^#{path}([^/]+)$")
subDirEntriesRegex = Regexp.new("^#{path}([^/]+)$", nil, 'n')
@mappedZip.each {
|fileName|
match = subDirEntriesRegex.match(fileName)

View File

@ -76,7 +76,7 @@ module Kernel #:nodoc:all
end
def already_loaded?(moduleName)
moduleRE = Regexp.new("^"+moduleName+"(\.rb|\.so|\.dll|\.o)?$")
moduleRE = Regexp.new("^"+moduleName+"(\.rb|\.so|\.dll|\.o)?$", nil, 'n')
$".detect { |e| e =~ moduleRE } != nil
end