immunio 1.0.6 → 1.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: eb728b89874b8fcb5cfdf79a7fb0c9664d904b34
4
- data.tar.gz: b071e26dc05fad5a700468dbf9d3ed00e64157e5
3
+ metadata.gz: 80267dd0327d92f9af47b91f658a46a3e38cd000
4
+ data.tar.gz: be17e29bba57536a8d8cdb5a35134cfe64977510
5
5
  SHA512:
6
- metadata.gz: 68afdf33589ca1563f3da1506ab01e0a5e9bd0754b8ae3a2ed4e2e8c27b2625d0b8b62b055fe4559f84de90203643ed4192f32c1e6d4a30a72fd0d292b9c6d24
7
- data.tar.gz: da4aad9e43545ce56e37ae5f573efba5f8e6511f293611b8b31ff757bffe21671c0d4b484f6d49ba7ad965d9ee59c05c445ea8c07ed0b89cbf76ebc85b7ed983
6
+ metadata.gz: 26355aaa28340307c3a6766ddda207e67484d6e9b0f33601d229660338d1e7becffc3e6140092fd0a10ed7d0bc2d0b3c5f494aaf29fd8e61f66759ac1eb62463
7
+ data.tar.gz: 218fbac35d91313ebf8dec8ca81cb1be22b05b8b388b79294db8e1750a1ce6f193da04a305b304dcf99544d27e4b503d28af074d98c05f3fed8ee4feafad0b35
@@ -3,6 +3,14 @@ module Immunio
3
3
  RAILS_TEMPLATE_FILTER = Regexp.new("(.*(_erb|_haml))__+\\d+_\\d+(.*)")
4
4
  # Cache for contexts (named in tribute to our buddy Adam Back who invented proof of work)
5
5
  @@hash_cache = {}
6
+ FILE_CHECKSUM_CACHE = Hash.new do |cache, filepath|
7
+ begin
8
+ contents = IOHooks.paused { File.read(filepath) }
9
+ cache[filepath] = Digest::SHA1.hexdigest(contents)
10
+ rescue StandardError
11
+ cache[filepath] = ""
12
+ end
13
+ end
6
14
 
7
15
  # Calculate context hashes and a stack trace. Additional data, in the form
8
16
  # of a String, may be provided to mix into the strict context hash.
@@ -29,7 +37,7 @@ module Immunio
29
37
  # are filtered by the Gem regex.
30
38
  locations = caller(1).map do |frame|
31
39
  frame = frame.split(":", 3)
32
- {path: frame[0], line: frame[1], label: frame[2]}
40
+ { path: frame[0], line: frame[1], label: frame[2] }
33
41
  end
34
42
 
35
43
  locations.each do |frame|
@@ -44,7 +52,7 @@ module Immunio
44
52
  # relocation. If there's no rails root, or the path doesn't start with
45
53
  # the rails root, just use the filename part.
46
54
  if defined?(Rails) && defined?(Rails.root) &&
47
- Rails.root && frame[:path].start_with?(Rails.root.to_s)
55
+ Rails.root && frame[:path].start_with?(Rails.root.to_s)
48
56
  strict_path = frame[:path].sub(Rails.root.to_s, '')
49
57
  else
50
58
  strict_path = File.basename(frame[:path])
@@ -64,6 +72,10 @@ module Immunio
64
72
  strict_context_rope << ":"
65
73
  strict_context_rope << frame[:label]
66
74
 
75
+ # Include checksums of file contents in the strict context
76
+ checksum = FILE_CHECKSUM_CACHE[frame[:path]]
77
+ strict_context_rope << ":#{checksum}" unless checksum.blank?
78
+
67
79
  # Remove pathname from the loose context. The goal here is to prevent
68
80
  # upgrading gem versions from changing the loose context key, so for instance
69
81
  # users don't have to rebuild their whitelists every time they update a gem
@@ -55,7 +55,7 @@ module Immunio
55
55
  old_formats = context.lookup_context.formats
56
56
  begin
57
57
  context.lookup_context.formats = @template.formats
58
- refreshed = @template.refresh(context)
58
+ refreshed = Immunio::IOHooks.paused { @template.refresh(context) }
59
59
  ensure
