Skip to content

Commit 203b2a7

Browse files
committed
UserService.findByLoginAndPassword(): fixed possible NPE.
Correctly handle situation when user have null as hash or salt.
1 parent 64a6712 commit 203b2a7

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

src/main/java/ru/mystamps/web/service/UserService.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,19 @@ public User findByLoginAndPassword(final String login, final String password) {
127127
return null;
128128
}
129129

130-
if (!user.getHash().equals(computeSha1Sum(user.getSalt() + password))) {
130+
final String hash = user.getHash();
131+
if (hash == null) {
132+
log.warn("User with login '{}' and id={} has null hash!", login, user.getId());
133+
return null;
134+
}
135+
136+
final String salt = user.getSalt();
137+
if (salt == null) {
138+
log.warn("User with login '{}' and id={} has null salt!", login, user.getId());
139+
return null;
140+
}
141+
142+
if (!hash.equals(computeSha1Sum(salt + password))) {
131143
log.info("Wrong password for login '{}'", login);
132144
return null;
133145
}

src/test/java/ru/mystamps/web/service/UserServiceTest.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,26 @@ public void findByLoginAndPasswordShouldReturnUserForValidCredentials() {
286286
//assertThat(user).isEqualTo(resultUser);
287287
}
288288

289+
@Test
290+
public void findByLoginAndPasswordShouldReturnNullWhenUserHasNullSalt() {
291+
final User resultUser = getValidUser();
292+
resultUser.setSalt(null);
293+
when(userDao.findByLogin(anyString())).thenReturn(resultUser);
294+
295+
final User user = service.findByLoginAndPassword(null, TEST_PASSWORD);
296+
assertThat(user).isNull();
297+
}
298+
299+
@Test
300+
public void findByLoginAndPasswordShouldReturnNullWhenUserHasNullHash() {
301+
final User resultUser = getValidUser();
302+
resultUser.setHash(null);
303+
when(userDao.findByLogin(anyString())).thenReturn(resultUser);
304+
305+
final User user = service.findByLoginAndPassword(null, TEST_PASSWORD);
306+
assertThat(user).isNull();
307+
}
308+
289309
private User getValidUser() {
290310
final User user = new User();
291311
user.setId(777);

0 commit comments

Comments
 (0)