diff --git a/ext/rugged/rugged.c b/ext/rugged/rugged.c index 94089f9ff..019459734 100644 --- a/ext/rugged/rugged.c +++ b/ext/rugged/rugged.c @@ -43,7 +43,11 @@ static VALUE rb_git_raw_to_hex(VALUE self, VALUE raw) char out[40]; Check_Type(raw, T_STRING); - git_oid_fromraw(&oid, StringValueCStr(raw)); + + if (RSTRING_LEN(raw) != GIT_OID_RAWSZ) + rb_raise(rb_eTypeError, "Invalid buffer size for an OID"); + + git_oid_fromraw(&oid, RSTRING_PTR(raw)); git_oid_fmt(out, &oid); return rugged_str_new(out, 40, NULL); diff --git a/test/lib_test.rb b/test/lib_test.rb index 24089e503..53b4145ba 100644 --- a/test/lib_test.rb +++ b/test/lib_test.rb @@ -30,4 +30,11 @@ hex2 = raw.unpack("H*")[0] assert_equal hex1, hex2 end + + test "converts raw into hex with null bytes" do + raw = Rugged::hex_to_raw("702f00394564b24052511cb69961164828bf5494") + hex1 = Rugged::raw_to_hex(raw) + hex2 = raw.unpack("H*")[0] + assert_equal hex1, hex2 + end end