Skip to content

Commit cb02f54

Browse files
[fix] integer overflow in hash_old (#218)
introduced in #216
1 parent e773879 commit cb02f54

File tree

3 files changed

+5
-3
lines changed

3 files changed

+5
-3
lines changed

src/main/java/org/jruby/ext/openssl/X509Name.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -633,7 +633,7 @@ public RubyFixnum hash() {
633633

634634
@JRubyMethod
635635
public RubyFixnum hash_old() {
636-
int hash;
636+
long hash;
637637
try {
638638
hash = Name.hashOld( getX500Name() );
639639
}

src/main/java/org/jruby/ext/openssl/x509store/Name.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,12 @@ public Name(final X500Name name) {
5959
this.name = name;
6060
}
6161

62-
public static int hashOld(final X500Name name) throws IOException {
62+
public static long hashOld(final X500Name name) throws IOException {
6363
try {
6464
final byte[] bytes = name.getEncoded();
6565
MessageDigest md5 = SecurityHelper.getMessageDigest("MD5");
6666
final byte[] digest = md5.digest(bytes);
67-
int result = 0;
67+
long result = 0;
6868
result |= digest[3] & 0xff; result <<= 8;
6969
result |= digest[2] & 0xff; result <<= 8;
7070
result |= digest[1] & 0xff; result <<= 8;

src/test/ruby/x509/test_x509name.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@ def test_hash_long_name
8484
def test_hash_old
8585
name = OpenSSL::X509::Name.new [['CN', 'nobody'], ['DC', 'example']]
8686
assert_equal 1460400684, name.hash_old
87+
name = OpenSSL::X509::Name.new([['CN', 'foo'], ['DC', 'bar']])
88+
assert_equal 3294068023, name.hash_old
8789
end
8890

8991
end

0 commit comments

Comments
 (0)