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

James E. King III closed THRIFT-1156.
-------------------------------------
       Resolution: Duplicate
         Assignee: James E. King III
    Fix Version/s: 0.9

> Bug with Base 64 coding in TBase64Utils
> ---------------------------------------
>
>                 Key: THRIFT-1156
>                 URL: https://issues.apache.org/jira/browse/THRIFT-1156
>             Project: Thrift
>          Issue Type: Bug
>          Components: Java - Library
>    Affects Versions: 0.6
>         Environment: Java SE, Android
>            Reporter: Głowka Rafał
>            Assignee: James E. King III
>            Priority: Major
>             Fix For: 0.9
>
>   Original Estimate: 1h
>  Remaining Estimate: 1h
>
> There are some problems with coding byte[] when values are less that 0.
> The example code :
>       public static void main(String[] args) 
>       {
>               byte[] data = new byte[256];
>               byte[] data2 = new byte[512];
>               for (int i = 0; i < 512; i++)
>                       data2[i] = 0;
>               for (byte b = -128; b < 127; b++)
>                       data[b + 128] = b;
>               int len = 256;
>               int off = 0;
>               int off2 = 0;
>               while (len >= 3) {
>                       // Encode 3 bytes at a time
>                       TBase64Utils.encode(data, off, 3, data2, off2);
>                       off += 3;
>                       off2 += 4;
>                       len -= 3;
>               }
>               if (len > 0) {
>                       // Encode remainder
>                       TBase64Utils.encode(data, off, len, data2, off2);
>               }
>               len = 256;
>               off = 0;
>               off2 = 0;
>               while (len >= 3) {
>                       // Encode 3 bytes at a time
>                       TBase64Utils.decode(data2, off2, 4, data, off);
>                       off += 3;
>                       len -= 3;
>                       off2 += 4;
>               }
>               if (len > 0) {
>                       // Encode remainder
>                       TBase64Utils.decode(data2, off2, len, data, off);
>               }
>               for (byte b = -128; b < 127; b++)
>                       System.out.println("should be : " + (b) + " is : " + 
> data[b + 128]);
>       }
> The results : 
> ...
> should be : -18 is : -18
> should be : -17 is : -18
> should be : -16 is : -1
> should be : -15 is : -15
> should be : -14 is : -15
> should be : -13 is : -14
> should be : -12 is : -12
> should be : -11 is : -12
> should be : -10 is : -11
> should be : -9 is : -9
> should be : -8 is : -5
> should be : -7 is : -8
> should be : -6 is : -6
> should be : -5 is : -6
> should be : -4 is : -5
> should be : -3 is : -3
> should be : -2 is : -3
> should be : -1 is : -1
> should be : 0 is : 0
> should be : 1 is : 1
> ...



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to