This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch v4
in repository https://gitbox.apache.org/repos/asf/causeway.git

commit 14abadf99003006c69b8c964ba2982d12bf1bf15
Author: Andi Huber <[email protected]>
AuthorDate: Fri Sep 19 13:01:57 2025 +0200

    CAUSEWAY-3904: fixes client side UTF8 decoder
---
 .../viewer/wicket/ui/components/widgets/select2/Select2.java     | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/widgets/select2/Select2.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/widgets/select2/Select2.java
index e049d9e7698..cab62684fd7 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/widgets/select2/Select2.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/widgets/select2/Select2.java
@@ -57,13 +57,18 @@ static Select2 create(
         settings.setDropdownAutoWidth(true);
         settings.setWidth("100%");
         settings.setPlaceholder(attributeModel.getFriendlyName());
-        // the id string is url-safe base64 encoded JSON coming from 
ObjectDisplayDto
+        // the id string is url-safe base64 encoded JSON coming from 
ChoiceProvider using ObjectDisplayDto as JSON
+        // for UTF8 formatted JSON decoding see 
https://stackoverflow.com/questions/30106476/using-javascripts-atob-to-decode-base64-doesnt-properly-decode-utf-8-strings
+        // TODO perhaps declare this JS else where, then just reference to it
         var template = """
             function(opt) {
                 if(!opt) return "undefined";
                 if(!opt.id) return "undefined";
                 var base64 = opt.id.replace(/-/g, '+').replace(/_/g, '/')
-                var dto = JSON.parse(atob(base64));
+                var json = 
decodeURIComponent(atob(base64).split('').map(function(c) {
+                        return '%' + ('00' + 
c.charCodeAt(0).toString(16)).slice(-2);
+                    }).join(''));
+                var dto = JSON.parse(json);
                 if(!dto) return "undefined";
                 if(!dto.title) return "undefined";
                 if(dto.iconHtml) {

Reply via email to