git clone of logicmail with some fixes/features added
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

MIME boundary detection fix, header value trailing colon trimming, and fix for DataBuffer getLength() usage. (refs #352, #238)

git-svn-id: https://logicmail.svn.sourceforge.net/svnroot/logicmail/trunk@926 5c734088-3d25-0410-9155-b3c3832efda5

octorian 74cb7728 d42489b6

+15 -4
+13 -2
LogicMail/src/org/logicprobe/LogicMail/util/MailMessageParser.java
··· 245 245 if(resultLines[i].length == 0) { 246 246 inHeaders = false; 247 247 if(!firstHeaderLine) { 248 + removeTrailingColon(buf); 248 249 buf.write(CRLF); 249 250 } 250 251 buf.write(CRLF); 251 252 252 253 if(inInitialHeaders) { 253 - boundary = getContentBoundary(buf.getArray(), buf.getArrayStart(), buf.getArrayLength()); 254 + boundary = getContentBoundary(buf.getArray(), buf.getArrayStart(), buf.getLength()); 254 255 inInitialHeaders = false; 255 256 } 256 257 } ··· 265 266 } 266 267 else { 267 268 if(!firstHeaderLine) { 269 + removeTrailingColon(buf); 268 270 buf.write(CRLF); 269 271 } 270 272 buf.write(resultLines[i]); ··· 282 284 } 283 285 284 286 ByteArrayInputStream inputStream = new ByteArrayInputStream( 285 - buf.getArray(), buf.getArrayStart(), buf.getArrayLength()); 287 + buf.getArray(), buf.getArrayStart(), buf.getLength()); 286 288 287 289 return inputStream; 288 290 } 289 291 292 + private static void removeTrailingColon(DataBuffer buf) { 293 + int len = buf.getLength(); 294 + if(len > 0 && buf.getArray()[buf.getArrayStart() + len - 1] == (byte)';') { 295 + buf.setLength(len - 1); 296 + } 297 + } 298 + 290 299 private static byte[] getContentBoundary(byte[] buf, int offset, int length) { 291 300 int p = StringArrays.indexOf(buf, CONTENT_TYPE_KEY, offset, length, true); 292 301 if(p == -1) { return null; } else { p += CONTENT_TYPE_KEY.length; } ··· 301 310 if(s == -1 || s > q) { s = q; } 302 311 303 312 if(buf[r] == (byte)'\"') { r++; } 313 + if(buf[s - 1] == (byte)';') { s--; } 314 + if((s - r) <= 0) { return null; } 304 315 if(buf[s - 1] == (byte)'\"') { s--; } 305 316 if((s - r) <= 0) { return null; } 306 317
+2 -2
LogicMail/src/org/logicprobe/LogicMail/util/StringParser.java
··· 1254 1254 decodeQuotedPrintableDataImpl(buf, text, header); 1255 1255 String result; 1256 1256 try { 1257 - result = StringFactory.create(buf.getArray(), buf.getArrayStart(), buf.getArrayLength(), charset); 1257 + result = StringFactory.create(buf.getArray(), buf.getArrayStart(), buf.getLength(), charset); 1258 1258 } catch (UnsupportedEncodingException e) { 1259 - result = new String(buf.getArray(), buf.getArrayStart(), buf.getArrayLength()); 1259 + result = new String(buf.getArray(), buf.getArrayStart(), buf.getLength()); 1260 1260 } 1261 1261 return result; 1262 1262 }