Browse Source

Object ID Identicy conversion to long fails on old schema

This change fixed a bug which tried to convert non-string object as string

Fixes gh-7621
pull/8724/head
Dávid Kovács 6 years ago committed by Rob Winch
parent
commit
8399375a86
  1. 2
      acl/src/main/java/org/springframework/security/acls/jdbc/AclClassIdUtils.java
  2. 11
      acl/src/test/java/org/springframework/security/acls/jdbc/AclClassIdUtilsTest.java

2
acl/src/main/java/org/springframework/security/acls/jdbc/AclClassIdUtils.java

@ -118,7 +118,7 @@ class AclClassIdUtils {
*/ */
private Long convertToLong(Serializable identifier) { private Long convertToLong(Serializable identifier) {
Long idAsLong; Long idAsLong;
if (canConvertFromStringTo(Long.class)) { if (conversionService.canConvert(identifier.getClass(), Long.class)) {
idAsLong = conversionService.convert(identifier, Long.class); idAsLong = conversionService.convert(identifier, Long.class);
} else { } else {
idAsLong = Long.valueOf(identifier.toString()); idAsLong = Long.valueOf(identifier.toString());

11
acl/src/test/java/org/springframework/security/acls/jdbc/AclClassIdUtilsTest.java

@ -24,6 +24,7 @@ import org.mockito.junit.MockitoJUnitRunner;
import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.ConversionService;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigInteger;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.UUID; import java.util.UUID;
@ -39,6 +40,7 @@ import static org.mockito.BDDMockito.given;
public class AclClassIdUtilsTest { public class AclClassIdUtilsTest {
private static final Long DEFAULT_IDENTIFIER = 999L; private static final Long DEFAULT_IDENTIFIER = 999L;
private static final BigInteger BIGINT_IDENTIFIER = new BigInteger("999");
private static final String DEFAULT_IDENTIFIER_AS_STRING = DEFAULT_IDENTIFIER.toString(); private static final String DEFAULT_IDENTIFIER_AS_STRING = DEFAULT_IDENTIFIER.toString();
@Mock @Mock
@ -62,6 +64,15 @@ public class AclClassIdUtilsTest {
assertThat(newIdentifier).isEqualTo(DEFAULT_IDENTIFIER); assertThat(newIdentifier).isEqualTo(DEFAULT_IDENTIFIER);
} }
@Test
public void shouldReturnLongIfIdentifierIsBigInteger() throws SQLException {
// when
Serializable newIdentifier = aclClassIdUtils.identifierFrom(BIGINT_IDENTIFIER, resultSet);
// then
assertThat(newIdentifier).isEqualTo(DEFAULT_IDENTIFIER);
}
@Test @Test
public void shouldReturnLongIfClassIdTypeIsNull() throws SQLException { public void shouldReturnLongIfClassIdTypeIsNull() throws SQLException {
// given // given

Loading…
Cancel
Save