Raise error on non utf-8 string in 1.8
This commit is contained in:
parent
8ff0d73fd8
commit
a7c75d7fae
@ -27,6 +27,9 @@ module Mongo
|
|||||||
# Raised when invalid arguments are sent to Mongo Ruby methods.
|
# Raised when invalid arguments are sent to Mongo Ruby methods.
|
||||||
class MongoArgumentError < MongoRubyError; end
|
class MongoArgumentError < MongoRubyError; end
|
||||||
|
|
||||||
|
# Raised when given a string is not valid utf-8 (Ruby 1.8 only).
|
||||||
|
class InvalidStringEncoding < MongoRubyError; end
|
||||||
|
|
||||||
# Raised on failures in connection to the database server.
|
# Raised on failures in connection to the database server.
|
||||||
class ConnectionError < MongoRubyError; end
|
class ConnectionError < MongoRubyError; end
|
||||||
|
|
||||||
|
@ -55,7 +55,12 @@ class BSON
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
def self.to_utf8(str)
|
def self.to_utf8(str)
|
||||||
str # TODO Ruby 1.8 punt for now
|
begin
|
||||||
|
str.unpack("U*")
|
||||||
|
rescue => ex
|
||||||
|
raise InvalidStringEncoding, "String not valid utf-8: #{str}"
|
||||||
|
end
|
||||||
|
str
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
$LOAD_PATH[0,0] = File.join(File.dirname(__FILE__), '..', 'lib')
|
$LOAD_PATH[0,0] = File.join(File.dirname(__FILE__), '..', 'lib')
|
||||||
require 'mongo'
|
require 'mongo'
|
||||||
require 'mongo/util/ordered_hash'
|
require 'mongo/util/ordered_hash'
|
||||||
|
require 'iconv'
|
||||||
require 'test/unit'
|
require 'test/unit'
|
||||||
|
|
||||||
class BSONTest < Test::Unit::TestCase
|
class BSONTest < Test::Unit::TestCase
|
||||||
@ -20,6 +21,20 @@ class BSONTest < Test::Unit::TestCase
|
|||||||
assert_equal doc, @b.deserialize
|
assert_equal doc, @b.deserialize
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_valid_utf8_string
|
||||||
|
doc = {'doc' => "aéあ"}
|
||||||
|
@b.serialize(doc)
|
||||||
|
assert_equal doc, @b.deserialize
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_invalid_string
|
||||||
|
string = Iconv.conv('iso-8859-1', 'utf-8', 'aé').first
|
||||||
|
doc = {'doc' => string}
|
||||||
|
assert_raise InvalidStringEncoding do
|
||||||
|
@b.serialize(doc)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def test_code
|
def test_code
|
||||||
doc = {'$where' => Code.new('this.a.b < this.b')}
|
doc = {'$where' => Code.new('this.a.b < this.b')}
|
||||||
@b.serialize(doc)
|
@b.serialize(doc)
|
||||||
|
Loading…
Reference in New Issue
Block a user