Raise error on non utf-8 string in 1.8

This commit is contained in:
Kyle Banker 2009-11-30 17:06:21 -05:00
parent 8ff0d73fd8
commit a7c75d7fae
3 changed files with 24 additions and 1 deletions

View File

@ -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

View File

@ -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

View File

@ -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)