1
0
Fork 0
mirror of https://github.com/pgpainless/pgpainless.git synced 2024-12-23 03:17:58 +01:00

Improve syntax error reporting

This commit is contained in:
Paul Schaub 2022-10-26 18:39:20 +02:00
parent a2a5c9223e
commit 798e68e87f
2 changed files with 14 additions and 3 deletions

View file

@ -8,6 +8,9 @@ import org.pgpainless.exception.MalformedOpenPgpMessageException;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Stack; import java.util.Stack;
import static org.pgpainless.decryption_verification.syntax_check.StackAlphabet.msg; import static org.pgpainless.decryption_verification.syntax_check.StackAlphabet.msg;
@ -169,6 +172,7 @@ public class PDA {
} }
private final Stack<StackAlphabet> stack = new Stack<>(); private final Stack<StackAlphabet> stack = new Stack<>();
private final List<InputAlphabet> inputs = new ArrayList<>(); // keep track of inputs for debugging / error reporting
private State state; private State state;
public PDA() { public PDA() {
@ -180,9 +184,12 @@ public class PDA {
public void next(InputAlphabet input) throws MalformedOpenPgpMessageException { public void next(InputAlphabet input) throws MalformedOpenPgpMessageException {
try { try {
state = state.transition(input, this); state = state.transition(input, this);
inputs.add(input);
} catch (MalformedOpenPgpMessageException e) { } catch (MalformedOpenPgpMessageException e) {
LOGGER.debug("Unexpected Packet or Token '" + input + "' encountered. Message is malformed.", e); MalformedOpenPgpMessageException wrapped = new MalformedOpenPgpMessageException("Malformed message: After reading stream " + Arrays.toString(inputs.toArray()) +
throw e; ", token '" + input + "' is unexpected and illegal.", e);
LOGGER.debug("Invalid input '" + input + "'", wrapped);
throw wrapped;
} }
} }

View file

@ -21,6 +21,10 @@ public class MalformedOpenPgpMessageException extends RuntimeException {
} }
public MalformedOpenPgpMessageException(PDA.State state, InputAlphabet input, StackAlphabet stackItem) { public MalformedOpenPgpMessageException(PDA.State state, InputAlphabet input, StackAlphabet stackItem) {
this("Invalid input: There is no legal transition from state '" + state + "' for input '" + input + "' when '" + stackItem + "' is on top of the stack."); this("There is no legal transition from state '" + state + "' for input '" + input + "' when '" + stackItem + "' is on top of the stack.");
}
public MalformedOpenPgpMessageException(String s, MalformedOpenPgpMessageException e) {
super(s, e);
} }
} }