mirror of
https://github.com/pgpainless/pgpainless.git
synced 2024-11-15 17:02:06 +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.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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue