[ 
https://issues.apache.org/jira/browse/VELOCITY-880?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Michael Osipov updated VELOCITY-880:
------------------------------------
    Description: 
A long-withstanding bug in the DataSourceResourceLoader corrupts UTF-8 
templates retrieved from the database.  The Unit Test suite for this resource 
loader has deficiencies that hide the bug. 

The cause of the problem is this:
{code}
      InputStream rawStream = rs.getAsciiStream(templateColumn);

The resolution of the problem is simply:
      Reader r = rs.getCharacterStream(templateColumn);
      InputStream rawStream = null;
           try {
                rawStream = IOUtils.toInputStream(IOUtils.toString(r), 
encoding);
                } catch (IOException ioe) {}
{code}

Once done, the test failure vanishes:
        org.junit.ComparisonFailure: Unicode test failed.  
        Expected :The Euro Currency Symbol € is a two-byte UTF-8 encoded 
character.
        Actual   :The Euro Currency Symbol ? is a two-byte UTF-8 encoded 
character.

The bug was verified and the fix was tested against Oracle12c and HSQLDB 2.3.4 
using a CLOB column to store the template data.

The Unit Tests for this resource loader need attention.

Please see VELOCITY-599 ; long standing problem, which has been erroneously 
marked as resolved but has been in the codebase for a long time.

  was:
A long-withstanding bug in the DataSourceResourceLoader corrupts UTF-8 
templates retrieved from the database.  The Unit Test suite for this resource 
loader has deficiencies that hide the bug. 

The cause of the problem is this:
      InputStream rawStream = rs.getAsciiStream(templateColumn);

The resolution of the problem is simply:
      Reader r = rs.getCharacterStream(templateColumn);
      InputStream rawStream = null;
           try {
                rawStream = IOUtils.toInputStream(IOUtils.toString(r), 
encoding);
                } catch (IOException ioe) {}

Once done, the test failure vanishes:
        org.junit.ComparisonFailure: Unicode test failed.  
        Expected :The Euro Currency Symbol € is a two-byte UTF-8 character.
        Actual   :The Euro Currency Symbol ? is a two-byte UTF-8 character.

The bug was verified and the fix was tested against Oracle12c and HSQLDB 2.3.4 
using a CLOB column to store the template data.

The Unit Tests for this resource loader need attention.

Please see VELOCITY-599 ; long standing problem, which has been erroneously 
marked as resolved but has been in the codebase for a long time.


> DataSourceResourceLoader corrupts UTF-8 encoded characters in template
> ----------------------------------------------------------------------
>
>                 Key: VELOCITY-880
>                 URL: https://issues.apache.org/jira/browse/VELOCITY-880
>             Project: Velocity
>          Issue Type: Bug
>    Affects Versions: 2.1.x
>         Environment: Oracle12c and HSQLDB 2.3.4, JDK 1.8
>            Reporter: James R Doyle
>         Attachments: velocity-880.patch
>
>   Original Estimate: 24h
>  Remaining Estimate: 24h
>
> A long-withstanding bug in the DataSourceResourceLoader corrupts UTF-8 
> templates retrieved from the database.  The Unit Test suite for this resource 
> loader has deficiencies that hide the bug. 
> The cause of the problem is this:
> {code}
>       InputStream rawStream = rs.getAsciiStream(templateColumn);
> The resolution of the problem is simply:
>       Reader r = rs.getCharacterStream(templateColumn);
>       InputStream rawStream = null;
>            try {
>                 rawStream = IOUtils.toInputStream(IOUtils.toString(r), 
> encoding);
>                 } catch (IOException ioe) {}
> {code}
> Once done, the test failure vanishes:
>         org.junit.ComparisonFailure: Unicode test failed.  
>         Expected :The Euro Currency Symbol € is a two-byte UTF-8 encoded 
> character.
>         Actual   :The Euro Currency Symbol ? is a two-byte UTF-8 encoded 
> character.
> The bug was verified and the fix was tested against Oracle12c and HSQLDB 
> 2.3.4 using a CLOB column to store the template data.
> The Unit Tests for this resource loader need attention.
> Please see VELOCITY-599 ; long standing problem, which has been erroneously 
> marked as resolved but has been in the codebase for a long time.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@velocity.apache.org
For additional commands, e-mail: dev-h...@velocity.apache.org

Reply via email to