[ 
https://issues.apache.org/jira/browse/TEXT-242?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18101849#comment-18101849
 ] 

Gary D. Gregory commented on TEXT-242:
--------------------------------------

[~kzhun] PR merged, thank you. 

> StringSubstitutorReader does not substitute variables whose configured   
> suffix is longer than two characters
> -------------------------------------------------------------------------------------------------------------
>
>                 Key: TEXT-242
>                 URL: https://issues.apache.org/jira/browse/TEXT-242
>             Project: Commons Text
>          Issue Type: Bug
>            Reporter: Maksym Korshun
>            Priority: Major
>             Fix For: 1.15.1
>
>
> The bug appears when the suffix is longer than two characters.
> {code:java}
> Map<String, String> values = Map.of("name", "Maksym");
> StringSubstitutor substitutor = new StringSubstitutor(values);
> substitutor.setVariablePrefix("[[");
> substitutor.setVariableSuffix("]]>");
> StringReader stringReader = new StringReader("Hello [[name]]>!");
> try (Reader reader = new StringSubstitutorReader(stringReader, substitutor);
>     StringWriter output = new StringWriter()) {
>     reader.transferTo(output);
>     System.out.println(output); // Hello [[name]]>!
> } catch (IOException e) {
>     throw new RuntimeException(e);
> }
> {code}
> in StringSubstitutorReader.java line 276 {{pos++}} advances only one 
> character and on line 295 {{endPos = pos + 1}}
> Together, {{pos++}} and {{pos + 1}} make the replacement range include at 
> most two suffix characters.
> Therefore:
>  - suffix length 1: works;
>  - suffix length 2: works accidentally;
>  - suffix length 3+: the suffix is cut off before substitution.
> {{substitutor.setVariableSuffix("]]>");}} the suffix length is 3. The reader 
> recognizes {{]]>}} but then calculates a replacement range containing only 
> {{{}]]{}}}. The text passed to StringSubstitutor is effectively:
>  {{[[name]]}}
>   instead of:
>  {{[[name]]>}}
>   Since the configured suffix is {{]]>}}, {{[[name]]}} is not a complete 
> variable, so it remains unchanged.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to