1
0
mirror of https://github.com/arduino/Arduino.git synced 2025-01-21 10:52:14 +01:00

Fix exception on compiler errors with column numbers

Error messages are detected and parsed using a regex. Part of this regex
matches the optional column number.

The code that handled this assumed that a missing column would result in
less elements in the matches array, but a regex always results in one
element per set of parenthesis in the regex, which will be null if no
capture was made for that element.

In practice, this meant that if no column was present in the error
message, a NullPointerException would be raised. Furthermore, gcc 9
seems to have started outputting omitting column numbers (instead of
printing 0) for some errors (such as unterminated #ifdef), which exposed
this problem.

This commit fixes this by simply using the fixed match numbers to take
apart the regex match, and by checking for a null column number (all
other captures are non-optional, so no need to check there).
This commit is contained in:
Matthijs Kooijman 2020-01-28 15:07:37 +01:00
parent 0dbff59b13
commit 8e9f7a630a

View File

@ -516,16 +516,13 @@ public class Compiler implements MessageConsumer {
if (pieces != null) {
String msg = "";
int errorIdx = pieces.length - 1;
String error = pieces[errorIdx];
String filename = pieces[1];
int line = PApplet.parseInt(pieces[2]);
int col;
if (errorIdx > 3) {
int col = -1;
if (pieces[3] != null) {
col = PApplet.parseInt(pieces[3].substring(1));
} else {
col = -1;
}
String error = pieces[5];
if (error.trim().equals("SPI.h: No such file or directory")) {
error = tr("Please import the SPI library from the Sketch > Import Library menu.");