Changeset b8ae99a6 in github for program/lib/imap.inc


Ignore:
Timestamp:
Aug 28, 2009 4:29:46 AM (4 years ago)
Author:
alecpl <alec@…>
Branches:
master, HEAD, courier-fix, dev-browser-capabilities, pdo, release-0.6, release-0.7, release-0.8
Children:
f8a846c
Parents:
16506fb
Message:
  • Fix endless loop on error response for APPEND command (#1486060)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • program/lib/imap.inc

    r7e15422 rb8ae99a6  
    302302 
    303303function iil_ParseResult($string) { 
    304         $a = explode(' ', $string); 
    305         if (count($a) > 2) { 
     304        $a = explode(' ', trim($string)); 
     305        if (count($a) >= 2) { 
    306306                if (strcasecmp($a[1], 'OK') == 0) { 
    307307                        return 0; 
     
    312312                } else if (strcasecmp($a[1], 'BYE') == 0) { 
    313313                        return -3; 
    314                 } 
     314                } 
    315315        } 
    316316        return -4; 
     
    21262126        iil_PutLine($fp, $query); 
    21272127 
    2128         $line = trim(iil_ReadLine($fp, 10000)); 
    2129         return iil_ParseResult($line); 
     2128        $line = trim(iil_ReadLine($fp, 512)); 
     2129        return (iil_ParseResult($line) == 0); 
    21302130} 
    21312131 
     
    21362136        iil_PutLine($fp, $query); 
    21372137     
    2138         $line = trim(iil_ReadLine($fp, 10000)); 
    2139         return iil_ParseResult($line); 
     2138        $line = trim(iil_ReadLine($fp, 512)); 
     2139        return (iil_ParseResult($line) == 0); 
    21402140} 
    21412141 
     
    23722372function iil_C_Append(&$conn, $folder, &$message) { 
    23732373        if (!$folder) { 
    2374                 return false; 
     2374                return false; 
    23752375        } 
    23762376        $fp = $conn->fp; 
    23772377 
    23782378        $message = str_replace("\r", '', $message); 
    2379         $message = str_replace("\n", "\r\n", $message);          
     2379        $message = str_replace("\n", "\r\n", $message); 
    23802380 
    23812381        $len = strlen($message); 
    23822382        if (!$len) { 
    2383                 return false; 
     2383                return false; 
    23842384        } 
    23852385 
    23862386        $request = 'a APPEND "' . iil_Escape($folder) .'" (\\Seen) {' . $len . '}'; 
    2387      
     2387 
    23882388        if (iil_PutLine($fp, $request)) { 
    2389                 $line = iil_ReadLine($fp, 100);          
    2390                 $sent = iil_PutLine($fp, $message); 
     2389                $line = iil_ReadLine($fp, 512); 
     2390 
     2391                $result = (iil_ParseResult($line) == 0); 
     2392                if (!$result) { 
     2393                        $conn->error .= "Cannot write to folder: $line\n"; 
     2394                        return false; 
     2395                } 
     2396 
     2397                iil_PutLine($fp, $message); 
     2398 
    23912399                do { 
    2392                         $line=iil_ReadLine($fp); 
     2400                        $line = iil_ReadLine($fp); 
    23932401                } while (!iil_StartsWith($line, 'a ', true)); 
    23942402         
     
    23962404                if (!$result) { 
    23972405                    $conn->error .= $line . "\n"; 
    2398                 } 
     2406                } 
    23992407                return $result; 
    24002408        } 
     
    24102418     
    24112419        //open message file 
    2412         $in_fp = false;                          
     2420        $in_fp = false; 
    24132421        if (file_exists(realpath($path))) { 
    24142422                $in_fp = fopen($path, 'r'); 
     
    24272435        //send APPEND command 
    24282436        $request    = 'a APPEND "' . iil_Escape($folder) . '" (\\Seen) {' . $len . '}'; 
    2429         $bytes_sent = 0; 
    24302437        if (iil_PutLine($fp, $request)) { 
    2431                 $line = iil_ReadLine($fp, 100); 
    2432                                  
     2438                $line = iil_ReadLine($fp, 512); 
     2439 
     2440                $result = (iil_ParseResult($line) == 0); 
     2441                if (!$result) { 
     2442                        $conn->error .= "Cannot write to folder: $line\n"; 
     2443                        return false; 
     2444                } 
     2445 
    24332446                //send file 
    24342447                while (!feof($in_fp)) { 
    24352448                        $buffer      = fgets($in_fp, 4096); 
    2436                         $bytes_sent += strlen($buffer); 
    24372449                        iil_PutLine($fp, $buffer, false); 
    24382450                } 
     
    24452457                        $line = iil_ReadLine($fp); 
    24462458                } while (!iil_StartsWith($line, 'a ', true)); 
    2447                          
     2459 
    24482460                $result = (iil_ParseResult($line) == 0); 
    24492461                if (!$result) { 
    24502462                    $conn->error .= $line . "\n"; 
    24512463                } 
    2452          
     2464 
    24532465                return $result; 
    24542466        } 
Note: See TracChangeset for help on using the changeset viewer.