Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Fixed a bug in the Ruby/MySQL that caused binary content to be escape…

…d badly and come back mangled #405 [Tobias Luetke]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@301 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
commit 3e0077f54dc451a551360f7af9b5a9c96b3253af 1 parent 07989b6
@dhh dhh authored
View
2  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:
View
2  activerecord/lib/active_record/vendor/mysql.rb
@@ -1091,7 +1091,7 @@ def escape_string(str)
when "\0" then "\\0"
when "\n" then "\\n"
when "\r" then "\\r"
- when "\032" then "\Z"
+ when "\032" then "\\Z"
else "\\"+$1
end
end
View
37 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
View
BIN  activerecord/test/fixtures/associations.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
2  activerecord/test/fixtures/binary.rb
@@ -0,0 +1,2 @@
+class Binary < ActiveRecord::Base
+end
View
6 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`)
);
View
6 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)
);
View
5 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
);
View
11 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)
-);
+);
+
+CREATE TABLE binaries (
+ id int NOT NULL IDENTITY(1, 1),
+ data blob NULL,
+ PRIMARY KEY (id)
+);
+
+

0 comments on commit 3e0077f

Please sign in to comment.
Something went wrong with that request. Please try again.