rmagick 2.14.0 → 2.15.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rmagick might be problematic. Click here for more details.

@@ -585,13 +585,15 @@ rm_fuzz_to_dbl(VALUE fuzz_arg)
585
585
  Quantum
586
586
  rm_app2quantum(VALUE obj)
587
587
  {
588
- volatile VALUE v = obj;
588
+ VALUE v = obj;
589
589
 
590
590
  if (TYPE(obj) == T_FLOAT)
591
591
  {
592
592
  v = rb_funcall(obj, rm_ID_to_i, 0);
593
593
  }
594
594
 
595
+ RB_GC_GUARD(v);
596
+
595
597
  return NUM2QUANTUM(v);
596
598
  }
597
599
 
@@ -661,7 +663,7 @@ rm_pixelpacket_to_color_name_info(Info *info, PixelPacket *color)
661
663
  {
662
664
  Image *image;
663
665
  Info *my_info;
664
- volatile VALUE color_name;
666
+ VALUE color_name;
665
667
 
666
668
  my_info = info ? info : CloneImageInfo(NULL);
667
669
 
@@ -674,6 +676,8 @@ rm_pixelpacket_to_color_name_info(Info *info, PixelPacket *color)
674
676
  (void) DestroyImageInfo(my_info);
675
677
  }
676
678
 
679
+ RB_GC_GUARD(color_name);
680
+
677
681
  return color_name;
678
682
  }
679
683
 
@@ -699,7 +703,7 @@ rm_write_temp_image(Image *image, char *temp_name)
699
703
 
700
704
  MagickBooleanType okay;
701
705
  ExceptionInfo *exception;
702
- volatile VALUE id_value;
706
+ VALUE id_value;
703
707
  int id;
704
708
 
705
709
  exception = AcquireExceptionInfo();
@@ -730,6 +734,7 @@ rm_write_temp_image(Image *image, char *temp_name)
730
734
  rb_raise(rb_eRuntimeError, "SetImageRegistry failed.");
731
735
  }
732
736
 
737
+ RB_GC_GUARD(id_value);
733
738
  }
734
739
 
735
740
 
@@ -789,13 +794,17 @@ rm_not_implemented(void)
789
794
  void
790
795
  rm_magick_error(const char *msg, const char *loc)
791
796
  {
792
- volatile VALUE exc, mesg, extra;
797
+ VALUE exc, mesg, extra;
793
798
 
794
799
  mesg = rb_str_new2(msg);
795
800
  extra = loc ? rb_str_new2(loc) : Qnil;
796
801
 
797
802
  exc = rb_funcall(Class_ImageMagickError, rm_ID_new, 2, mesg, extra);
798
803
  (void) rb_funcall(rb_cObject, rb_intern("raise"), 1, exc);
804
+
805
+ RB_GC_GUARD(exc);
806
+ RB_GC_GUARD(mesg);
807
+ RB_GC_GUARD(extra);
799
808
  }
800
809
 
801
810
 
