rmagick 4.1.2 → 4.2.3

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.

@@ -285,7 +285,7 @@ Export_ColorInfo(ColorInfo *ci, VALUE st)
285
285
  ci->color.green = (MagickRealType) pixel.green;
286
286
  ci->color.blue = (MagickRealType) pixel.blue;
287
287
  #if defined(IMAGEMAGICK_7)
288
- ci->color.alpha = (MagickRealType) OpaqueAlpha;
288
+ rm_set_pixelinfo_alpha(&ci->color, (MagickRealType) OpaqueAlpha);
289
289
  #else
290
290
  ci->color.opacity = (MagickRealType) OpaqueOpacity;
291
291
  #endif
@@ -760,7 +760,7 @@ Import_SegmentInfo(SegmentInfo *segment)
760
760
  RB_GC_GUARD(y1);
761
761
  RB_GC_GUARD(x2);
762
762
  RB_GC_GUARD(y2);
763
-
763
+
764
764
  return rb_funcall(Class_Segment, rm_ID_new, 4, x1, y1, x2, y2);
765
765
  }
766
766
 
data/ext/RMagick/rmutil.c CHANGED
@@ -12,6 +12,11 @@
12
12
 
13
13
  #include "rmagick.h"
14
14
  #include <errno.h>
15
+ #if defined(_WIN32)
16
+ #include <Windows.h>
17
+ #else
18
+ #include <pthread.h>
19
+ #endif
15
20
 
16
21
  static VALUE rescue_not_str(VALUE, VALUE ATTRIBUTE_UNUSED) ATTRIBUTE_NORETURN;
17
22
  static void handle_exception(ExceptionInfo *, Image *, ErrorRetention);
@@ -853,6 +858,25 @@ rm_magick_error(const char *msg)
853
858
  RB_GC_GUARD(mesg);
854
859
  }
855
860
 
861
+ #if defined(IMAGEMAGICK_7)
862
+ /**
863
+ * Sets the alpha channel of a pixel color
864
+ *
865
+ * No Ruby usage (internal function)
866
+ *
867
+ * @param pixel the Pixel
868
+ * @param value the value
869
+ */
870
+ void
871
+ rm_set_pixelinfo_alpha(PixelInfo *pixel, const MagickRealType value)
872
+ {
873
+ pixel->alpha = value;
874
+ if (value != (MagickRealType) OpaqueAlpha)
875
+ {
876
+ pixel->alpha_trait = BlendPixelTrait;
877
+ }
878
+ }
879
+ #endif
856
880
 
857
881
  /**
858
882
  * Initialize a new ImageMagickError object - store the "loc" string in the
@@ -1000,7 +1024,16 @@ rm_get_optional_arguments(VALUE img)
1000
1024
  optional_method_arguments = rb_const_get_from(Module_Magick, rb_intern("OptionalMethodArguments"));
1001
1025
  argv[0] = img;
1002
1026
  opt_args = rb_class_new_instance(1, argv, optional_method_arguments);
1003
- rb_obj_instance_eval(0, NULL, opt_args);
1027
+
1028
+ if (rb_proc_arity(rb_block_proc()) == 0)
1029
+ {
1030
+ rb_warn("passing a block without an image argument is deprecated");
1031
+ rb_obj_instance_eval(0, NULL, opt_args);
1032
+ }
1033
+ else
1034
+ {
1035
+ rb_yield(opt_args);
1036
+ }
1004
1037
  }
1005
1038
 
1006
1039
  RB_GC_GUARD(optional_method_arguments);
@@ -1530,14 +1563,15 @@ rm_progress_monitor(
1530
1563
  VALUE rval;
1531
1564
  VALUE method, offset, span;
1532
1565
 
1533
- // Default Ruby minimum stack size
1534
- #define RUBY_VM_THREAD_MACHINE_STACK_SIZE_MIN ( 16 * 1024 * sizeof(VALUE)) /* 64 KB or 128 KB */
1535
-
1536
- // Check stack length manually instead of ruby_stack_check() for old Ruby.
1537
- if (ruby_stack_length(NULL) > RUBY_VM_THREAD_MACHINE_STACK_SIZE_MIN)
1566
+ // Check running thread.
1567
+ if (rm_current_thread_id() != rm_main_thread_id)
1538
1568
  {
1539
- // If there is not enough stack or the using stack size shows an abnormal value in Ruby,
1540
- // skip the callback and continue ImageMagick process.
1569
+ // ImageMagick might call back in a different thread than Ruby is running in.
1570
+ // If it is a different thread, it would not have a Ruby GVL and
1571
+ // it could not retrieve properly Ruby stack.
1572
+
1573
+ // Unfortunately, there is no API available to check if the current thread has a GVL,
1574
+ // so the thread id was checked in here.
1541
1575
  return MagickTrue;
1542
1576
  }
1543
1577
 
@@ -1868,3 +1902,19 @@ rm_raise_exception(ExceptionInfo *exception)
1868
1902
  rm_magick_error(msg);
1869
1903
  }
1870
1904
 
