From d8541a40859a02765628671d63fe91be6668bcd8 Mon Sep 17 00:00:00 2001 From: Bart de Water Date: Tue, 7 Jul 2020 12:22:34 -0400 Subject: [PATCH] Fix Lint/DeprecatedOpenSSLConstant auto-correction of OpenSSL::Cipher to use lower case Testing on some Linux-based CI systems revealed the upper case cipher name is not always accepted, but lower case always is. --- CHANGELOG.md | 1 + docs/modules/ROOT/pages/cops_lint.adoc | 2 +- .../cop/lint/deprecated_open_ssl_constant.rb | 8 +++---- .../lint/deprecated_open_ssl_constant_spec.rb | 22 +++++++++---------- 4 files changed, 17 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index efafb84cbec..4d9fc362c7d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ * [#8257](https://github.com/rubocop-hq/rubocop/issues/8257): Fix an error for `Style/BisectedAttrAccessor` when using `attr_reader` and `attr_writer` with splat arguments. ([@fatkodima][]) * [#8239](https://github.com/rubocop-hq/rubocop/pull/8239): Don't load `.rubocop.yml` from personal folders to check for exclusions if given a custom configuration file. ([@deivid-rodriguez][]) * [#8256](https://github.com/rubocop-hq/rubocop/issues/8256): Fix an error for `--auto-gen-config` when running a cop who do not support auto-correction. ([@koic][]) +* [#8262](https://github.com/rubocop-hq/rubocop/pull/8262): Fix `Lint/DeprecatedOpenSSLConstant` auto-correction of `OpenSSL::Cipher` to use lower case, as some Linux-based systems do not accept upper cased cipher names. ([@bdewater][]) ## 0.87.0 (2020-07-06) diff --git a/docs/modules/ROOT/pages/cops_lint.adoc b/docs/modules/ROOT/pages/cops_lint.adoc index 12aacc889de..d97306b859d 100644 --- a/docs/modules/ROOT/pages/cops_lint.adoc +++ b/docs/modules/ROOT/pages/cops_lint.adoc @@ -507,7 +507,7 @@ instead. OpenSSL::Cipher::AES.new(128, :GCM) # good -OpenSSL::Cipher.new('AES-128-GCM') +OpenSSL::Cipher.new('aes-128-gcm') ---- [source,ruby] diff --git a/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb b/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb index 53aa3e5616f..459231e1a10 100644 --- a/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +++ b/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb @@ -15,7 +15,7 @@ module Lint # OpenSSL::Cipher::AES.new(128, :GCM) # # # good - # OpenSSL::Cipher.new('AES-128-GCM') + # OpenSSL::Cipher.new('aes-128-gcm') # # @example # @@ -127,9 +127,9 @@ def replacement_args(node) end def build_cipher_arguments(node, algorithm_name) - algorithm_parts = algorithm_name.split('-') - size_and_mode = sanitize_arguments(node.arguments) - "'#{(algorithm_parts + size_and_mode + ['CBC']).take(3).join('-')}'" + algorithm_parts = algorithm_name.downcase.split('-') + size_and_mode = sanitize_arguments(node.arguments).map(&:downcase) + "'#{(algorithm_parts + size_and_mode + ['cbc']).take(3).join('-')}'" end end end diff --git a/spec/rubocop/cop/lint/deprecated_open_ssl_constant_spec.rb b/spec/rubocop/cop/lint/deprecated_open_ssl_constant_spec.rb index 2dbf14e88f1..a0b091b6a6f 100644 --- a/spec/rubocop/cop/lint/deprecated_open_ssl_constant_spec.rb +++ b/spec/rubocop/cop/lint/deprecated_open_ssl_constant_spec.rb @@ -8,61 +8,61 @@ it 'registers an offense with cipher constant and two arguments and corrects' do expect_offense(<<~RUBY) OpenSSL::Cipher::AES.new(128, :GCM) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Use `OpenSSL::Cipher.new('AES-128-GCM')` instead of `OpenSSL::Cipher::AES.new(128, :GCM)`. + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Use `OpenSSL::Cipher.new('aes-128-gcm')` instead of `OpenSSL::Cipher::AES.new(128, :GCM)`. RUBY expect_correction(<<~RUBY) - OpenSSL::Cipher.new('AES-128-GCM') + OpenSSL::Cipher.new('aes-128-gcm') RUBY end it 'registers an offense with cipher constant and one argument and corrects' do expect_offense(<<~RUBY) OpenSSL::Cipher::AES.new('128-GCM') - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Use `OpenSSL::Cipher.new('AES-128-GCM')` instead of `OpenSSL::Cipher::AES.new('128-GCM')`. + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Use `OpenSSL::Cipher.new('aes-128-gcm')` instead of `OpenSSL::Cipher::AES.new('128-GCM')`. RUBY expect_correction(<<~RUBY) - OpenSSL::Cipher.new('AES-128-GCM') + OpenSSL::Cipher.new('aes-128-gcm') RUBY end it 'registers an offense with cipher constant and double quoted string argument and corrects' do expect_offense(<<~RUBY) OpenSSL::Cipher::AES128.new("GCM") - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Use `OpenSSL::Cipher.new('AES-128-GCM')` instead of `OpenSSL::Cipher::AES128.new("GCM")`. + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Use `OpenSSL::Cipher.new('aes-128-gcm')` instead of `OpenSSL::Cipher::AES128.new("GCM")`. RUBY expect_correction(<<~RUBY) - OpenSSL::Cipher.new('AES-128-GCM') + OpenSSL::Cipher.new('aes-128-gcm') RUBY end it 'registers an offense with AES + blocksize constant and mode argument and corrects' do expect_offense(<<~RUBY) OpenSSL::Cipher::AES128.new(:GCM) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Use `OpenSSL::Cipher.new('AES-128-GCM')` instead of `OpenSSL::Cipher::AES128.new(:GCM)`. + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Use `OpenSSL::Cipher.new('aes-128-gcm')` instead of `OpenSSL::Cipher::AES128.new(:GCM)`. RUBY expect_correction(<<~RUBY) - OpenSSL::Cipher.new('AES-128-GCM') + OpenSSL::Cipher.new('aes-128-gcm') RUBY end it 'registers an offense with AES + blocksize constant and corrects' do expect_offense(<<~RUBY) OpenSSL::Cipher::AES128.new - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ Use `OpenSSL::Cipher.new('AES-128-CBC')` instead of `OpenSSL::Cipher::AES128.new`. + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ Use `OpenSSL::Cipher.new('aes-128-cbc')` instead of `OpenSSL::Cipher::AES128.new`. RUBY expect_correction(<<~RUBY) - OpenSSL::Cipher.new('AES-128-CBC') + OpenSSL::Cipher.new('aes-128-cbc') RUBY end it 'does not register an offense when using cipher with a string' do expect_no_offenses(<<~RUBY) - OpenSSL::Cipher.new('AES-128-GCM') + OpenSSL::Cipher.new('aes-128-gcm') RUBY end