Handle empty array in SASLMechanism.authenticate()

like null array.

Thanks to Anthony Sorvari for reporting.

Fixes SMACK-670.
This commit is contained in:
Florian Schmaus 2015-05-21 22:20:30 +02:00
parent 576980097e
commit c120bc1cbc
1 changed files with 6 additions and 2 deletions

View File

@ -195,7 +195,10 @@ public abstract class SASLMechanism implements Comparable<SASLMechanism> {
private final void authenticate() throws SmackException, NotConnectedException {
byte[] authenticationBytes = getAuthenticationText();
String authenticationText;
if (authenticationBytes != null) {
// Some SASL mechanisms do return an empty array (e.g. EXTERNAL from javax), so check that
// the array is not-empty. Mechanisms are allowed to return either 'null' or an empty array
// if there is no authentication text.
if (authenticationBytes != null && authenticationBytes.length > 0) {
authenticationText = Base64.encodeToString(authenticationBytes);
} else {
// RFC6120 6.4.2 "If the initiating entity needs to send a zero-length initial response,
@ -209,7 +212,8 @@ public abstract class SASLMechanism implements Comparable<SASLMechanism> {
/**
* Should return the initial response of the SASL mechanism. The returned byte array will be
* send base64 encoded to the server. SASL mechanism are free to return <code>null</code> here.
* send base64 encoded to the server. SASL mechanism are free to return <code>null</code> or an
* empty array here.
*
* @return the initial response or null
* @throws SmackException