From ad7b86964f8348e37a1dbd96967d91e429d8e66f Mon Sep 17 00:00:00 2001 From: dondonz <13839920+dondonz@users.noreply.github.com> Date: Thu, 24 Nov 2022 16:20:25 +1100 Subject: [PATCH] Add specifiedByURL and do not permit negative 0 offset --- .../scalars/datetime/DateTimeScalar.java | 11 ++++++++--- .../scalars/datetime/DateTimeScalarTest.groovy | 18 ++++++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/main/java/graphql/scalars/datetime/DateTimeScalar.java b/src/main/java/graphql/scalars/datetime/DateTimeScalar.java index 06b3aa3..ef52333 100644 --- a/src/main/java/graphql/scalars/datetime/DateTimeScalar.java +++ b/src/main/java/graphql/scalars/datetime/DateTimeScalar.java @@ -22,6 +22,7 @@ import static java.time.temporal.ChronoField.HOUR_OF_DAY; import static java.time.temporal.ChronoField.MINUTE_OF_HOUR; import static java.time.temporal.ChronoField.NANO_OF_SECOND; +import static java.time.temporal.ChronoField.OFFSET_SECONDS; import static java.time.temporal.ChronoField.SECOND_OF_MINUTE; /** @@ -95,7 +96,11 @@ public Value valueToLiteral(Object input) { private OffsetDateTime parseOffsetDateTime(String s, Function exceptionMaker) { try { - return OffsetDateTime.parse(s, DateTimeFormatter.ISO_OFFSET_DATE_TIME); + OffsetDateTime parse = OffsetDateTime.parse(s, DateTimeFormatter.ISO_OFFSET_DATE_TIME); + if (parse.get(OFFSET_SECONDS) == 0 && s.endsWith("-00:00")) { + throw exceptionMaker.apply("Invalid value : '" + s + "'. Negative zero offset is not allowed"); + } + return parse; } catch (DateTimeParseException e) { throw exceptionMaker.apply("Invalid RFC3339 value : '" + s + "'. because of : '" + e.getMessage() + "'"); } @@ -104,7 +109,8 @@ private OffsetDateTime parseOffsetDateTime(String s, Function