mirror of
https://github.com/pgpainless/pgpainless.git
synced 2024-11-05 20:15:59 +01:00
Improve syntax error reporting
This commit is contained in:
parent
0feafbf7ed
commit
c4e937c0f9
2 changed files with 14 additions and 3 deletions
|
@ -8,6 +8,9 @@ import org.pgpainless.exception.MalformedOpenPgpMessageException;
|
|||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Stack;
|
||||
|
||||
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 List<InputAlphabet> inputs = new ArrayList<>(); // keep track of inputs for debugging / error reporting
|
||||
private State state;
|
||||
|
||||
public PDA() {
|
||||
|
@ -180,9 +184,12 @@ public class PDA {
|
|||
public void next(InputAlphabet input) throws MalformedOpenPgpMessageException {
|
||||
try {
|
||||
state = state.transition(input, this);
|
||||
inputs.add(input);
|
||||
} catch (MalformedOpenPgpMessageException e) {
|
||||
LOGGER.debug("Unexpected Packet or Token '" + input + "' encountered. Message is malformed.", e);
|
||||
throw e;
|
||||
MalformedOpenPgpMessageException wrapped = new MalformedOpenPgpMessageException("Malformed message: After reading stream " + Arrays.toString(inputs.toArray()) +
|
||||
", token '" + input + "' is unexpected and illegal.", e);
|
||||
LOGGER.debug("Invalid input '" + input + "'", wrapped);
|
||||
throw wrapped;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -21,6 +21,10 @@ public class MalformedOpenPgpMessageException extends RuntimeException {
|
|||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue