From 376c87b62ee0b38bb4f157288a6fbc32d2acae32 Mon Sep 17 00:00:00 2001 From: Florian Weingarten Date: Tue, 19 May 2015 15:51:55 +0000 Subject: [PATCH 1/2] Don't crash when reading/writing Marshal --- lib/jekyll/regenerator.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/jekyll/regenerator.rb b/lib/jekyll/regenerator.rb index 8ddfa269..c452c54d 100644 --- a/lib/jekyll/regenerator.rb +++ b/lib/jekyll/regenerator.rb @@ -130,7 +130,7 @@ module Jekyll # # Returns nothing. def write_metadata - File.open(metadata_file, 'w') do |f| + File.open(metadata_file, 'wb') do |f| f.write(Marshal.dump(metadata)) end end @@ -164,6 +164,9 @@ module Jekyll Marshal.load(content) rescue TypeError SafeYAML.load(content) + rescue ArgumentError => e + Jekyll.logger.warn("Failed to load #{metadata_file}: #{e}") + {} end else {} From 87400f215574dcc83f908830e9b13cad65e19891 Mon Sep 17 00:00:00 2001 From: Florian Weingarten Date: Tue, 19 May 2015 20:00:50 +0000 Subject: [PATCH 2/2] regression test for corrupted marshal file --- test/test_regenerator.rb | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/test_regenerator.rb b/test/test_regenerator.rb index 060fc524..3b45fee6 100644 --- a/test/test_regenerator.rb +++ b/test/test_regenerator.rb @@ -144,6 +144,16 @@ class TestRegenerator < JekyllUnitTest assert_equal File.mtime(@path), @regenerator.metadata[@path]["mtime"] end + should "not crash when reading corrupted marshal file" do + metadata_file = source_dir(".jekyll-metadata") + File.open(metadata_file, "w") do |file| + file.puts Marshal.dump({ foo: 'bar' })[0,5] + end + + @regenerator = Regenerator.new(@site) + assert_equal({}, @regenerator.metadata) + end + # Methods should "be able to add a path to the metadata" do