diff --git a/briar-core/src/org/briarproject/clients/BdfMessageValidator.java b/briar-core/src/org/briarproject/clients/BdfMessageValidator.java index fd170aa7c89d70e5e754a85924df59c593e5debe..abf9d344a99fe6dc834d6ee0bbd255a346a625b5 100644 --- a/briar-core/src/org/briarproject/clients/BdfMessageValidator.java +++ b/briar-core/src/org/briarproject/clients/BdfMessageValidator.java @@ -2,6 +2,8 @@ package org.briarproject.clients; import org.briarproject.api.FormatException; import org.briarproject.api.clients.ClientHelper; +import org.briarproject.api.clients.QueueMessage; +import org.briarproject.api.clients.QueueMessageValidator; import org.briarproject.api.data.BdfDictionary; import org.briarproject.api.data.BdfList; import org.briarproject.api.data.MetadataEncoder; @@ -14,10 +16,12 @@ import org.briarproject.util.StringUtils; import java.util.logging.Logger; +import static org.briarproject.api.clients.QueueMessage.QUEUE_MESSAGE_HEADER_LENGTH; import static org.briarproject.api.sync.SyncConstants.MESSAGE_HEADER_LENGTH; import static org.briarproject.api.transport.TransportConstants.MAX_CLOCK_DIFFERENCE; -public abstract class BdfMessageValidator implements MessageValidator { +public abstract class BdfMessageValidator implements MessageValidator, + QueueMessageValidator { protected static final Logger LOG = Logger.getLogger(BdfMessageValidator.class.getName()); @@ -38,6 +42,15 @@ public abstract class BdfMessageValidator implements MessageValidator { @Override public Metadata validateMessage(Message m, Group g) { + return validateMessage(m, g, MESSAGE_HEADER_LENGTH); + } + + @Override + public Metadata validateMessage(QueueMessage q, Group g) { + return validateMessage(q, g, QUEUE_MESSAGE_HEADER_LENGTH); + } + + private Metadata validateMessage(Message m, Group g, int headerLength) { // Reject the message if it's too far in the future long now = clock.currentTimeMillis(); if (m.getTimestamp() - now > MAX_CLOCK_DIFFERENCE) { @@ -45,9 +58,13 @@ public abstract class BdfMessageValidator implements MessageValidator { return null; } byte[] raw = m.getRaw(); + if (raw.length <= headerLength) { + LOG.info("Message is too short"); + return null; + } try { - BdfList message = clientHelper.toList(raw, MESSAGE_HEADER_LENGTH, - raw.length - MESSAGE_HEADER_LENGTH); + BdfList message = clientHelper.toList(raw, headerLength, + raw.length - headerLength); BdfDictionary meta = validateMessage(message, g, m.getTimestamp()); if (meta == null) { LOG.info("Invalid message");