@@ -820,7 +829,7 @@ ImageMagickError_initialize(int argc, VALUE *argv, VALUE self)
820
829
  {
821
830
  VALUE super_argv[1] = {(VALUE)0};
822
831
  int super_argc = 0;
823
- volatile VALUE extra = Qnil;
832
+ VALUE extra = Qnil;
824
833
 
825
834
  switch(argc)
826
835
  {
@@ -838,6 +847,7 @@ ImageMagickError_initialize(int argc, VALUE *argv, VALUE self)
838
847
  (void) rb_call_super(super_argc, (const VALUE *)super_argv);
839
848
  (void) rb_iv_set(self, "@"MAGICK_LOC, extra);
840
849
 
850
+ RB_GC_GUARD(extra);
841
851
 
842
852
  return self;
843
853
  }
@@ -922,21 +932,24 @@ void rm_set_user_artifact(Image *images, Info *info)
922
932
  void
923
933
  rm_get_optional_arguments(VALUE img)
924
934
  {
925
- volatile VALUE OptionalMethodArguments;
926
- volatile VALUE opt_args;
927
- VALUE argv[1];
928
-
929
- // opt_args = Magick::OptionalMethodArguments.new(img)
930
- // opt_args.instance_eval { block }
931
- if (rb_block_given_p())
932
- {
933
- OptionalMethodArguments = rb_const_get_from(Module_Magick, rb_intern("OptionalMethodArguments"));
934
- argv[0] = img;
935
- opt_args = rb_class_new_instance(1, argv, OptionalMethodArguments);
936
- (void) rb_obj_instance_eval(0, NULL, opt_args);
937
- }
938
-
939
- return;
935
+ VALUE optional_method_arguments;
936
+ VALUE opt_args;
937
+ VALUE argv[1];
938
+
939
+ // opt_args = Magick::OptionalMethodArguments.new(img)
940
+ // opt_args.instance_eval { block }
941
+ if (rb_block_given_p())
942
+ {
943
+ optional_method_arguments = rb_const_get_from(Module_Magick, rb_intern("OptionalMethodArguments"));
944
+ argv[0] = img;
945
+ opt_args = rb_class_new_instance(1, argv, optional_method_arguments);
946
+ (void) rb_obj_instance_eval(0, NULL, opt_args);
947
+ }
948
+
949
+ RB_GC_GUARD(optional_method_arguments);
950
+ RB_GC_GUARD(opt_args);
951
+
952
+ return;
940
953
  }
941
954
 
942
955
 
@@ -1159,7 +1172,7 @@ rm_exif_by_entry(Image *image)
1159
1172
  const char *property, *value;
1160
1173
  char *str;
1161
1174
  size_t len = 0, property_l, value_l;
1162
- volatile VALUE v;
1175
+ VALUE v;
1163
1176
 
1164
1177
  (void) GetImageProperty(image, "exif:*");
1165
1178
  ResetImagePropertyIterator(image);
@@ -1223,6 +1236,9 @@ rm_exif_by_entry(Image *image)
1223
1236
 
1224
1237
  v = rb_str_new(str, len);
1225
1238
  xfree(str);
1239
+
1240
+ RB_GC_GUARD(v);
1241
+
1226
1242
  return v;
1227
1243
  }
1228
1244
 
@@ -1245,7 +1261,7 @@ rm_exif_by_number(Image *image)
1245
1261
  const char *property, *value;
1246
1262
  char *str;
1247
1263
  size_t len = 0, property_l, value_l;
1248
- volatile VALUE v;
1264
+ VALUE v;
1249
1265
 
1250
1266
  (void) GetImageProperty(image, "exif:!");
1251
1267
  ResetImagePropertyIterator(image);
@@ -1309,6 +1325,9 @@ rm_exif_by_number(Image *image)
1309
1325
 
1310
1326
  v = rb_str_new(str, len);
1311
1327
  xfree(str);
1328
+
1329
+ RB_GC_GUARD(v);
1330
+
1312
1331
  return v;
1313
1332
  }
1314
1333
 
@@ -1426,8 +1445,8 @@ rm_progress_monitor(
1426
1445
  const MagickSizeType sp,
1427
1446
  void *client_data)
