Top Level Namespace
Defined Under Namespace
Modules: LibInjection, Rack
Constant Summary
collapse
- USE_SYSTEM =
arg_config("--use-system-libinjection") || ENV["LIBINJECTION_USE_SYSTEM"] == "1"
- EXT_DIR =
__dir__
- PRIMARY_VENDOR_DIR =
File.join(EXT_DIR, "vendor", "libinjection")
- REQUIRED_VENDOR_FILES =
%w[
src/libinjection.h
src/libinjection_error.h
src/libinjection_sqli.h
src/libinjection_sqli_data.h
src/libinjection_xss.h
src/libinjection_html5.h
src/libinjection_sqli.c
src/libinjection_xss.c
src/libinjection_html5.c
].freeze
Instance Method Summary
collapse
Instance Method Details
#abort_missing_vendor! ⇒ Object
39
40
41
42
43
44
45
46
47
48
|
# File 'ext/libinjection/extconf.rb', line 39
def abort_missing_vendor!
abort <<~MSG
libinjection vendored sources are missing.
Run:
ruby script/vendor_libs.rb
Security note: extconf.rb does not auto-download native sources during build.
MSG
end
|
#compiler_version ⇒ Object
24
25
26
27
28
29
|
# File 'ext/libinjection/extconf.rb', line 24
def compiler_version
cc = RbConfig::CONFIG.fetch("CC", "cc")
`#{cc} --version 2>&1`
rescue StandardError
""
end
|
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
# File 'ext/libinjection/extconf.rb', line 66
def configure_system!
puts "Building with SYSTEM libinjection"
if find_executable("pkg-config")
cflags = `pkg-config --cflags libinjection 2>/dev/null`.strip
libs = `pkg-config --libs libinjection 2>/dev/null`.strip
$CPPFLAGS << " #{cflags}" unless cflags.empty?
$libs << " #{libs}" unless libs.empty?
end
abort "libinjection.h is required" unless ("libinjection.h")
abort "libinjection_sqli.h is required" unless ("libinjection_sqli.h")
abort "libinjection_xss.h is required" unless ("libinjection_xss.h")
abort "libinjection library is required" unless have_library("injection", "libinjection_sqli")
abort "libinjection_version() is required" unless have_func("libinjection_version")
end
|
83
84
85
86
87
88
89
90
91
92
93
94
|
# File 'ext/libinjection/extconf.rb', line 83
def configure_vendored!(vendor_dir)
abort "libinjection vendored sources are missing" unless vendor_dir
versions = File.read(File.join(vendor_dir, ".vendored"))
puts "Building with VENDORED libinjection from #{vendor_dir}"
puts " #{versions.tr("\n", ", ")}"
src_dir = File.join(vendor_dir, "src")
$CPPFLAGS << " -I#{src_dir}"
$srcs = %w[libinjection_ext.c libinjection_sqli.c libinjection_xss.c libinjection_html5.c]
$VPATH = [EXT_DIR, src_dir]
end
|
#find_vendor_dir ⇒ Object
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
# File 'ext/libinjection/extconf.rb', line 50
def find_vendor_dir
candidates = [PRIMARY_VENDOR_DIR]
dir = __dir__
6.times do
candidates << File.join(dir, "ext", "libinjection", "vendor", "libinjection")
dir = File.dirname(dir)
end
candidates.map! { |path| File.expand_path(path) }
candidates.uniq!
abort_missing_vendor! unless vendor_ready?(PRIMARY_VENDOR_DIR)
candidates.find { |path| vendor_ready?(path) }
end
|
#gcc_without_clang? ⇒ Boolean
31
32
33
34
|
# File 'ext/libinjection/extconf.rb', line 31
def gcc_without_clang?
version = compiler_version.downcase
version.include?("gcc") && !version.include?("clang")
end
|
#vendor_ready?(dir) ⇒ Boolean
35
36
37
|
# File 'ext/libinjection/extconf.rb', line 35
def vendor_ready?(dir)
File.file?(File.join(dir, ".vendored")) && REQUIRED_VENDOR_FILES.all? { |path| File.file?(File.join(dir, path)) }
end
|