Bug 19655: Make To.json escape doesn't escape newlines to create valid JSON
authorKyle M Hall <kyle@bywatersolutions.com>
Mon, 20 Nov 2017 16:05:35 +0000 (11:05 -0500)
committerChris Cormack <chris@bigballofwax.co.nz>
Tue, 12 Dec 2017 08:22:51 +0000 (21:22 +1300)
JSON does not allow real line-breaks. If a field contains them and they are not escaped, a JSON parser will be unable to convert the stringified JSON back into an object.

This is clearly exemplified by the guarantor search, where a multi-line note on the guarantor's record will break the ability to select that guarantor.

Test Plan:
1) Create Patron A with a "Circulation note" that has multiple lines in it
2) Create Patron B
3) Attempt to set Patron A to be the guarantor for Patron B
4) Note selecting the patron does nothing
5) Apply this patch
6) Repeat step 3
7) Selecting the guarantor now works!

Signed-off-by: Simon Pouchol <simon.pouchol@biblibre.com>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
(cherry picked from commit 9cd9240c362336e390eed01acf3630f33e73825f)
Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>
(cherry picked from commit efb28c4af16efbe688322415ae06c6a85fd3454b)
Signed-off-by: Chris Cormack <chris@bigballofwax.co.nz>

Koha/Template/Plugin/To.pm

index 6bf56b1..f87a39c 100644 (file)
@@ -29,6 +29,8 @@ sub json {
     my $json = JSON->new->allow_nonref(1);
     $json = $json->encode($value);
     $json =~ s/^"|"$//g; # Remove quotes around the strings
+    $json =~ s/\\r/\\\\r/g; # Convert newlines to escaped newline characters
+    $json =~ s/\\n/\\\\n/g;
     return $json;
 }