Project

General

Profile

Actions

Defect #35421

closed

Unhandled exception when a YAML syntax error is detected in configuration.yml

Added by Go MAEDA over 3 years ago. Updated over 3 years ago.

Status:
Closed
Priority:
Normal
Assignee:
Category:
Administration
Target version:
Start date:
Due date:
% Done:

0%

Estimated time:
Resolution:
Fixed
Affected version:

Description

Redmine will abort with Psych::SyntaxError during startup if a YAML syntax error in configuration.yml is detected.

/Users/somebody/.rbenv/versions/3.0.0/lib/ruby/3.0.0/psych.rb:456:in `parse': (<unknown>): did not find expected key while parsing a block mapping at line 11 column 1 (Psych::SyntaxError)
        from /Users/somebody/.rbenv/versions/3.0.0/lib/ruby/3.0.0/psych.rb:456:in `parse_stream'
        from /Users/somebody/.rbenv/versions/3.0.0/lib/ruby/3.0.0/psych.rb:390:in `parse'
        from /Users/somebody/.rbenv/versions/3.0.0/lib/ruby/3.0.0/psych.rb:280:in `load'
        from /path/to/redmine/lib/redmine/configuration.rb:95:in `load_from_yaml'
        from /path/to/redmine/lib/redmine/configuration.rb:45:in `load'
        from /path/to/redmine/lib/redmine/configuration.rb:76:in `[]'

Although the code at source:tags/4.2.1/lib/redmine/configuration.rb#L98 tries to catch the exception, the code never catches it because the rescue statement should handle Psych::SyntaxError instead of SyntaxError.

        rescue SyntaxError => e
          abort "A syntax error occurred when parsing your Redmine configuration file located at #{filename} with ERB:\n#{e.message}" 

Files

35421.patch (670 Bytes) 35421.patch Go MAEDA, 2021-06-17 07:26
35421-v2.patch (683 Bytes) 35421-v2.patch Go MAEDA, 2021-06-17 08:03
35421-v2.patch (683 Bytes) 35421-v2.patch Go MAEDA, 2021-06-22 10:56

Related issues

Related to Redmine - Defect #9748: Error about configuration.yml validness should mention file pathClosedJean-Philippe Lang

Actions
Actions #1

Updated by Go MAEDA over 3 years ago

The attached patch fixes the issue.

Actions #2

Updated by Go MAEDA over 3 years ago

Go MAEDA wrote:

Although the code at source:tags/4.2.1/lib/redmine/configuration.rb#L98 tries to catch the exception, the code never catches it because the rescue statement should handle Psych::SyntaxError instead of SyntaxError.

According to #9748 and #16878, the code that is intended to handle a YAML syntax error is not source:tags/4.2.1/lib/redmine/configuration.rb#L98 but source:tags/4.2.1/lib/redmine/configuration.rb#L96. So, the patch 35421.patch is wrong.

        rescue ArgumentError
          abort "Your Redmine configuration file located at #{filename} is not a valid YAML file and could not be loaded." 
        rescue SyntaxError => e
          abort "A syntax error occurred when parsing your Redmine configuration file located at #{filename} with ERB:\n#{e.message}" 
        end

Attaching an updated patch.

Actions #3

Updated by Go MAEDA over 3 years ago

  • Related to Defect #9748: Error about configuration.yml validness should mention file path added
Actions #4

Updated by Go MAEDA over 3 years ago

  • Target version set to 5.0.0

Setting the target version to 5.0.0.

Actions #5

Updated by Go MAEDA over 3 years ago

Update the patch to display Exception#message. This is necessary for users to know where the syntax error occurred.

Actions #6

Updated by Go MAEDA over 3 years ago

  • Status changed from New to Closed
  • Assignee set to Go MAEDA
  • Resolution set to Fixed

Committed the patch.

Actions

Also available in: Atom PDF