1428
1447
  {
1429
- volatile VALUE rval;
1430
- volatile VALUE method, offset, span;
1448
+ VALUE rval;
1449
+ VALUE method, offset, span;
1431
1450
 
1432
1451
  tag = tag; // defeat gcc message
1433
1452
 
@@ -1443,6 +1462,11 @@ rm_progress_monitor(
1443
1462
 
1444
1463
  rval = rb_funcall((VALUE)client_data, rm_ID_call, 3, method, offset, span);
1445
1464
 
1465
+ RB_GC_GUARD(rval);
1466
+ RB_GC_GUARD(method);
1467
+ RB_GC_GUARD(offset);
1468
+ RB_GC_GUARD(span);
1469
+
1446
1470
  return RTEST(rval) ? MagickTrue : MagickFalse;
1447
1471
  }
1448
1472
 
@@ -1,5 +1,5 @@
1
1
  module Magick
2
- VERSION = '2.14.0'
2
+ VERSION = '2.15.0'
3
3
  MIN_RUBY_VERSION = '1.8.5'
4
4
  MIN_IM_VERSION = '6.4.9'
5
5
  end
@@ -30,12 +30,15 @@ module Magick
30
30
 
31
31
  # remove reference to the proc at exit
32
32
  def trace_proc=(p)
33
- if @trace_proc.nil? && !p.nil? && !@exit_block_set_up
34
- at_exit { @trace_proc = nil }
35
- @exit_block_set_up = true
36
- end
33
+ m = Mutex.new
34
+ m.synchronize do
35
+ if @trace_proc.nil? && !p.nil? && !@exit_block_set_up
36
+ at_exit { @trace_proc = nil }
37
+ @exit_block_set_up = true
38
+ end
37
39
 
38
- @trace_proc = p
40
+ @trace_proc = p
41
+ end
39
42
  end
40
43
  end
41
44
 
@@ -30,12 +30,13 @@ Gem::Specification.new do |s|
30
30
  s.required_ruby_version = ">= #{Magick::MIN_RUBY_VERSION}"
31
31
  s.requirements << "ImageMagick #{Magick::MIN_IM_VERSION} or later"
32
32
  s.add_development_dependency 'rake-compiler'
33
+ s.add_development_dependency 'rspec', '~> 3.2.0'
33
34
 
34
- if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('1.9.2')
35
- s.add_development_dependency 'rubocop', '~> 0.26.1'
35
+ if Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new('1.9.2')
36
+ s.add_development_dependency 'rubocop'
36
37
  end
37
38
 
38
- if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.2.0')
39
+ if Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new('2.2.0')
39
40
  s.add_development_dependency 'test-unit', '~> 2'
40
41
  end
41
42
  end
@@ -0,0 +1,156 @@
1
+ class Magick::Draw
2
+ def self._dummy_img_
3
+ @@_dummy_img_
4
+ end
5
+ end
6
+
7
+ RSpec.describe Magick::Draw do
8
+ let(:draw) { Magick::Draw.new }
9
+
10
+ describe '._dummy_img_' do
11
+ it 'works' do
12
+ # initially this variable is not defined.
13
+ expect { Magick::Draw._dummy_img_ }.to raise_error(NameError)
14
+
15
+ # cause it to become defined. save the object id.
16
+ draw.get_type_metrics('ABCDEF')
17
+ dummy = nil
18
+ expect { dummy = Magick::Draw._dummy_img_ }.not_to raise_error
19
+
20
+ expect(dummy).to be_instance_of(Magick::Image)
21
+
22
+ # ensure that it is always the same object
23
+ draw.get_type_metrics('ABCDEF')
24
+ dummy2 = nil
25
+ expect { dummy2 = Magick::Draw._dummy_img_ }.not_to raise_error
26
+ expect(dummy).to eq dummy2
27
+ end
28
+ end
29
+
30
+ describe '#kerning=' do
31
+ it 'assigns without raising an error' do
32
+ expect { draw.kerning = 1 }.not_to raise_error
33
+ end
34
+ end
35
+
36
+ describe '#kerning' do
37
+ it 'accepts a valid parameter without raising an error' do
38
+ expect { draw.kerning(1) }.not_to raise_error
39
+ end
40
+
41
+ it 'raises an error when given an invalid parameter' do
42
+ expect { draw.kerning('a') }.to raise_error(ArgumentError)
43
+ expect { draw.kerning([]) }.to raise_error(TypeError)
44
+ end
45
+ end
46
+
47
+ describe '#interline_spacing=' do
48
+ it 'assigns without raising an error' do
49
+ expect { draw.interline_spacing = 1 }.not_to raise_error
50
+ end
51
+ end
52
+
53
+ describe '#interline_spacing' do
54
+ it 'accepts a valid parameter without raising an error' do
55
+ expect { draw.interline_spacing(1) }.not_to raise_error
56
+ end
57
+
58
+ it 'raises an error when given an invalid parameter' do
59
+ expect { draw.interline_spacing('a') }.to raise_error(ArgumentError)
60
+ expect { draw.interline_spacing([]) }.to raise_error(TypeError)
61
+ end
62
+ end
63
+
64
+ describe '#interword_spacing=' do
65
+ it 'assigns without raising an error' do
66
+ expect { draw.interword_spacing = 1 }.not_to raise_error
67
+ end
68
+ end
69
+
70
+ describe '#interword_spacing' do
71
+ it 'accepts a valid parameter without raising an error' do
72
+ expect { draw.interword_spacing(1) }.not_to raise_error
73
+ end
74
+
75
+ it 'raises an error when given an invalid parameter' do
76
+ expect { draw.interword_spacing('a') }.to raise_error(ArgumentError)
77
+ expect { draw.interword_spacing([]) }.to raise_error(TypeError)
78
+ end
79
+ end
80
+
81
+ describe '#marshal_dump', '#marshal_load' do
82
+ it 'marshals without an error' do
83
+ skip 'this spec fails on some versions of ImageMagick'
84
+ rose = Magick::Image.read('rose:').first
85
+ granite = Magick::Image.read('granite:').first
86
+ s = granite.to_blob { self.format = 'miff' }
87
+ granite = Magick::Image.from_blob(s).first
88
+ blue_stroke = Magick::Image.new(20,20) { self.background_color = 'blue' }
89
+ s = blue_stroke.to_blob { self.format = 'miff' }
90
+ blue_stroke = Magick::Image.from_blob(s).first
91
+
92
+ draw.affine = Magick::AffineMatrix.new(1, 2, 3, 4, 5, 6)
93
+ draw.decorate = Magick::LineThroughDecoration
94
+ draw.encoding = 'AdobeCustom'
95
+ draw.gravity = Magick::CenterGravity
96
+ draw.fill = Magick::Pixel.from_color('red')
97
+ draw.stroke = Magick::Pixel.from_color('blue')
98
+ draw.stroke_width = 5
99
+ draw.fill_pattern = granite
100
+ draw.stroke_pattern = blue_stroke
101
+ draw.text_antialias = true
102
+ draw.font = 'Arial-Bold'
103
+ draw.font_family = 'arial'
104
+ draw.font_style = Magick::ItalicStyle
105
+ draw.font_stretch = Magick::CondensedStretch
106
+ draw.font_weight = Magick::BoldWeight
107
+ draw.pointsize = 12
108
+ draw.density = '72x72'
109
+ draw.align = Magick::CenterAlign
110
+ draw.undercolor = Magick::Pixel.from_color('green')
111
+ draw.kerning = 10.5
112
+ draw.interword_spacing = 3.75
113
+
114
+ draw.circle(20, 25, 20, 28)
115
+ dumped = nil
116
+ expect { dumped = Marshal.dump(draw) }.not_to raise_error
117
+ expect { Marshal.load(dumped) }.not_to raise_error
118
+ end
119
+ end
120
+
121
+ describe '#fill_pattern' do
122
+ it 'accepts an Image argument' do
123
+ img = Magick::Image.new(20,20)
124
+ expect { draw.fill_pattern = img }.not_to raise_error
125
+ end
126
+
127
+ it 'accepts an ImageList argument' do
128
+ img = Magick::Image.new(20,20)
129
+ ilist = Magick::ImageList.new
130
+ ilist << img
131
+ expect { draw.fill_pattern = ilist }.not_to raise_error
132
+ end
133
+
134
+ it 'does not accept arbitrary arguments' do
135
+ expect { draw.fill_pattern = 1 }.to raise_error(NoMethodError)
136
+ end
137
+ end
138
+
139
+ describe '#stroke_pattern' do
140
+ it 'accepts an Image argument' do
141
+ img = Magick::Image.new(20,20)
142
+ expect { draw.stroke_pattern = img }.not_to raise_error
143
+ end
144
+
145
+ it 'accepts an ImageList argument' do
146
+ img = Magick::Image.new(20,20)
147
+ ilist = Magick::ImageList.new
148
+ ilist << img
149
+ expect { draw.stroke_pattern = ilist }.not_to raise_error
150
+ end
151
+
152
+ it 'does not accept arbitrary arguments' do
153
+ expect { draw.stroke_pattern = 1 }.to raise_error(NoMethodError)
154
+ end
155
+ end
156
+ end
@@ -0,0 +1 @@
1
+ require 'rmagick'
@@ -51,7 +51,6 @@ class Magick_UT < Test::Unit::TestCase
51
51
  ary = Magick::AlphaChannelType.enumerators
52
52
  end
53
53
  assert_instance_of(Array, ary)
54
- assert_equal(11, ary.length)
55
54
 
56
55
  assert_nothing_raised do
57
56
  ary = Magick::AlignType.enumerators
@@ -36,4 +36,3 @@ require 'Pixel.rb'
36
36
  require 'Preview.rb'
37
37
  require 'Info.rb'
38
38
  require 'Magick.rb'
39
- require 'Draw.rb'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rmagick
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.14.0
4
+ version: 2.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Hunter
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2015-03-31 00:00:00.000000000 Z
14
+ date: 2015-04-28 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rake-compiler
@@ -28,19 +28,33 @@ dependencies:
28
28
  - !ruby/object:Gem::Version
29
29
  version: '0'
30
30
  - !ruby/object:Gem::Dependency
31
- name: rubocop
31
+ name: rspec
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  requirements:
34
34
  - - "~>"
35
35
  - !ruby/object:Gem::Version
36
- version: 0.26.1
36
+ version: 3.2.0
37
37
  type: :development
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
41
  - - "~>"
42
42
  - !ruby/object:Gem::Version
43
- version: 0.26.1
43
+ version: 3.2.0
44
+ - !ruby/object:Gem::Dependency
45
+ name: rubocop
46
+ requirement: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: '0'
51
+ type: :development
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
44
58
  description: RMagick is an interface between Ruby and ImageMagick.
45
59
  email: github@benjaminfleischer.com
46
60
  executables: []
@@ -50,9 +64,11 @@ extra_rdoc_files: []
50
64
  files:
51
65
  - ".gitignore"
52
66
  - ".hound.yml"
67
+ - ".rspec"
53
68
  - ".rubocop.yml"
54
69
  - ".simplecov"
55
70
  - ".travis.yml"
71
+ - CODE_OF_CONDUCT.md
56
72
  - CONTRIBUTING.md
57
73
  - ChangeLog
58
74
  - Doxyfile
@@ -410,7 +426,8 @@ files:
410
426
  - lib/rvg/transformable.rb
411
427
  - lib/rvg/units.rb
412
428
  - rmagick.gemspec
413
- - test/Draw.rb
429
+ - spec/rmagick/draw_spec.rb
430
+ - spec/spec_helper.rb
414
431
  - test/Image1.rb
415
432
  - test/Image2.rb
416
433
  - test/Image3.rb
@@ -454,7 +471,8 @@ signing_key:
454
471
  specification_version: 4
455
472
  summary: Ruby binding to ImageMagick
456
473
  test_files:
457
- - test/Draw.rb
474
+ - spec/rmagick/draw_spec.rb
475
+ - spec/spec_helper.rb
458
476
  - test/Image1.rb
459
477
  - test/Image2.rb
460
478
  - test/Image3.rb