From 81ebc69d2398abea4697f47d567d44ad55fef46e Mon Sep 17 00:00:00 2001 From: bandhi Date: Wed, 20 Dec 2017 16:54:05 +0000 Subject: [PATCH] msGetFriBidiEncodedString(): error out on multi-line paragraph --- mapstring.cpp | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/mapstring.cpp b/mapstring.cpp index 4f34aa099e..0fc5488fad 100644 --- a/mapstring.cpp +++ b/mapstring.cpp @@ -1691,13 +1691,25 @@ char *msGetFriBidiEncodedString(const char *string, const char *encoding) FriBidiLevel *levels; FriBidiStrIndex new_len; fribidi_boolean log2vis; - int i, j; visual = (FriBidiChar *) msSmallMalloc (sizeof (FriBidiChar) * (len + 1)); ltov = NULL; vtol = NULL; levels = NULL; + // fribidi_log2vis() doesn't support multi-line paragraphs. + // See: https://lists.freedesktop.org/archives/fribidi/2008-January/000515.html + for( size_t i = 0; i < len; i++ ) + { + if (logical[i] == '\n') { + msSetError(MS_IDENTERR, + "Input string is a multi-line paragraph, which is not supported.", + "msGetFriBidiEncodedString()"); + msFree(visual); + return NULL; + } + } + /* Create a bidi string. */ log2vis = fribidi_log2vis (logical, len, &base, /* output */ @@ -1706,6 +1718,7 @@ char *msGetFriBidiEncodedString(const char *string, const char *encoding) if (!log2vis) { msSetError(MS_IDENTERR, "Failed to create bidi string.", "msGetFriBidiEncodedString()"); + msFree(visual); return NULL; } @@ -1728,7 +1741,8 @@ char *msGetFriBidiEncodedString(const char *string, const char *encoding) /* scan str and compress out FRIBIDI_CHAR_FILL UTF8 characters */ - for (i=0, j=0; i