diff --git a/ext/pg_type_map_by_column.c b/ext/pg_type_map_by_column.c index 20e3a389..61d62102 100644 --- a/ext/pg_type_map_by_column.c +++ b/ext/pg_type_map_by_column.c @@ -54,6 +54,7 @@ pg_tmbc_fit_to_query( VALUE self, VALUE params ) t_tmbc *this = RTYPEDDATA_DATA( self ); t_typemap *default_tm; + Check_Type(params, T_ARRAY); nfields = (int)RARRAY_LEN( params ); if ( this->nfields != nfields ) { rb_raise( rb_eArgError, "number of result fields (%d) does not match number of mapped columns (%d)", diff --git a/spec/pg/type_map_by_column_spec.rb b/spec/pg/type_map_by_column_spec.rb index b73f124a..15bc696a 100644 --- a/spec/pg/type_map_by_column_spec.rb +++ b/spec/pg/type_map_by_column_spec.rb @@ -182,6 +182,12 @@ def decode(res, tuple, field) expect{ PG::TypeMapByColumn.new( [123] ) }.to raise_error(TypeError, /wrong argument type (Integer|Fixnum)/) end + it "should raise an error for invalid input when used as type_map" do + map = PG::TypeMapByColumn.new([PG::TextEncoder::Integer.new]) + record_encoder = PG::TextEncoder::Record.new(type_map: map) + expect{ record_encoder.encode(123) }.to raise_error(TypeError) + end + it "shouldn't allow result mappings with different number of fields" do res = @conn.exec( "SELECT 1" ) expect{ res.type_map = PG::TypeMapByColumn.new([]) }.to raise_error(ArgumentError, /mapped columns/)