Ticket #508: 508-applied.diff

File 508-applied.diff, 9.9 KB (added by str4d, 5 years ago)

wockenfuss's 508.diff applied to trunk and "mtn diff"-ed

  • apps/susimail/src/src/i2p/susi/webmail/Mail.java

    #
    # old_revision [3416477a2e1ff51d9c8c6e8c6ab12dc72d3ee488]
    #
    # patch "apps/susimail/src/src/i2p/susi/webmail/Mail.java"
    #  from [cbaf857643900e62149af17738184059941ca0a5]
    #    to [eb041088c8c3359dd6fd7d0f642ca9fc09ff998e]
    # 
    # patch "apps/susimail/src/src/i2p/susi/webmail/WebMail.java"
    #  from [ded21dbc1dcb402922939439d8f036249c41a774]
    #    to [5b0da4af1b603506197df67a83688dbbbf76545c]
    # 
    # patch "apps/susimail/src/src/i2p/susi/webmail/encoding/HeaderLine.java"
    #  from [3d3109f7420181078450a6f3d9e11e8ced36c6db]
    #    to [d9f2fc8bd6635b011d9469ea7d372258b6dc569c]
    # 
    # patch "apps/susimail/src/src/i2p/susi/webmail/encoding/QuotedPrintable.java"
    #  from [ed39b6e08d707376a3084fc11b5ffde911d95e64]
    #    to [ed8e3d643dc10b0791f80826ff1ee300137756f5]
    # 
    # patch "apps/susimail/src/src/org/mortbay/servlet/MultiPartRequest.java"
    #  from [eb190f3e6cd9619855eae79304e8a62767f9c3af]
    #    to [f24bf86bdb372e1fc7687840179cadf61b9c93d5]
    #
    ============================================================
    public class Mail { 
    177177                               
    178178                                try {
    179179                                        ReadBuffer decoded = hl.decode( header );
    180                                         BufferedReader reader = new BufferedReader( new InputStreamReader( new ByteArrayInputStream( decoded.content, decoded.offset, decoded.length ), "ISO-8859-1" ) );
     180                                        BufferedReader reader = new BufferedReader( new InputStreamReader( new ByteArrayInputStream( decoded.content, decoded.offset, decoded.length ), "UTF-8" ) );
    181181                                        String line;
    182182                                        while( ( line = reader.readLine() ) != null ) {
    183183                                                if( line.length() == 0 )
  • apps/susimail/src/src/i2p/susi/webmail/WebMail.java

    ============================================================
    public class WebMail extends HttpServlet 
    13331333                                }
    13341334                                out.println( "</head>\n<body>\n" +
    13351335                                        "<div class=\"page\"><p><img src=\"" + sessionObject.imgPath + "susimail.png\" alt=\"Susimail\"><br>&nbsp;</p>\n" +
    1336                                         "<form method=\"POST\" enctype=\"multipart/form-data\" action=\"" + myself + "\">" );
     1336                                        "<form method=\"POST\" enctype=\"multipart/form-data\" action=\"" + myself + "\" accept-charset=\"UTF-8\">" );
    13371337
    13381338                                if( sessionObject.error != null && sessionObject.error.length() > 0 ) {
    13391339                                        out.println( "<p class=\"error\">" + sessionObject.error + "</p>" );
    public class WebMail extends HttpServlet 
    15091509                                body.append( "\r\nMIME-Version: 1.0\r\nContent-type: multipart/mixed; boundary=\"" + boundary + "\"\r\n\r\n" );
    15101510                        }
    15111511                        else {
    1512                                 body.append( "\r\nMIME-Version: 1.0\r\nContent-type: text/plain; charset=\"iso-8859-1\"\r\nContent-Transfer-Encoding: quoted-printable\r\n\r\n" );
     1512                                body.append( "\r\nMIME-Version: 1.0\r\nContent-type: text/plain; charset=\"utf-8\"\r\nContent-Transfer-Encoding: quoted-printable\r\n\r\n" );
    15131513                        }
    15141514                        try {
    15151515                                if( multipart )
    1516                                         body.append( "--" + boundary + "\r\nContent-type: text/plain; charset=\"iso-8859-1\"\r\nContent-Transfer-Encoding: quoted-printable\r\n\r\n" );
     1516                                        body.append( "--" + boundary + "\r\nContent-type: text/plain; charset=\"utf-8\"\r\nContent-Transfer-Encoding: quoted-printable\r\n\r\n" );
    15171517                                body.append( qp.encode( text ) );
    15181518                        } catch (EncodingException e) {
    15191519                                ok = false;
  • apps/susimail/src/src/i2p/susi/webmail/encoding/HeaderLine.java

    ============================================================
    public class HeaderLine implements Encod 
    4545         * @see i2p.susi.webmail.encoding.Encoding#encode(java.lang.String)
    4646         */
    4747        public String encode(String text) throws EncodingException {
    48                 try {
    49                         return encode( new ByteArrayInputStream( text.getBytes() ) );
    50                 } catch (IOException e) {
    51                         throw new EncodingException( "IOException occured." );
    52                 }
     48                return encode( text.getBytes() );
    5349        }
    5450        private static final int BUFSIZE = 2;
    55         private String encode(InputStream in) throws IOException
    56         {
     51        /* (non-Javadoc)
     52         * @see i2p.susi.webmail.encoding.Encoding#encode(byte[])
     53         */
     54        public String encode( byte in[] ) throws EncodingException {
    5755                StringBuilder out = new StringBuilder();
    5856                int l = 0, buffered = 0, tmp[] = new int[BUFSIZE];
    5957                boolean quoting = false;
    6058                boolean quote = false;
    6159                boolean linebreak = false;
    6260                String quotedSequence = null;
    63                 int rest = 0;
     61                int rest = in.length;
     62                int index = 0;
    6463                while( true ) {
    65                         rest = in.available();
    6664                        while( rest > 0 && buffered < BUFSIZE ) {
    67                                 tmp[buffered++] = in.read();
     65                                tmp[buffered++] = in[index++];
    6866                                rest--;
    6967                        }
    7068                        if( rest == 0 && buffered == 0 )
    public class HeaderLine implements Encod 
    9593                        }
    9694                        if( quote ) {
    9795                                if( ! quoting ) {
    98                                         quotedSequence = "=?iso-8859-1?Q?";
     96                                        quotedSequence = "=?utf-8?Q?";
    9997                                        quoting = true;
    10098                                }
    101                                 quotedSequence += HexTable.table[ c ];
     99                                quotedSequence += HexTable.table[ c < 0 ? 256 + c : c ];
    102100                        }
    103101                        else {
    104102                                if( quoting ) {
    public class HeaderLine implements Encod 
    147145        /* (non-Javadoc)
    148146         * @see i2p.susi.webmail.encoding.Encoding#decode(java.lang.String)
    149147         */
    150         /* (non-Javadoc)
    151          * @see i2p.susi.webmail.encoding.Encoding#encode(java.lang.String)
    152          */
    153         public String encode( byte in[] ) throws EncodingException {
    154                 try {
    155                         return encode( new ByteArrayInputStream( in ) );
    156                 } catch (IOException e) {
    157                         throw new EncodingException( "IOException occured." );
    158                 }
    159         }
    160         /* (non-Javadoc)
    161          * @see i2p.susi.webmail.encoding.Encoding#decode(java.lang.String)
    162          */
    163148        public ReadBuffer decode( byte in[] ) throws DecodingException {
    164149                return decode( in, 0, in.length );
    165150        }
    public class HeaderLine implements Encod 
    174159                        throw new DecodingException( "Index out of bound." );
    175160                boolean linebreak = false;
    176161                boolean lastCharWasQuoted = false;
     162                int lastSkip = 0;
    177163                while( length-- > 0 ) {
    178164                        byte c = in[offset++];
    179165                        if( c == '=' ) {
    public class HeaderLine implements Encod 
    250236                                         */
    251237                                        out[written++] = '\r';
    252238                                        out[written++] = '\n';
     239                                        lastSkip = 0;
    253240                                }
    254241                                else {
    255242                                        if( !lastCharWasQuoted )
    public class HeaderLine implements Encod 
    257244                                        /*
    258245                                         * skip whitespace
    259246                                         */
     247                                        int skipped = 1;
    260248                                        while( length > 0 && ( in[offset] == ' ' || in[offset] == '\t' ) ) {
     249                                                if( lastSkip > 0 && skipped >= lastSkip ) {
     250                                                        break;
     251                                                }
    261252                                                offset++;
    262253                                                length--;
     254                                                skipped++;
    263255                                        }
     256                                        if( lastSkip == 0 && skipped > 0 ) {
     257                                                lastSkip = skipped;
     258                                        }
    264259                                        continue;
    265260                                }
    266261                        }
    public class HeaderLine implements Encod 
    273268                if( linebreak ) {
    274269                        out[written++] = '\r';
    275270                        out[written++] = '\n';
     271                        lastSkip = 0;
    276272                }
    277273                       
    278274                ReadBuffer readBuffer = new ReadBuffer();
    public class HeaderLine implements Encod 
    298294                HeaderLine hl = new HeaderLine();
    299295                System.out.println( hl.encode( text ) );
    300296                System.out.println( hl.encode( "test ÄÖÜ" ) );
     297                System.out.println( hl.encode( "Здравствуйте" ) );
    301298        }
    302299}
  • apps/susimail/src/src/i2p/susi/webmail/encoding/QuotedPrintable.java

    ============================================================
    public class QuotedPrintable implements  
    4444        /* (non-Javadoc)
    4545         * @see i2p.susi.webmail.encoding.Encoding#encode(java.lang.String)
    4646         */
    47         public String encode( byte in[] ) throws EncodingException {
    48                 try {
    49                         return encode( new ByteArrayInputStream( in ) );
    50                 }catch (IOException e) {
    51                         throw new EncodingException( "IOException occured." );
    52                 }
    53         }
    54         /* (non-Javadoc)
    55          * @see i2p.susi.webmail.encoding.Encoding#encode(java.lang.String)
    56          */
    5747        public String encode(String text) throws EncodingException {
    58                 try {
    59                         return encode( new ByteArrayInputStream( text.getBytes() ) );
    60                 }catch (IOException e) {
    61                         throw new EncodingException( "IOException occured." );
    62                 }
     48                return encode( text.getBytes() );
    6349        }
    6450        /**
    6551         *
    public class QuotedPrintable implements  
    6753         * @return
    6854         */
    6955        private static int BUFSIZE = 2;
    70         private String encode( InputStream in ) throws EncodingException, IOException {
     56        /* (non-Javadoc)
     57         * @see i2p.susi.webmail.encoding.Encoding#encode(byte[])
     58         */
     59        public String encode( byte in[] ) throws EncodingException {
    7160                StringBuilder out = new StringBuilder();
    72                 int read = 0, buffered = 0, tmp[] = new int[BUFSIZE];
     61                int buffered = 0, tmp[] = new int[BUFSIZE];
     62                int read = in.length;
     63                int index = 0;
    7364                while( true ) {
    74                         read = in.available();
    7565                        while( read > 0 && buffered < BUFSIZE ) {
    76                                 tmp[buffered++] = in.read();
     66                                tmp[buffered++] = in[index++];
    7767                                read--;
    7868                        }
    7969                        if( read == 0 && buffered == 0 )
    public class QuotedPrintable implements  
    10595                                        tmp[j-1] = tmp[j];
    10696                        }
    10797                        else {
    108                                 if( c < 0 || c > 255 ) {
    109                                         throw new EncodingException( "Encoding supports only values of 0..255." );
    110                                 }
    111                                 out.append( HexTable.table[ c ] );
     98                                out.append( HexTable.table[ c < 0 ? 256 + c : c ] );
    11299                        }
    113100                }
    114101                return out.toString();
  • apps/susimail/src/src/org/mortbay/servlet/MultiPartRequest.java

    ============================================================
    public class MultiPartRequest 
    9292            value(content_type.substring(content_type.indexOf("boundary=")));
    9393       
    9494        //if(log.isDebugEnabled())log.debug("Boundary="+_boundary);
    95         _byteBoundary= (_boundary+"--").getBytes("ISO-8859-1");
     95        _byteBoundary= (_boundary+"--").getBytes("UTF-8");
    9696       
    9797        loadAllParts();
    9898    }