RUBY-74 raise InvalidDocument for any unrecognized types

This commit is contained in:
Mike Dirolf 2009-12-29 12:59:30 -05:00
parent 1b189336a6
commit e013618a8f
3 changed files with 16 additions and 2 deletions

View File

@ -369,6 +369,9 @@ static int write_element_allow_id(VALUE key, VALUE value, VALUE extra, int allow
SAFE_WRITE_AT_POS(buffer, length_location, (const char*)&obj_length, 4); SAFE_WRITE_AT_POS(buffer, length_location, (const char*)&obj_length, 4);
break; break;
} }
buffer_free(buffer);
rb_raise(InvalidDocument, "Unsupported type for BSON (%d)", TYPE(value));
break;
} }
case T_DATA: case T_DATA:
{ {
@ -421,7 +424,7 @@ static int write_element_allow_id(VALUE key, VALUE value, VALUE extra, int allow
default: default:
{ {
buffer_free(buffer); buffer_free(buffer);
rb_raise(rb_eTypeError, "no c encoder for this type yet (%d)", TYPE(value)); rb_raise(InvalidDocument, "Unsupported type for BSON (%d)", TYPE(value));
break; break;
} }
} }

View File

@ -554,7 +554,7 @@ class BSON_RUBY
when Symbol when Symbol
SYMBOL SYMBOL
else else
raise "Unknown type of object: #{o.class.name}" raise InvalidDocument, "Unknown type of object: #{o.class.name}"
end end
end end

View File

@ -335,4 +335,15 @@ class BSONTest < Test::Unit::TestCase
end end
end end
def test_invalid_object
o = Object.new
assert_raise InvalidDocument do
BSON.serialize({:foo => o})
end
assert_raise InvalidDocument do
BSON.serialize({:foo => Date.today})
end
end
end end