From b61e699b077eb4691f81f473a13f2f6bf9b98d58 Mon Sep 17 00:00:00 2001 From: Chamil Elladeniya Date: Thu, 16 Feb 2023 12:06:02 +0530 Subject: [PATCH] Quote the multipart boundary header parameter value --- .../org/ballerinalang/net/http/HttpUtil.java | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/stdlib/http/src/main/java/org/ballerinalang/net/http/HttpUtil.java b/stdlib/http/src/main/java/org/ballerinalang/net/http/HttpUtil.java index b0592a535256..add748ac8f5d 100644 --- a/stdlib/http/src/main/java/org/ballerinalang/net/http/HttpUtil.java +++ b/stdlib/http/src/main/java/org/ballerinalang/net/http/HttpUtil.java @@ -53,6 +53,8 @@ import org.ballerinalang.jvm.values.StreamingJsonValue; import org.ballerinalang.jvm.values.XMLItem; import org.ballerinalang.jvm.values.XMLSequence; +import org.ballerinalang.jvm.values.api.BMap; +import org.ballerinalang.jvm.values.api.BString; import org.ballerinalang.jvm.values.api.BValueCreator; import org.ballerinalang.mime.util.EntityBodyChannel; import org.ballerinalang.mime.util.EntityBodyHandler; @@ -107,6 +109,7 @@ import java.util.stream.Collectors; import static io.netty.handler.codec.http.HttpHeaderNames.CACHE_CONTROL; +import static io.netty.handler.codec.http.HttpHeaderNames.CONTENT_TYPE; import static org.ballerinalang.jvm.observability.ObservabilityConstants.CONFIG_CLIENT_HTTP_URL_DISABLED; import static org.ballerinalang.jvm.observability.ObservabilityConstants.PROPERTY_HTTP_HOST; import static org.ballerinalang.jvm.observability.ObservabilityConstants.PROPERTY_HTTP_PORT; @@ -1100,11 +1103,20 @@ public static String getContentTypeFromTransportMessage(HttpCarbonMessage transp * @return The boundary string that was extracted from header or the newly generated one */ public static String addBoundaryIfNotExist(HttpCarbonMessage transportMessage, String contentType) { - String boundaryString; String boundaryValue = HeaderUtil.extractBoundaryParameter(contentType); - boundaryString = boundaryValue != null ? sanitizeBoundary(boundaryValue) : - HttpUtil.addBoundaryParameter(transportMessage, contentType); - return boundaryString; + if (boundaryValue != null) { + boundaryValue = sanitizeBoundary(boundaryValue); + boolean validateContentType = MimeUtil.isValidateContentType(contentType); + if (!validateContentType) { + String headerValue = HeaderUtil.getHeaderValue(contentType); + MapValue paramMap = HeaderUtil.getParamMap(contentType); + paramMap.put(BOUNDARY, MimeUtil.includeQuotes(boundaryValue)); + contentType = HeaderUtil.appendHeaderParams(new StringBuilder(headerValue).append(";"), paramMap); + transportMessage.setHeader(String.valueOf(CONTENT_TYPE), contentType); + } + return boundaryValue; + } + return HttpUtil.addBoundaryParameter(transportMessage, contentType); } /**