1905
+ /**
1906
+ * Get current thread id.
1907
+ *
1908
+ * No Ruby usage (internal function)
1909
+ *
1910
+ * @return thread id
1911
+ */
1912
+ unsigned long long
1913
+ rm_current_thread_id()
1914
+ {
1915
+ #if defined(_WIN32)
1916
+ return (unsigned long long)GetCurrentThreadId();
1917
+ #else
1918
+ return (unsigned long long)pthread_self();
1919
+ #endif
1920
+ }
@@ -1,5 +1,5 @@
1
1
  module Magick
2
- VERSION = '4.1.2'
2
+ VERSION = '4.2.3'
3
3
  MIN_RUBY_VERSION = '2.3.0'
4
4
  MIN_IM_VERSION = '6.7.7'
5
5
  end
data/lib/rvg/rvg.rb CHANGED
@@ -85,7 +85,7 @@ module Magick
85
85
  @background_image.change_geometry(Magick::Geometry.new(width, height)) do |new_cols, new_rows|
86
86
  bg_image = @background_image.resize(new_cols, new_rows)
87
87
  if bg_image.columns != width || bg_image.rows != height
88
- bg = Magick::Image.new(width, height) { self.background_color = bgcolor }
88
+ bg = Magick::Image.new(width, height) { |options| options.background_color = bgcolor }
89
89
  bg_image = bg.composite!(bg_image, Magick::CenterGravity, Magick::OverCompositeOp)
90
90
  end
91
91
  bg_image
@@ -96,7 +96,7 @@ module Magick
96
96
  end
97
97
  else
98
98
  bgcolor = bgfill
99
- canvas = Magick::Image.new(Integer(@width), Integer(@height)) { self.background_color = bgcolor }
99
+ canvas = Magick::Image.new(Integer(@width), Integer(@height)) { |options| options.background_color = bgcolor }
100
100
  end
101
101
  canvas[:desc] = @desc if @desc
102
102
  canvas[:title] = @title if @title
data/rmagick.gemspec CHANGED
@@ -31,8 +31,9 @@ Gem::Specification.new do |s|
31
31
  s.add_development_dependency 'rspec', '~> 3.8'
32
32
  s.add_development_dependency 'rspec_junit_formatter', '~> 0.4.1'
33
33
  if RUBY_PLATFORM !~ /mswin|mingw/
34
- s.add_development_dependency 'rubocop', '~> 0.68.0'
35
- s.add_development_dependency 'rubocop-rspec', '~> 1.37.0'
34
+ s.add_development_dependency 'rubocop', '~> 0.81.0'
35
+ s.add_development_dependency 'rubocop-rspec', '~> 1.38.1'
36
+ s.add_development_dependency 'rubocop-performance', '~> 1.5.2'
36
37
  end
37
38
  s.add_development_dependency 'simplecov', '~> 0.16.1'
38
39
  s.add_development_dependency 'yard', '~> 0.9.24'
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: 4.1.2
4
+ version: 4.2.3
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: 2020-04-13 00:00:00.000000000 Z
14
+ date: 2021-10-10 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: pry
@@ -75,28 +75,42 @@ dependencies:
75
75
  requirements:
76
76
  - - "~>"
77
77
  - !ruby/object:Gem::Version
78
- version: 0.68.0
78
+ version: 0.81.0
79
79
  type: :development
80
80
  prerelease: false
81
81
  version_requirements: !ruby/object:Gem::Requirement
82
82
  requirements:
83
83
  - - "~>"
84
84
  - !ruby/object:Gem::Version
85
- version: 0.68.0
85
+ version: 0.81.0
86
86
  - !ruby/object:Gem::Dependency
87
87
  name: rubocop-rspec
88
88
  requirement: !ruby/object:Gem::Requirement
89
89
  requirements:
90
90
  - - "~>"
91
91
  - !ruby/object:Gem::Version
92
- version: 1.37.0
92
+ version: 1.38.1
93
93
  type: :development
94
94
  prerelease: false
95
95
  version_requirements: !ruby/object:Gem::Requirement
96
96
  requirements:
97
97
  - - "~>"
98
98
  - !ruby/object:Gem::Version
99
- version: 1.37.0
99
+ version: 1.38.1
100
+ - !ruby/object:Gem::Dependency
101
+ name: rubocop-performance
102
+ requirement: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - "~>"
105
+ - !ruby/object:Gem::Version
106
+ version: 1.5.2
107
+ type: :development
108
+ prerelease: false
109
+ version_requirements: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - "~>"
112
+ - !ruby/object:Gem::Version
113
+ version: 1.5.2
100
114
  - !ruby/object:Gem::Dependency
101
115
  name: simplecov
102
116
  requirement: !ruby/object:Gem::Requirement
@@ -206,7 +220,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
206
220
  version: '0'
207
221
  requirements:
208
222
  - ImageMagick 6.7.7 or later
209
- rubygems_version: 3.0.6
223
+ rubygems_version: 3.2.22
210
224
  signing_key:
211
225
  specification_version: 4
212
226
  summary: Ruby binding to ImageMagick