[dev] [imp-patch] invalid date headers
Francois Marier
francois at nit.ca
Fri Aug 6 18:03:49 PDT 2004
Has this patch been committed ? If not, are there any other changes I
should make or are you simply not interested in fixing this minor bug
that way ?
Thanks,
Francois
On Thu, Jul 29, 2004 at 02:52:58PM -0400, Francois Marier wrote:
> Here's an updated patch in which I moved the function to a method.
>
> Feel free to use this one instead of the previous one if you think the
> performance impact will not be too significant.
>
> Francois
> diff -rpuN -X ../ignorelist ../build/imp/lib/Mailbox.php imp/lib/Mailbox.php
> --- ../build/imp/lib/Mailbox.php Mon Jun 28 11:30:57 2004
> +++ imp/lib/Mailbox.php Thu Jul 29 14:47:00 2004
> @@ -266,7 +266,7 @@ class IMP_Mailbox {
> /* Retrieve information from each mailbox. */
> foreach ($mboxes as $mbox => $ids) {
> $imp_imap->changeMbox($mbox, OP_READONLY);
> - $imapOverview = @imap_fetch_overview($imp['stream'], implode(',', array_keys($ids)), FT_UID);
> + $imapOverview = $this->_imap_fetch_overview($imp['stream'], implode(',', array_keys($ids)), FT_UID);
> foreach ($imapOverview as $header) {
> $key = $ids[$header->uid];
> $overview[$key] = array();
> @@ -1017,7 +1017,7 @@ class IMP_Mailbox {
> $this->_threadIndent[$val] = count($branches);
>
> if ($this->_delhide) {
> - $overview = @imap_fetch_overview($imp['stream'], $val, FT_UID);
> + $overview = $this->_imap_fetch_overview($imp['stream'], $val, FT_UID);
> if (is_array($overview) &&
> ($overview[0]->deleted == 0)) {
> $sorted[] = $val;
> @@ -1192,6 +1192,51 @@ class IMP_Mailbox {
> $this->_sortby = SORTFROM;
> }
> }
> }
> +
> + /**
> + * Runs the imap_fetch_overview function and fixes the date headers
> + * afterwards if necessary.
> + *
> + * @access private
> + */
> + function _imap_fetch_overview($imap_stream, $sequence, $options)
> + {
> + $overview = @imap_fetch_overview($imap_stream, $sequence, $options);
> + while (list($key, $header) = each($overview)) {
> + # Fix invalid "Date:" headers
> + if (empty($header->date) || (strtotime($header->date) == -1)) {
> + $full_header = explode("\n", imap_fetchheader($imap_stream, $header->uid, $options));
> + $in_received = false;
> + foreach ($full_header as $line) {
> + # Find out whether we are in a "Received:" field
> + if (substr($line, 0, 9) == 'Received:') {
> + $in_received = true;
> + } else {
> + $first_char = substr($line, 0, 1);
> + if (($first_char != " ") && ($first_char != "\t")) {
> + $in_received = false;
> + }
> + }
> +
> + # Extract date from the "Received:" field
> + if ($in_received) {
> + if (($semicolon = strpos($line, ';')) != FALSE) {
> + $candidate = substr($line, $semicolon + 1);
> + } else {
> + $candidate = $line;
> + }
> +
> + $candidate = trim($candidate);
> + if (!empty($candidate) && ($new_date = strtotime($candidate)) != -1) {
> + $overview[$key]->date = $candidate;
> + break; // choose the first date from the top
> + }
> + }
> + }
> + }
> + }
> + return $overview;
> + }
>
> }
>
> --
> Horde developers mailing list - Join the hunt: http://horde.org/bounties/
> Frequently Asked Questions: http://horde.org/faq/
> To unsubscribe, mail: dev-unsubscribe at lists.horde.org
More information about the dev
mailing list