oso-oso 0.5.0 → 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/Makefile +5 -5
- data/ext/oso-oso/lib/libpolar.dylib +0 -0
- data/ext/oso-oso/lib/libpolar.so +0 -0
- data/ext/oso-oso/lib/polar.dll +0 -0
- data/lib/oso/polar/errors.rb +5 -18
- data/lib/oso/polar/ffi.rb +8 -0
- data/lib/oso/polar/ffi/error.rb +2 -0
- data/lib/oso/polar/ffi/message.rb +1 -1
- data/lib/oso/polar/ffi/polar.rb +3 -3
- data/lib/oso/polar/ffi/query.rb +10 -0
- data/lib/oso/polar/ffi/source.rb +24 -0
- data/lib/oso/polar/polar.rb +4 -20
- data/lib/oso/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cf2c949f57a56b4849f24ed9593c78da58baa5a0
|
4
|
+
data.tar.gz: 31ac99dcfa3bba1bbbee68474a3fe3702fb7484d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f1708d82f2531d50456ddcadb967bd024414700808e81b440836eb344f542cfda46af651382a6445a098dce9cf1e1c63c6802df73e3f97713a819d0b07ef5aae
|
7
|
+
data.tar.gz: d96b91d530555ed98d040c2d3c8e8e0adbdffa352cef6bd49c22e6f225c16bfa9f4c488d37468201e16e0950791581621737b94f1b9d5ffc8b8c4dffeaa4e656
|
data/Gemfile.lock
CHANGED
data/Makefile
CHANGED
@@ -3,17 +3,17 @@
|
|
3
3
|
rust:
|
4
4
|
$(MAKE) -C ../.. rust-build
|
5
5
|
|
6
|
-
install:
|
6
|
+
install:
|
7
7
|
bundle install
|
8
8
|
|
9
|
-
test: install
|
9
|
+
test: install rust
|
10
10
|
bundle exec rake spec
|
11
11
|
|
12
|
-
lint:
|
12
|
+
lint: install
|
13
13
|
bundle exec rubocop
|
14
14
|
|
15
|
-
typecheck:
|
15
|
+
typecheck: install
|
16
16
|
bundle exec solargraph typecheck
|
17
17
|
|
18
|
-
repl: install
|
18
|
+
repl: install rust
|
19
19
|
bundle exec oso
|
Binary file
|
data/ext/oso-oso/lib/libpolar.so
CHANGED
Binary file
|
data/ext/oso-oso/lib/polar.dll
CHANGED
Binary file
|
data/lib/oso/polar/errors.rb
CHANGED
@@ -27,6 +27,7 @@ module Oso
|
|
27
27
|
class UnsupportedError < PolarRuntimeError; end
|
28
28
|
class PolarTypeError < PolarRuntimeError; end
|
29
29
|
class StackOverflowError < PolarRuntimeError; end
|
30
|
+
class FileLoadingError < PolarRuntimeError; end
|
30
31
|
|
31
32
|
# Errors originating from this side of the FFI boundary.
|
32
33
|
|
@@ -37,26 +38,12 @@ module Oso
|
|
37
38
|
class InvalidCallError < PolarRuntimeError; end
|
38
39
|
class InvalidConstructorError < PolarRuntimeError; end
|
39
40
|
class InvalidQueryTypeError < PolarRuntimeError; end
|
40
|
-
class InlineQueryFailedError < PolarRuntimeError; end
|
41
41
|
class NullByteInPolarFileError < PolarRuntimeError; end
|
42
42
|
class UnexpectedPolarTypeError < PolarRuntimeError; end
|
43
|
-
class
|
44
|
-
# @param
|
45
|
-
def initialize(
|
46
|
-
super("
|
47
|
-
end
|
48
|
-
end
|
49
|
-
class PolarFileContentsChangedError < PolarRuntimeError # rubocop:disable Style/Documentation
|
50
|
-
# @param file [String]
|
51
|
-
def initialize(file)
|
52
|
-
super("A file with the name #{file}, but different contents, has already been loaded.")
|
53
|
-
end
|
54
|
-
end
|
55
|
-
class PolarFileNameChangedError < PolarRuntimeError # rubocop:disable Style/Documentation
|
56
|
-
# @param file [String]
|
57
|
-
# @param existing [String]
|
58
|
-
def initialize(file, existing)
|
59
|
-
super("A file with the same contents as #{file} named #{existing} has already been loaded.")
|
43
|
+
class InlineQueryFailedError < PolarRuntimeError; # rubocop:disable Style/Documentation
|
44
|
+
# @param source [String]
|
45
|
+
def initialize(source)
|
46
|
+
super("Inline query failed: #{source}")
|
60
47
|
end
|
61
48
|
end
|
62
49
|
class PolarFileExtensionError < PolarRuntimeError # rubocop:disable Style/Documentation
|
data/lib/oso/polar/ffi.rb
CHANGED
@@ -46,6 +46,13 @@ module Oso
|
|
46
46
|
Rust.free(ptr) unless ptr.null?
|
47
47
|
end
|
48
48
|
end
|
49
|
+
|
50
|
+
# Wrapper class for Source FFI pointer.
|
51
|
+
class Source < ::FFI::AutoPointer
|
52
|
+
def self.release(ptr)
|
53
|
+
Rust.free(ptr) unless ptr.null?
|
54
|
+
end
|
55
|
+
end
|
49
56
|
end
|
50
57
|
private_constant :FFI
|
51
58
|
end
|
@@ -56,3 +63,4 @@ require 'oso/polar/ffi/query'
|
|
56
63
|
require 'oso/polar/ffi/query_event'
|
57
64
|
require 'oso/polar/ffi/error'
|
58
65
|
require 'oso/polar/ffi/message'
|
66
|
+
require 'oso/polar/ffi/source'
|
data/lib/oso/polar/ffi/error.rb
CHANGED
@@ -83,6 +83,8 @@ module Oso
|
|
83
83
|
::Oso::Polar::PolarTypeError.new(msg, details: details)
|
84
84
|
when 'StackOverflow'
|
85
85
|
::Oso::Polar::StackOverflowError.new(msg, details: details)
|
86
|
+
when 'FileLoading'
|
87
|
+
::Oso::Polar::FileLoadingError.new(msg, details: details)
|
86
88
|
else
|
87
89
|
::Oso::Polar::PolarRuntimeError.new(msg, details: details)
|
88
90
|
end
|
data/lib/oso/polar/ffi/polar.rb
CHANGED
@@ -10,7 +10,7 @@ module Oso
|
|
10
10
|
ffi_lib FFI::LIB_PATH
|
11
11
|
|
12
12
|
attach_function :new, :polar_new, [], FFI::Polar
|
13
|
-
attach_function :
|
13
|
+
attach_function :load, :polar_load, [FFI::Polar, :string, :string], :int32
|
14
14
|
attach_function :next_inline_query, :polar_next_inline_query, [FFI::Polar, :uint32], FFI::Query
|
15
15
|
attach_function :new_id, :polar_get_external_id, [FFI::Polar], :uint64
|
16
16
|
attach_function :new_query_from_str, :polar_new_query, [FFI::Polar, :string, :uint32], FFI::Query
|
@@ -33,8 +33,8 @@ module Oso
|
|
33
33
|
# @param src [String]
|
34
34
|
# @param filename [String]
|
35
35
|
# @raise [FFI::Error] if the FFI call returns an error.
|
36
|
-
def
|
37
|
-
loaded = Rust.
|
36
|
+
def load(src, filename: nil)
|
37
|
+
loaded = Rust.load(self, src, filename)
|
38
38
|
process_messages
|
39
39
|
raise FFI::Error.get if loaded.zero?
|
40
40
|
end
|
data/lib/oso/polar/ffi/query.rb
CHANGED
@@ -15,6 +15,7 @@ module Oso
|
|
15
15
|
attach_function :application_error, :polar_application_error, [FFI::Query, :string], :int32
|
16
16
|
attach_function :next_event, :polar_next_query_event, [FFI::Query], FFI::QueryEvent
|
17
17
|
attach_function :next_message, :polar_next_query_message, [FFI::Query], FFI::Message
|
18
|
+
attach_function :source, :polar_query_source_info, [FFI::Query], FFI::Source
|
18
19
|
attach_function :free, :query_free, [FFI::Query], :int32
|
19
20
|
end
|
20
21
|
private_constant :Rust
|
@@ -74,6 +75,15 @@ module Oso
|
|
74
75
|
message.process
|
75
76
|
end
|
76
77
|
end
|
78
|
+
|
79
|
+
# @return [String]
|
80
|
+
# @raise [FFI::Error] if the FFI call returns an error.
|
81
|
+
def source
|
82
|
+
res = Rust.source(self)
|
83
|
+
raise FFI::Error.get if res.null?
|
84
|
+
|
85
|
+
res.to_s
|
86
|
+
end
|
77
87
|
end
|
78
88
|
end
|
79
89
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Oso
|
4
|
+
module Polar
|
5
|
+
module FFI
|
6
|
+
# Wrapper class for Source FFI pointer.
|
7
|
+
class Source < ::FFI::AutoPointer
|
8
|
+
# @return [String]
|
9
|
+
def to_s
|
10
|
+
@to_s ||= read_string.force_encoding('UTF-8')
|
11
|
+
end
|
12
|
+
|
13
|
+
Rust = Module.new do
|
14
|
+
extend ::FFI::Library
|
15
|
+
ffi_lib FFI::LIB_PATH
|
16
|
+
|
17
|
+
attach_function :free, :string_free, [Message], :int32
|
18
|
+
end
|
19
|
+
|
20
|
+
private_constant :Rust
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/oso/polar/polar.rb
CHANGED
@@ -42,8 +42,6 @@ module Oso
|
|
42
42
|
def initialize
|
43
43
|
@ffi_polar = FFI::Polar.create
|
44
44
|
@host = Host.new(ffi_polar)
|
45
|
-
@loaded_names = {}
|
46
|
-
@loaded_contents = {}
|
47
45
|
|
48
46
|
# Register built-in classes.
|
49
47
|
register_class PolarBoolean, name: 'Boolean'
|
@@ -56,8 +54,6 @@ module Oso
|
|
56
54
|
|
57
55
|
# Replace the current Polar instance but retain all registered classes and constructors.
|
58
56
|
def clear
|
59
|
-
loaded_names.clear
|
60
|
-
loaded_contents.clear
|
61
57
|
@ffi_polar = FFI::Polar.create
|
62
58
|
end
|
63
59
|
|
@@ -66,23 +62,11 @@ module Oso
|
|
66
62
|
# @param name [String]
|
67
63
|
# @raise [PolarFileExtensionError] if provided filename has invalid extension.
|
68
64
|
# @raise [PolarFileNotFoundError] if provided filename does not exist.
|
69
|
-
def load_file(name)
|
65
|
+
def load_file(name)
|
70
66
|
raise PolarFileExtensionError, name unless File.extname(name) == '.polar'
|
71
67
|
|
72
68
|
file_data = File.open(name, &:read)
|
73
|
-
|
74
|
-
|
75
|
-
if loaded_names.key?(name)
|
76
|
-
raise PolarFileAlreadyLoadedError, name if loaded_names[name] == hash
|
77
|
-
|
78
|
-
raise PolarFileContentsChangedError, name
|
79
|
-
elsif loaded_contents.key?(hash)
|
80
|
-
raise PolarFileNameChangedError, name, loaded_contents[hash]
|
81
|
-
else
|
82
|
-
load_str(file_data, filename: name)
|
83
|
-
loaded_names[name] = hash
|
84
|
-
loaded_contents[hash] = name
|
85
|
-
end
|
69
|
+
load_str(file_data, filename: name)
|
86
70
|
rescue Errno::ENOENT
|
87
71
|
raise PolarFileNotFoundError, name
|
88
72
|
end
|
@@ -97,7 +81,7 @@ module Oso
|
|
97
81
|
def load_str(str, filename: nil) # rubocop:disable Metrics/MethodLength
|
98
82
|
raise NullByteInPolarFileError if str.chomp("\0").include?("\0")
|
99
83
|
|
100
|
-
ffi_polar.
|
84
|
+
ffi_polar.load(str, filename: filename)
|
101
85
|
loop do
|
102
86
|
next_query = ffi_polar.next_inline_query
|
103
87
|
break if next_query.nil?
|
@@ -105,7 +89,7 @@ module Oso
|
|
105
89
|
begin
|
106
90
|
Query.new(next_query, host: host).results.next
|
107
91
|
rescue StopIteration
|
108
|
-
raise InlineQueryFailedError
|
92
|
+
raise InlineQueryFailedError, next_query.source
|
109
93
|
end
|
110
94
|
end
|
111
95
|
end
|
data/lib/oso/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oso-oso
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Oso Security, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-09-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|
@@ -141,6 +141,7 @@ files:
|
|
141
141
|
- lib/oso/polar/ffi/polar.rb
|
142
142
|
- lib/oso/polar/ffi/query.rb
|
143
143
|
- lib/oso/polar/ffi/query_event.rb
|
144
|
+
- lib/oso/polar/ffi/source.rb
|
144
145
|
- lib/oso/polar/host.rb
|
145
146
|
- lib/oso/polar/polar.rb
|
146
147
|
- lib/oso/polar/predicate.rb
|