From 894facb1967c9f394be92ec699e4eafddc2aea52 Mon Sep 17 00:00:00 2001 From: Johannes Opper Date: Mon, 22 Feb 2016 17:36:08 +0100 Subject: Fix bug in JSON deserialization when column default is an empty string When `ActiveRecord::Coders::JSON` serialization is used and the default of the column returns `''` it raises the following error: ``` JSON::ParserError: A JSON text must at least contain two octets! ``` If MySQL is running in non-strict mode, it returns an empty string as column default for a text column: ```ruby def extract_default if blob_or_text_column? @default = null || strict ? nil : '' end end ``` Since `''` is invalid JSON, there shouldn't be an attempt to parse it, it should be treated like nil. ActiveRecord::Coders::JSON should behave consistently for all possible non-user-set column default values. --- activerecord/test/cases/coders/json_test.rb | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 activerecord/test/cases/coders/json_test.rb (limited to 'activerecord/test/cases') diff --git a/activerecord/test/cases/coders/json_test.rb b/activerecord/test/cases/coders/json_test.rb new file mode 100644 index 0000000000..d22d93d129 --- /dev/null +++ b/activerecord/test/cases/coders/json_test.rb @@ -0,0 +1,15 @@ +require "cases/helper" + +module ActiveRecord + module Coders + class JSONTest < ActiveRecord::TestCase + def test_returns_nil_if_empty_string_given + assert_nil JSON.load("") + end + + def test_returns_nil_if_nil_given + assert_nil JSON.load(nil) + end + end + end +end -- cgit v1.2.3