Skip to content

Commit ee9fd16

Browse files
committed
Revert this:
Encode non UTF-8 characters only once #943 Issue:203482
1 parent e9b507a commit ee9fd16

File tree

2 files changed

+11
-55
lines changed

2 files changed

+11
-55
lines changed

common/src/main/java/com/genexus/CommonUtil.java

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import java.math.BigDecimal;
1010
import java.io.*;
1111
import java.net.URLEncoder;
12-
import java.nio.charset.StandardCharsets;
1312
import java.text.*;
1413
import java.util.*;
1514

@@ -3492,36 +3491,6 @@ public static String Sanitize(String input, HashMap<Character, Character> whiteL
34923491
return sanitizedInput.toString();
34933492
}
34943493

3495-
public static String encodeUtf8Once(String input) {
3496-
StringBuilder sb = new StringBuilder();
3497-
for (int i = 0; i < input.length(); i++) {
3498-
char c = input.charAt(i);
3499-
if (c == '%' && i + 2 < input.length() &&
3500-
(((input.charAt(i+1) >= '0' && input.charAt(i+1) <= '9') ||
3501-
(input.charAt(i+1) >= 'A' && input.charAt(i+1) <= 'F') ||
3502-
(input.charAt(i+1) >= 'a' && input.charAt(i+1) <= 'f')) &&
3503-
((input.charAt(i+2) >= '0' && input.charAt(i+2) <= '9') ||
3504-
(input.charAt(i+2) >= 'A' && input.charAt(i+2) <= 'F') ||
3505-
(input.charAt(i+2) >= 'a' && input.charAt(i+2) <= 'f')))) {
3506-
sb.append('%').append(input.charAt(i+1)).append(input.charAt(i+2));
3507-
i += 2;
3508-
}
3509-
else if ((c >= 'A' && c <= 'Z') ||
3510-
(c >= 'a' && c <= 'z') ||
3511-
(c >= '0' && c <= '9') ||
3512-
c == '-' || c == '_' || c == '.' || c == '~') {
3513-
sb.append(c);
3514-
}
3515-
else {
3516-
byte[] bytes = String.valueOf(c).getBytes(StandardCharsets.UTF_8);
3517-
for (byte b : bytes) {
3518-
sb.append(String.format("%%%02X", b));
3519-
}
3520-
}
3521-
}
3522-
return sb.toString();
3523-
}
3524-
35253494
public static boolean isKnownContentType(String type)
35263495
{
35273496
if (type != null)

gxcloudstorage-awss3-v2/src/main/java/com/genexus/db/driver/ExternalProviderS3V2.java

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.genexus.db.driver;
22

3-
import com.genexus.CommonUtil;
43
import software.amazon.awssdk.auth.credentials.*;
54
import software.amazon.awssdk.core.ResponseBytes;
65
import software.amazon.awssdk.core.ResponseInputStream;
@@ -25,6 +24,7 @@
2524

2625
import java.io.*;
2726
import java.net.URI;
27+
import java.net.URL;
2828
import java.net.URLEncoder;
2929
import java.nio.charset.StandardCharsets;
3030
import java.nio.file.Files;
@@ -259,26 +259,13 @@ public String upload(String externalFileName, InputStream input, ResourceAccessC
259259
public String get(String externalFileName, ResourceAccessControlList acl, int expirationMinutes) {
260260
// Send a request to AWS S3 to retrieve the metadata for the specified object to see if
261261
// the object exists and is accessible under the provided credentials and permissions.
262-
try {
263-
HeadObjectRequest headObjectRequest = HeadObjectRequest.builder()
264-
.bucket(bucket)
265-
.key(externalFileName)
266-
.build();
267-
client.headObject(headObjectRequest);
268-
return getResourceUrl(externalFileName, acl, expirationMinutes);
269-
} catch (Exception e) {
270-
int lastIndex = Math.max(externalFileName.lastIndexOf('/'), externalFileName.lastIndexOf('\\'));
271-
String path = lastIndex >= 0 ? externalFileName.substring(0, lastIndex + 1) : "";
272-
String fileName = lastIndex >= 0 ? externalFileName.substring(lastIndex + 1) : externalFileName;
273-
String encodedFileName = CommonUtil.encodeUtf8Once(fileName);
274-
String encodedExternalFileName = path + encodedFileName;
275-
HeadObjectRequest headObjectRequest = HeadObjectRequest.builder()
276-
.bucket(bucket)
277-
.key(encodedExternalFileName)
278-
.build();
279-
client.headObject(headObjectRequest);
280-
return getResourceUrl(encodedExternalFileName, acl, expirationMinutes);
281-
}
262+
HeadObjectRequest headObjectRequest = HeadObjectRequest.builder()
263+
.bucket(bucket)
264+
.key(externalFileName)
265+
.build();
266+
client.headObject(headObjectRequest);
267+
268+
return getResourceUrl(externalFileName, acl, expirationMinutes);
282269
}
283270

284271
private String getResourceUrl(String externalFileName, ResourceAccessControlList acl, int expirationMinutes) {
@@ -665,7 +652,7 @@ private String getResourceUrlWithACL(String externalFileName, ResourceAccessCont
665652
int lastIndex = Math.max(externalFileName.lastIndexOf('/'), externalFileName.lastIndexOf('\\'));
666653
String path = externalFileName.substring(0, lastIndex + 1);
667654
String fileName = externalFileName.substring(lastIndex + 1);
668-
String encodedFileName = CommonUtil.encodeUtf8Once(fileName);
655+
String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString());
669656

670657
String url = String.format(
671658
"https://%s.s3.%s.amazonaws.com/%s%s",
@@ -676,8 +663,8 @@ private String getResourceUrlWithACL(String externalFileName, ResourceAccessCont
676663
);
677664

678665
return url;
679-
} catch (Exception e) {
680-
logger.error("Failed to encode resource URL for " + externalFileName, e);
666+
} catch (UnsupportedEncodingException uee) {
667+
logger.error("Failed to encode resource URL for " + externalFileName, uee);
681668
return "";
682669
}
683670
}

0 commit comments

Comments
 (0)