From: merch-redmine@... Date: 2020-05-29T02:52:36+00:00 Subject: [ruby-core:98564] [Ruby master Bug#16918] Dir.mktmpdir should yield a copy of the dir to protect cleanup Issue #16918 has been updated by jeremyevans0 (Jeremy Evans). Backport changed from 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN to 2.6: REQUIRED, 2.7: REQUIRED I agree this is a bug and have added a pull request to fix it: https://github.com/ruby/ruby/pull/3159 ---------------------------------------- Bug #16918: Dir.mktmpdir should yield a copy of the dir to protect cleanup https://bugs.ruby-lang.org/issues/16918#change-85861 * Author: headius (Charles Nutter) * Status: Open * Priority: Normal * ruby -v: ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-darwin18] * Backport: 2.6: REQUIRED, 2.7: REQUIRED ---------------------------------------- If you modify the dir string passed into the block from `Dir.mktmpdir`, the logic to clean up the temporary directory may fail: ``` $ rvm ruby-2.6.5 do ruby -rtmpdir -e "Dir.mktmpdir('foo') {|dir| dir << 'bar'}" Traceback (most recent call last): 9: from -e:1:in `
' 8: from /Users/headius/.rvm/rubies/ruby-2.6.5/lib/ruby/2.6.0/tmpdir.rb:101:in `mktmpdir' 7: from /Users/headius/.rvm/rubies/ruby-2.6.5/lib/ruby/2.6.0/fileutils.rb:758:in `remove_entry' 6: from /Users/headius/.rvm/rubies/ruby-2.6.5/lib/ruby/2.6.0/fileutils.rb:1480:in `postorder_traverse' 5: from /Users/headius/.rvm/rubies/ruby-2.6.5/lib/ruby/2.6.0/fileutils.rb:760:in `block in remove_entry' 4: from /Users/headius/.rvm/rubies/ruby-2.6.5/lib/ruby/2.6.0/fileutils.rb:1425:in `remove' 3: from /Users/headius/.rvm/rubies/ruby-2.6.5/lib/ruby/2.6.0/fileutils.rb:1436:in `remove_file' 2: from /Users/headius/.rvm/rubies/ruby-2.6.5/lib/ruby/2.6.0/fileutils.rb:1442:in `platform_support' 1: from /Users/headius/.rvm/rubies/ruby-2.6.5/lib/ruby/2.6.0/fileutils.rb:1437:in `block in remove_file' /Users/headius/.rvm/rubies/ruby-2.6.5/lib/ruby/2.6.0/fileutils.rb:1437:in `unlink': No such file or directory @ apply2files - /var/folders/cq/ylcgmnn556x33f5hsqd0h54h0000gn/T/foo20200528-99594-tuq6pubar (Errno::ENOENT) ``` I believe `Dir.mktmpdir` should protect its cleanup logic by yielding a copy of the dir string, rather than the exact string object it intends to use for cleanup. -- https://bugs.ruby-lang.org/ Unsubscribe: