Skip to content

Commit

Permalink
Update timezone definitions with current DST changes and fix a DoS bug
Browse files Browse the repository at this point in the history
in kio_imap4.
  • Loading branch information
Michael Nottebrock authored and Michael Nottebrock committed Mar 30, 2007
1 parent bf4e60e commit 36f4b56
Showing 9 changed files with 106,347 additions and 0 deletions.
1 change: 1 addition & 0 deletions deskutils/kdepim3/Makefile
Original file line number Diff line number Diff line change
@@ -7,6 +7,7 @@

PORTNAME= kdepim
PORTVERSION= ${KDE_VERSION}
PORTREVISION= 1
CATEGORIES= deskutils mail news palm kde
MASTER_SITES= ${MASTER_SITE_KDE}
MASTER_SITE_SUBDIR= stable/${PORTVERSION:S/.0//}/src
77 changes: 77 additions & 0 deletions deskutils/kdepim3/files/patch-mimeheader.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
--- kioslaves/imap4/mimeheader.cc 2005/07/26 18:54:59 438982
+++ kioslaves/imap4/mimeheader.cc 2007/03/28 21:58:46 647617
@@ -339,35 +339,47 @@
{
val = rfcDecoder::encodeRFC2231String (aValue);
}
+ //kdDebug(7116) << "mimeHeader::setParameter() - val = '" << val << "'" << endl;
//see if it needs to be truncated
vlen = val.length();
llen = aLabel.length();
- if (vlen + llen + 4 > 80 && llen < 80 - 8 )
+ if (vlen + llen + 4 > 80 && llen < 80 - 8 - 2 )
{
- int limit = 80 - 8 - (int)llen;
+ const int limit = 80 - 8 - 2 - (int)llen;
+ // the -2 is there to allow extending the length of a part of val
+ // by 1 or 2 in order to prevent an encoded character from being
+ // split in half
int i = 0;
QString shortValue;
QCString shortLabel;

while (!val.isEmpty ())
{
- //don't truncate the encoded chars
- int offset = 0;
- if (limit > int(vlen))
- limit = vlen;
- offset = val.findRev ('%', limit);
- if (offset == limit - 1 || offset == limit - 2)
- {
-// cout << "offset " << offset << "-" << limit << "=" << limit-offset << endl;
- offset = limit - offset;
+ int partLen; // the length of the next part of the value
+ if ( limit >= int(vlen) ) {
+ // the rest of the value fits completely into one continued header
+ partLen = vlen;
+ }
+ else {
+ partLen = limit;
+ // make sure that we don't split an encoded char in half
+ if ( val[partLen-1] == '%' ) {
+ partLen += 2;
+ }
+ else if ( partLen > 1 && val[partLen-2] == '%' ) {
+ partLen += 1;
+ }
+ // make sure partLen does not exceed vlen (could happen in case of
+ // an incomplete encoded char)
+ if ( partLen > int(vlen) ) {
+ partLen = vlen;
+ }
}
- else
- offset = 0;
- shortValue = val.left (limit - offset);
+ shortValue = val.left( partLen );
shortLabel.setNum (i);
shortLabel = aLabel + "*" + shortLabel;
- val = val.right (vlen - limit + offset);
- vlen = vlen - limit + offset;
+ val = val.right( vlen - partLen );
+ vlen = vlen - partLen;
if (encoded)
{
if (i == 0)
@@ -376,7 +388,9 @@
}
shortLabel += "*";
}
-// cout << shortLabel << "-" << shortValue << endl;
+ //kdDebug(7116) << "mimeHeader::setParameter() - shortLabel = '" << shortLabel << "'" << endl;
+ //kdDebug(7116) << "mimeHeader::setParameter() - shortValue = '" << shortValue << "'" << endl;
+ //kdDebug(7116) << "mimeHeader::setParameter() - val = '" << val << "'" << endl;
aDict->insert (shortLabel, new QString (shortValue));
i++;
}
Loading
Oops, something went wrong.

0 comments on commit 36f4b56

Please sign in to comment.