From f146bf38b12e3412f7aae01f66f7e6b097866dfd Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Fri, 18 Jun 2021 18:32:37 -0300 Subject: [PATCH] Bug 28604: Prevent double encoding of MARC::Record::MiJ->to_mij output This patch fixes a double-encoding issue with MiJ output. Mojolicious' *text* renderer encodes the passed information according to the request context. [1] MARC::Record::MiJ->to_mij, conveniently encodes the string before output [2]. This causes double encoding. So the solution to this situation, is to use the *data* renderer, which doesn't perform any encoding [3]. To test: 1. Apply the regression tests patch 2. Run: $ kshell k$ prove t/db_dependent/api/v1/biblios.t => FAIL: Tests contain diacritics and fail! 3. Have a record with diacritics 4. Try the API routes for fetching a biblio: $ curl --location --request GET 'http://localhost:8080/api/v1/public/biblios/144' \ --header 'Accept: application/marc-in-json' (replace the record id with the one you've chosen) => FAIL: Boo, double encoding 5. Bonus point: you can try it on the non-public route, but you need more configuration boilerplate (basic auth, permissions). If you look at the fix, you will understand the tests cover it and no need to complicate yourself. 6. Apply this patch 7. Repeat 2 => SUCCESS: Tests pass! 8. Repeat 4 (and maybe 5) => SUCCESS: No double encoding! Yay! 9. Sign off :-D [1] https://metacpan.org/release/MRAMBERG/Convos-0.5/view/local/lib/perl5/Mojolicious/Guides/Rendering.pod#Rendering-text [2] https://metacpan.org/dist/MARC-File-MiJ/source/lib/MARC/Record/MiJ.pm#L111 [3] https://metacpan.org/release/MRAMBERG/Convos-0.5/view/local/lib/perl5/Mojolicious/Guides/Rendering.pod#Rendering-data Signed-off-by: Tomas Cohen Arazi Signed-off-by: Lucas Gass Signed-off-by: Martin Renvoize Signed-off-by: Jonathan Druart Signed-off-by: Kyle M Hall (cherry picked from commit cf44929d1ce70daff550a1e803f6bfe396332dbf) Signed-off-by: Fridolin Somers (cherry picked from commit cec90fb3c2f0ba3e867b68c2c202dc7014e68056) Signed-off-by: Victor Grousset/tuxayo --- Koha/REST/V1/Biblios.pm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Koha/REST/V1/Biblios.pm b/Koha/REST/V1/Biblios.pm index 157282b4a1..75e923d142 100644 --- a/Koha/REST/V1/Biblios.pm +++ b/Koha/REST/V1/Biblios.pm @@ -75,7 +75,7 @@ sub get { mij => { status => 200, format => 'mij', - text => $record->to_mij + data => $record->to_mij }, marc => { status => 200, @@ -206,7 +206,7 @@ sub get_public { mij => { status => 200, format => 'mij', - text => $record->to_mij + data => $record->to_mij }, marc => { status => 200, -- 2.39.5