Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit cddd270

Browse files
author
Andrey Glushkov
committed
Allow to use vips_block_untrusted_set and vips_operation_block_set methods
1 parent dde924b commit cddd270

File tree

4 files changed

+47
-4
lines changed

4 files changed

+47
-4
lines changed

‎lib/vips/operation.rb‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@
88
require "set"
99

1010
module Vips
11+
if at_least_libvips?(8, 13)
12+
attach_function :vips_block_untrusted_set, [:bool], :void
13+
attach_function :vips_operation_block_set, %i[string bool], :void
14+
end
15+
1116
private
1217

1318
attach_function :vips_operation_new, [:string], :pointer

‎spec/block_operations_spec.rb‎

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
require "spec_helper"
2+
3+
RSpec.describe Vips, version: [8, 13] do
4+
let(:svg_image) { simg("lion.svg") }
5+
let(:jpg_image) { simg("wagon.jpg") }
6+
7+
if has_svg?
8+
it "can block untrusted operations" do
9+
untrusted_image = svg_image # svgload operation is known as untrusted
10+
11+
# Block
12+
Vips.vips_block_untrusted_set(true)
13+
expect { Vips::Image.new_from_file(untrusted_image) }.to raise_error Vips::Error, /svgload/
14+
15+
# Unblock
16+
Vips.vips_block_untrusted_set(false)
17+
expect { Vips::Image.new_from_file(untrusted_image) }.not_to raise_error
18+
end
19+
end
20+
21+
if has_jpeg? && has_svg?
22+
it "can block specific operations" do
23+
# Block all loaders except jpeg
24+
Vips.vips_operation_block_set("VipsForeignLoad", true)
25+
Vips.vips_operation_block_set("VipsForeignLoadJpeg", false)
26+
expect { Vips::Image.new_from_file(svg_image) }.to raise_error Vips::Error, /svgload/
27+
expect { Vips::Image.new_from_file(jpg_image) }.not_to raise_error
28+
29+
# Unblock all loaders
30+
Vips.vips_operation_block_set("VipsForeignLoad", false)
31+
expect { Vips::Image.new_from_file(svg_image) }.not_to raise_error
32+
end
33+
end
34+
end

‎spec/image_spec.rb‎

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
require "spec_helper"
22

3-
def has_jpeg?
4-
Vips.type_find("VipsOperation", "jpegload") != nil
5-
end
6-
73
RSpec.describe Vips::Image do
84
it "can save an image to a file" do
95
filename = timg "x.v"

‎spec/spec_helper.rb‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,14 @@ def timg(name)
2222
File.join(@temp_dir, name)
2323
end
2424

25+
def has_jpeg?
26+
Vips.type_find("VipsOperation", "jpegload") != nil
27+
end
28+
29+
def has_svg?
30+
Vips.type_find("VipsOperation", "svgload") != nil
31+
end
32+
2533
RSpec.configure do |config|
2634
config.around do |example|
2735
Dir.mktmpdir("ruby-vips-spec-") do |dir|

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /