From 26dbfd0edb9f32f3f8b7afd8dc4f4950645bbd17 Mon Sep 17 00:00:00 2001 From: kuroppoi <68156848+kuroppoi@users.noreply.github.com> Date: Wed, 28 Jun 2023 03:47:44 +0200 Subject: [PATCH] Don't URL decode/encode values if base64 decoding/encoding is enabled --- .../serialization/UrlEncodedFormGenerator.java | 11 +++++------ .../serialization/UrlEncodedFormParser.java | 9 +++++---- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/java/entralinked/serialization/UrlEncodedFormGenerator.java b/src/main/java/entralinked/serialization/UrlEncodedFormGenerator.java index 65041cb..79c4b16 100644 --- a/src/main/java/entralinked/serialization/UrlEncodedFormGenerator.java +++ b/src/main/java/entralinked/serialization/UrlEncodedFormGenerator.java @@ -98,15 +98,14 @@ public class UrlEncodedFormGenerator extends SimpleGeneratorBase { writer.write('='); } - String value = text; - // Encode value as base64 if feature is enabled + // Otherwise, encode using URLEncoder. if(Feature.BASE64_ENCODE_VALUES.enabledIn(formatFeatures)) { - value = Base64.getEncoder().encodeToString(text.getBytes(StandardCharsets.ISO_8859_1)) - .replace('=', '*').replace('+', '.').replace('/', '-'); + writer.write(Base64.getEncoder().encodeToString(text.getBytes(StandardCharsets.ISO_8859_1)) + .replace('=', '*').replace('+', '.').replace('/', '-')); + } else { + writer.write(URLEncoder.encode(text, StandardCharsets.UTF_8)); } - - writer.write(URLEncoder.encode(value, StandardCharsets.UTF_8)); } @Override diff --git a/src/main/java/entralinked/serialization/UrlEncodedFormParser.java b/src/main/java/entralinked/serialization/UrlEncodedFormParser.java index ae13258..b30027c 100644 --- a/src/main/java/entralinked/serialization/UrlEncodedFormParser.java +++ b/src/main/java/entralinked/serialization/UrlEncodedFormParser.java @@ -101,13 +101,14 @@ public class UrlEncodedFormParser extends SimpleParserBase { _currToken = JsonToken.VALUE_STRING; // Decode base64 if feature is enabled + // Otherwise, decode using URLDecoder. if(Feature.BASE64_DECODE_VALUES.enabledIn(formatFeatures)) { - parsedString = new String(Base64.getDecoder().decode( - parsedString.replace('*', '=').replace('.', '+').replace('-', '/')), StandardCharsets.ISO_8859_1); + context.setCurrentValue(new String(Base64.getDecoder().decode( + parsedString.replace('*', '=').replace('.', '+').replace('-', '/')), StandardCharsets.ISO_8859_1)); + } else { + context.setCurrentValue(URLDecoder.decode(parsedString, StandardCharsets.UTF_8)); } - context.setCurrentValue(URLDecoder.decode(parsedString, StandardCharsets.UTF_8)); - if(i != '&') { if(i != -1) { _reportUnexpectedChar(i, "expected '&' to mark end of value and start of new key");