diff --git a/JSONTokener.java b/JSONTokener.java index 32548ed..7702b19 100644 --- a/JSONTokener.java +++ b/JSONTokener.java @@ -278,7 +278,11 @@ public class JSONTokener { sb.append('\r'); break; case 'u': - sb.append((char)Integer.parseInt(this.next(4), 16)); + try { + sb.append((char)Integer.parseInt(this.next(4), 16)); + } catch (NumberFormatException e) { + throw this.syntaxError("Illegal escape.", e); + } break; case '"': case '\'': @@ -433,6 +437,16 @@ public class JSONTokener { return new JSONException(message + this.toString()); } + /** + * Make a JSONException to signal a syntax error. + * + * @param message The error message. + * @param causedBy The throwable that caused the error. + * @return A JSONException object, suitable for throwing + */ + public JSONException syntaxError(String message, Throwable causedBy) { + return new JSONException(message + this.toString(), causedBy); + } /** * Make a printable string of this JSONTokener.