Fix broken YAML parsing on later Rubies with Psych >=4.0

YAML.load is now interpreted as YAML.safe_load, which breaks where the
YAML file contains aliases. If we can assume our yaml files are
trusted (since this a development tool), we can check for the presence
of YAML.unsafe_load and use it instead if it exists.
This commit is contained in:
Martyn Jago
2022-05-27 15:08:11 +01:00
parent e54c9787b7
commit b44c2dd095
6 changed files with 37 additions and 12 deletions

View File

@ -116,8 +116,8 @@ class UnityModuleGenerator
def self.grab_config(config_file)
options = default_options
unless config_file.nil? || config_file.empty?
require 'yaml'
yaml_guts = YAML.load_file(config_file)
require_relative 'yaml_helper'
yaml_guts = YamlHelper.load_file(config_file)
options.merge!(yaml_guts[:unity] || yaml_guts[:cmock])
raise "No :unity or :cmock section found in #{config_file}" unless options
end

View File

@ -51,8 +51,8 @@ class UnityTestRunnerGenerator
def self.grab_config(config_file)
options = default_options
unless config_file.nil? || config_file.empty?
require 'yaml'
yaml_guts = YAML.load_file(config_file)
require_relative 'yaml_helper'
yaml_guts = YamlHelper.load_file(config_file)
options.merge!(yaml_guts[:unity] || yaml_guts[:cmock])
raise "No :unity or :cmock section found in #{config_file}" unless options
end

View File

@ -4,7 +4,7 @@
# [Released under MIT License. Please refer to license.txt for details]
# ==========================================
require'yaml'
require_relative 'yaml_helper'
module RakefileHelpers
class TestFileFilter
@ -12,9 +12,10 @@ module RakefileHelpers
@all_files = all_files
return unless @all_files
return unless File.exist?('test_file_filter.yml')
filters = YAML.load_file('test_file_filter.yml')
file = 'test_file_filter.yml'
return unless File.exist?(file)
filters = YamlHelper.load_file(file)
@all_files = filters[:all_files]
@only_files = filters[:only_files]
@exclude_files = filters[:exclude_files]

19
auto/yaml_helper.rb Normal file
View File

@ -0,0 +1,19 @@
# ==========================================
# Unity Project - A Test Framework for C
# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
# [Released under MIT License. Please refer to license.txt for details]
# ==========================================
require 'yaml'
module YamlHelper
def self.load(body)
YAML.respond_to?(:unsafe_load) ?
YAML.unsafe_load(body) : YAML.load(body)
end
def self.load_file(file)
body = File.read(file)
self.load(body)
end
end

View File

@ -1,14 +1,19 @@
require 'yaml'
# ==========================================
# Unity Project - A Test Framework for C
# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
# [Released under MIT License. Please refer to license.txt for details]
# ==========================================
require 'fileutils'
require_relative '../../auto/unity_test_summary'
require_relative '../../auto/generate_test_runner'
require_relative '../../auto/colour_reporter'
require_relative '../../auto/yaml_helper'
C_EXTENSION = '.c'.freeze
def load_configuration(config_file)
$cfg_file = config_file
$cfg = YAML.load(File.read($cfg_file))
$cfg = YamlHelper.load_file($cfg_file)
end
def configure_clean

View File

@ -4,11 +4,11 @@
# [Released under MIT License. Please refer to license.txt for details]
# ==========================================
require 'yaml'
require 'fileutils'
require_relative '../auto/unity_test_summary'
require_relative '../auto/generate_test_runner'
require_relative '../auto/colour_reporter'
require_relative '../auto/yaml_helper'
module RakefileHelpers
C_EXTENSION = '.c'.freeze
@ -16,7 +16,7 @@ module RakefileHelpers
return if $configured
$cfg_file = "targets/#{config_file}" unless config_file =~ /[\\|\/]/
$cfg = YAML.load(File.read($cfg_file))
$cfg = YamlHelper.load_file($cfg_file)
$colour_output = false unless $cfg['colour']
$configured = true if config_file != DEFAULT_CONFIG_FILE
end