diff options
author | David Heinemeier Hansson <david@loudthinking.com> | 2005-01-01 18:34:39 +0000 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2005-01-01 18:34:39 +0000 |
commit | 3e0077f54dc451a551360f7af9b5a9c96b3253af (patch) | |
tree | 95698e5d44754a6e91ce9cea793c7671504919b2 /activerecord | |
parent | 07989b64f47112d7e501e2114284dec322ac2c6c (diff) | |
download | rails-3e0077f54dc451a551360f7af9b5a9c96b3253af.tar.gz rails-3e0077f54dc451a551360f7af9b5a9c96b3253af.tar.bz2 rails-3e0077f54dc451a551360f7af9b5a9c96b3253af.zip |
Fixed a bug in the Ruby/MySQL that caused binary content to be escaped badly and come back mangled #405 [Tobias Luetke]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@301 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/CHANGELOG | 2 | ||||
-rw-r--r-- | activerecord/lib/active_record/vendor/mysql.rb | 2 | ||||
-rw-r--r-- | activerecord/test/binary_test.rb | 37 | ||||
-rw-r--r-- | activerecord/test/fixtures/associations.png | bin | 0 -> 40623 bytes | |||
-rw-r--r-- | activerecord/test/fixtures/binary.rb | 2 | ||||
-rwxr-xr-x | activerecord/test/fixtures/db_definitions/mysql.sql | 6 | ||||
-rw-r--r-- | activerecord/test/fixtures/db_definitions/postgresql.sql | 6 | ||||
-rw-r--r-- | activerecord/test/fixtures/db_definitions/sqlite.sql | 5 | ||||
-rw-r--r-- | activerecord/test/fixtures/db_definitions/sqlserver.sql | 11 |
9 files changed, 68 insertions, 3 deletions
diff --git a/activerecord/CHANGELOG b/activerecord/CHANGELOG index 2de7f35a64..855ea9cfbc 100644 --- a/activerecord/CHANGELOG +++ b/activerecord/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Fixed a bug in the Ruby/MySQL that caused binary content to be escaped badly and come back mangled #405 [Tobias Luetke] + * Added block-style for callbacks #332 [bitsweat]. Before: diff --git a/activerecord/lib/active_record/vendor/mysql.rb b/activerecord/lib/active_record/vendor/mysql.rb index 4970f77bd3..84f5d2533c 100644 --- a/activerecord/lib/active_record/vendor/mysql.rb +++ b/activerecord/lib/active_record/vendor/mysql.rb @@ -1091,7 +1091,7 @@ class << Mysql when "\0" then "\\0" when "\n" then "\\n" when "\r" then "\\r" - when "\032" then "\Z" + when "\032" then "\\Z" else "\\"+$1 end end diff --git a/activerecord/test/binary_test.rb b/activerecord/test/binary_test.rb new file mode 100644 index 0000000000..b63fbbaede --- /dev/null +++ b/activerecord/test/binary_test.rb @@ -0,0 +1,37 @@ +require 'abstract_unit' +require 'fixtures/binary' + +class BinaryTest < Test::Unit::TestCase + def setup + @data = create_data_fixture + end + + def test_load_save + bin = Binary.new + bin.data = @data + + assert bin.data == @data, + "Assigned data differs from file data" + + bin.save + + assert bin.data == @data, + "Assigned data differs from file data after save" + + db_bin = Binary.find(bin.id) + + assert db_bin.data == bin.data, + "Loaded binary data differes from memory version" + + assert db_bin.data == File.new(File.dirname(__FILE__)+"/fixtures/associations.png","rb").read, + "Loaded binary data differes from file version" + end + + private + + def create_data_fixture + Binary.connection.execute("DELETE FROM binaries") + File.new(File.dirname(__FILE__)+"/fixtures/associations.png","rb").read + end + +end
\ No newline at end of file diff --git a/activerecord/test/fixtures/associations.png b/activerecord/test/fixtures/associations.png Binary files differnew file mode 100644 index 0000000000..661c7a8bbc --- /dev/null +++ b/activerecord/test/fixtures/associations.png diff --git a/activerecord/test/fixtures/binary.rb b/activerecord/test/fixtures/binary.rb new file mode 100644 index 0000000000..950c459199 --- /dev/null +++ b/activerecord/test/fixtures/binary.rb @@ -0,0 +1,2 @@ +class Binary < ActiveRecord::Base +end
\ No newline at end of file diff --git a/activerecord/test/fixtures/db_definitions/mysql.sql b/activerecord/test/fixtures/db_definitions/mysql.sql index ec27a52445..3758f19bfa 100755 --- a/activerecord/test/fixtures/db_definitions/mysql.sql +++ b/activerecord/test/fixtures/db_definitions/mysql.sql @@ -115,4 +115,10 @@ CREATE TABLE `people` ( `id` INTEGER NOT NULL PRIMARY KEY, `first_name` VARCHAR(40) NOT NULL, `lock_version` INTEGER NOT NULL DEFAULT 0 +); + +CREATE TABLE `binaries` ( + `id` int(11) NOT NULL auto_increment, + `data` mediumblob, + PRIMARY KEY (`id`) );
\ No newline at end of file diff --git a/activerecord/test/fixtures/db_definitions/postgresql.sql b/activerecord/test/fixtures/db_definitions/postgresql.sql index 6d8222cfd6..8f6587f961 100644 --- a/activerecord/test/fixtures/db_definitions/postgresql.sql +++ b/activerecord/test/fixtures/db_definitions/postgresql.sql @@ -133,4 +133,10 @@ CREATE TABLE people ( first_name text, lock_version integer default 0, PRIMARY KEY (id) +); + +CREATE TABLE binaries ( + id serial , + data bytea, + PRIMARY KEY (id) );
\ No newline at end of file diff --git a/activerecord/test/fixtures/db_definitions/sqlite.sql b/activerecord/test/fixtures/db_definitions/sqlite.sql index 5c27832056..65b24a9333 100644 --- a/activerecord/test/fixtures/db_definitions/sqlite.sql +++ b/activerecord/test/fixtures/db_definitions/sqlite.sql @@ -103,4 +103,9 @@ CREATE TABLE 'people' ( 'id' INTEGER NOT NULL PRIMARY KEY, 'first_name' VARCHAR(40) DEFAULT NULL, 'lock_version' INTEGER NOT NULL DEFAULT 0 +); + +CREATE TABLE 'binaries' ( + 'id' INTEGER NOT NULL PRIMARY KEY, + 'data' BLOB DEFAULT NULL );
\ No newline at end of file diff --git a/activerecord/test/fixtures/db_definitions/sqlserver.sql b/activerecord/test/fixtures/db_definitions/sqlserver.sql index 74cd381ba3..023ab63406 100644 --- a/activerecord/test/fixtures/db_definitions/sqlserver.sql +++ b/activerecord/test/fixtures/db_definitions/sqlserver.sql @@ -109,10 +109,17 @@ CREATE TABLE mixins ( PRIMARY KEY (id) ); - CREATE TABLE people ( id int NOT NULL IDENTITY(1, 1), first_name varchar(40) NULL, lock_version int default 0, PRIMARY KEY (id) -);
\ No newline at end of file +); + +CREATE TABLE binaries ( + id int NOT NULL IDENTITY(1, 1), + data blob NULL, + PRIMARY KEY (id) +); + + |