60
60
  context.lookup_context.formats = old_formats
61
61
  end
@@ -158,7 +158,7 @@ module Immunio
158
158
  def render(context)
159
159
  load_source context
160
160
  # Don't handle templates with no source (inline text templates).
161
- if not has_source? then
161
+ unless has_source?
162
162
  rendered = yield
163
163
  rendered.instance_variable_set("@__immunio_processed", true)
164
164
  return rendered
@@ -129,8 +129,10 @@ module Immunio
129
129
 
130
130
  caller_method = frame.label
131
131
  caller_line = frame.lineno
132
+ checksum = Immunio::Context::FILE_CHECKSUM_CACHE[frame.path]
132
133
 
133
134
  data = "Relation for #{name}, method called: #{method}, caller: #{caller_method}:#{caller_line}"
135
+ data << ", checksum: #{checksum}" unless checksum.blank?
134
136
  else
135
137
  data = "Relation for #{name}, method called: #{method}"
136
138
  end
@@ -3,6 +3,20 @@ require_relative '../context'
3
3
  module Immunio
4
4
  module IOHooks
5
5
 
6
+ def self.paused
7
+ old_paused = Thread.current["immunio.file_io_paused"]
8
+ Thread.current["immunio.file_io_paused"] = true
9
+ begin
10
+ yield
11
+ ensure
12
+ Thread.current["immunio.file_io_paused"] = old_paused
13
+ end
14
+ end
15
+
16
+ def self.paused?
17
+ !!Thread.current["immunio.file_io_paused"]
18
+ end
19
+
6
20
  def self.inject(mod, name, methods)
7
21
  mod.class_eval <<-EOF
8
22
  def self.extended(base) # def self.extended(base)
@@ -21,16 +35,21 @@ module Immunio
21
35
  methods.each do |method|
22
36
  mod.class_eval <<-EOF
23
37
  def #{method}_with_immunio(*args, &block) # def read_with_immunio(*args, &block)
24
- Request.time "plugin", "IO::#{method}" do #
25
- strict_context, loose_context, stack, loose_stack = Immunio::Context.context()
26
- Immunio.run_hook! "io", "file_io", # Immunio.run_hook! "io", "open",
27
- method: "#{name}#{method}", # open_method: "IO.read",
28
- parameters: args, # parameters: args
29
- stack: loose_stack, #
30
- context_key: loose_context, #
31
- cwd: Dir.pwd
32
- Request.pause "plugin", "IO::#{method}" do #
33
- #{method}_without_immunio(*args, &block) # read_without_immunio(*args, &block)
38
+ if Immunio::IOHooks.paused?
39
+ #{method}_without_immunio(*args, &block)
40
+ else
41
+ Request.time "plugin", "IO::#{method}" do #
42
+ strict_context, loose_context, stack, loose_stack = Immunio::Context.context()
43
+
44
+ Immunio.run_hook! "io", "file_io", # Immunio.run_hook! "io", "open",
45
+ method: "#{name}#{method}", # open_method: "IO.read",
46
+ parameters: args, # parameters: args
47
+ stack: loose_stack, #
48
+ context_key: loose_context, #
49
+ cwd: Dir.pwd
50
+ Request.pause "plugin", "IO::#{method}" do #
51
+ #{method}_without_immunio(*args, &block) # read_without_immunio(*args, &block)
52
+ end
34
53
  end
35
54
  end
36
55
  end # end
@@ -1,5 +1,5 @@
1
1
  module Immunio
2
2
  AGENT_TYPE = "agent-ruby"
3
- VERSION = "1.0.6"
3
+ VERSION = "1.0.7"
4
4
  VM_VERSION = "2.2.0"
5
5
  end
@@ -28,6 +28,7 @@ LUA_SRC = \
28
28
  lib/paths.lua \
29
29
  lib/permit.lua \
30
30
  lib/sanitize_sql.lua \
31
+ lib/sanitize_command.lua \
31
32
  lib/semver.lua \
32
33
  lib/sha1.lua \
33
34
  lib/snap.lua \
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: immunio
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.6
4
+ version: 1.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Immunio
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-01 00:00:00.000000000 Z
11
+ date: 2015-12-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails