ruby_memcheck 1.0.3 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c5872b7150e47c3eb369c82bff0f8adbd58e48ecf69cdd2c41f7aee2e11d2591
4
- data.tar.gz: eb72ad63ada1c5af40938059f25f6392d30b44262d2482fc836aac795673683c
3
+ metadata.gz: 4cd707ffa4ebdb25945d2d2654659a38c2272a0e73678d9c9f58e655e19b3cc6
4
+ data.tar.gz: df247c2a1e77374ad3c9521b1a3f2554c443fa80e33d50cd948727821a3267d5
5
5
  SHA512:
6
- metadata.gz: 0b6582216142426fb20ebbad4493b0002f83aa3696ec314cf8173890eba2cc1398fcf89d7227a629e7be3f642f60551b315cc9957df47f17e0d603fa406b1a43
7
- data.tar.gz: 74739f350aa890ef955fdc8d63c40810f8997ef4aaf8b5c5763086787da22efadf243e1a5e9d2ea20ac672714c1aed20bc72df9ab9a8abd22c7b3c9244114c59
6
+ metadata.gz: 7b4c337a38ad04be648365f4de828187524f11f67699aaa187182d906e4dbf922d84767003e4bab79572c0b3c41fe908c2bb23b1029b1d49360a9c399df5010f
7
+ data.tar.gz: 3c73f128a88b0eabce497b0ebb464166ccc541dbf5ec0e03b1951d8e1569abd6123a48a454b6a2e9b808c95770ea922b6e027db8c2be2a458d5f0b53f3cb74bc
data/README.md CHANGED
@@ -109,13 +109,13 @@ The easiest way to use this gem is to use it on your test suite (minitest or RSp
109
109
  For example, if your Rakefile looked like this before:
110
110
 
111
111
  ```ruby
112
- RubyMemcheck::RSpec::RakeTask.new(spec: :compile)
112
+ RSpec::Core::RakeTask.new(spec: :compile)
113
113
  ```
114
114
 
115
115
  You can change it to look like this:
116
116
 
117
117
  ```ruby
118
- RubyMemcheck::RSpec::RakeTask.new(spec: :compile)
118
+ RSpec::Core::RakeTask.new(spec: :compile)
119
119
  namespace :spec do
120
120
  RubyMemcheck::RSpec::RakeTask.new(valgrind: :compile)
121
121
  end
@@ -156,7 +156,7 @@ When you run `RubyMemcheck.config`, you are creating a default `RubyMemcheck::Co
156
156
 
157
157
  If you find false positives in the output, you can create suppression files in a `suppressions` directory in the root directory of your gem. In this directory, you can create [Valgrind suppression files](https://wiki.wxwidgets.org/Valgrind_Suppression_File_Howto).
158
158
 
159
- The most basic suppression file is `your_binary_name_ruby.supp`. If you want some suppressions for only specific versions of Ruby, you can add the Ruby version to the filename. For example, `your_binary_name_ruby-3.supp` will suppress for any Rubies with a major version of 3 (e.g. 3.0.0, 3.1.1, etc.), while suppression file `your_binary_name_ruby-3.1.supp` will only be used for Ruby with a major and minor version of 3.1 (e.g. 3.1.0, 3.1.1, etc.).
159
+ The most basic suppression file is `ruby.supp`. If you want some suppressions for only specific versions of Ruby, you can add the Ruby version to the filename. For example, `ruby-3.supp` will suppress for any Rubies with a major version of 3 (e.g. 3.0.0, 3.1.1, etc.), while suppression file `ruby-3.1.supp` will only be used for Ruby with a major and minor version of 3.1 (e.g. 3.1.0, 3.1.1, etc.).
160
160
 
161
161
  ## Success stories
162
162
 
@@ -29,11 +29,9 @@ module RubyMemcheck
29
29
  /\Arb_respond_to\z/,
30
30
  /\Arb_thread_create\z/, # Threads are relased to a cache, so they may be reported as a leak
31
31
  /\Arb_yield/,
32
- /\Astack_chunk_alloc/, # Remove this after Ruby 2.7.7, 3.0.5, 3.1.3 are relased
33
- # See: https://github.com/Shopify/ruby_memcheck/issues/6
34
32
  ].freeze
35
33
 
36
- attr_reader :binary_name, :ruby, :valgrind, :valgrind_options, :valgrind_suppressions_dir,
34
+ attr_reader :binary_name, :ruby, :valgrind, :valgrind_options, :valgrind_suppression_files,
37
35
  :valgrind_generate_suppressions, :skipped_ruby_functions, :valgrind_xml_dir, :output_io
38
36
  alias_method :valgrind_generate_suppressions?, :valgrind_generate_suppressions
39
37
 
@@ -52,7 +50,9 @@ module RubyMemcheck
52
50
  @ruby = ruby
53
51
  @valgrind = valgrind
54
52
  @valgrind_options = valgrind_options
55
- @valgrind_suppressions_dir = File.expand_path(valgrind_suppressions_dir)
53
+ @valgrind_suppression_files =
54
+ get_valgrind_suppression_files(File.join(__dir__, "../../suppressions")) +
55
+ get_valgrind_suppression_files(valgrind_suppressions_dir)
56
56
  @valgrind_generate_suppressions = valgrind_generate_suppressions
57
57
  @skipped_ruby_functions = skipped_ruby_functions
58
58
  @output_io = output_io
@@ -82,7 +82,7 @@ module RubyMemcheck
82
82
  "ulimit -s unlimited && ",
83
83
  valgrind,
84
84
  valgrind_options,
85
- get_valgrind_suppression_files(valgrind_suppressions_dir).map { |f| "--suppressions=#{f}" },
85
+ valgrind_suppression_files.map { |f| "--suppressions=#{f}" },
86
86
  valgrind_generate_suppressions ? "--gen-suppressions=all" : "",
87
87
  ruby,
88
88
  args,
@@ -92,13 +92,22 @@ module RubyMemcheck
92
92
  private
93
93
 
94
94
  def get_valgrind_suppression_files(dir)
95
+ dir = File.expand_path(dir)
96
+
95
97
  full_ruby_version = "#{RUBY_ENGINE}-#{RUBY_VERSION}.#{RUBY_PATCHLEVEL}"
96
98
  versions = [full_ruby_version]
97
99
  (0..3).reverse_each { |i| versions << full_ruby_version.split(".")[0, i].join(".") }
98
100
  versions << RUBY_ENGINE
99
101
 
100
102
  versions.map do |version|
101
- Dir[File.join(dir, "#{binary_name}_#{version}.supp")]
103
+ old_format_files = Dir[File.join(dir, "#{binary_name}_#{version}.supp")]
104
+
105
+ unless old_format_files.empty?
106
+ warn("ruby_memcheck: please migrate your suppression filenames from " \
107
+ "`gem_name_ruby-3.1.0.supp` to `ruby-3.1.0.supp` (drop the gem name from the filename)")
108
+ end
109
+
110
+ old_format_files + Dir[File.join(dir, "#{version}.supp")]
102
111
  end.flatten
103
112
  end
104
113
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RubyMemcheck
4
- VERSION = "1.0.3"
4
+ VERSION = "1.1.0"
5
5
  end
@@ -0,0 +1,21 @@
1
+ {
2
+ On platforms where memcpy is safe for overlapped memory, the compiler will sometimes replace memmove with memcpy. Valgrind may report a false positive.
3
+ Memcheck:Overlap
4
+ fun:__memcpy_chk
5
+ fun:memmove
6
+ ...
7
+ }
8
+ {
9
+ Requiring a file will add it to the loaded features, which may be reported as a leak.
10
+ Memcheck:Leak
11
+ ...
12
+ fun:require_internal
13
+ ...
14
+ }
15
+ {
16
+ Remove this after Ruby 2.7.7, 3.0.5, 3.1.3 are relased. See: https://github.com/Shopify/ruby_memcheck/issues/6
17
+ Memcheck:Leak
18
+ ...
19
+ fun:stack_chunk_alloc
20
+ ...
21
+ }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_memcheck
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Zhu
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-07-24 00:00:00.000000000 Z
11
+ date: 2022-10-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -122,7 +122,7 @@ dependencies:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: '2.3'
125
- description:
125
+ description:
126
126
  email:
127
127
  - peter@peterzhu.ca
128
128
  executables: []
@@ -148,12 +148,13 @@ files:
148
148
  - lib/ruby_memcheck/valgrind_error.rb
149
149
  - lib/ruby_memcheck/version.rb
150
150
  - ruby_memcheck.gemspec
151
+ - suppressions/ruby.supp
151
152
  homepage: https://github.com/peterzhu2118/ruby_memcheck
152
153
  licenses:
153
154
  - MIT
154
155
  metadata:
155
156
  homepage_uri: https://github.com/peterzhu2118/ruby_memcheck
156
- post_install_message:
157
+ post_install_message:
157
158
  rdoc_options: []
158
159
  require_paths:
159
160
  - lib
@@ -169,7 +170,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
169
170
  version: '0'
170
171
  requirements: []
171
172
  rubygems_version: 3.3.7
172
- signing_key:
173
+ signing_key:
173
174
  specification_version: 4
174
175
  summary: Use Valgrind memcheck without going crazy
175
176
  test_files: []