- $iRetrieved += $iBufferSize;
- if ($filter) {
- // in case line-endings do not appear at position 78 we adapt the buffersize so we can base64 decode on the fly
- if (!$bBufferSizeAdapted) {
- $i = strpos($sRead,"\n");
- if ($i) {
- ++$i;
- $iFragments = floor($iBufferSize / $i);
- $iNewBufferSize = $iFragments * $i;
- $iRemainder = $iNewBufferSize + $i - $iBufferSize;
- if ($iNewBufferSize == $iBufferSize) {
- $bBufferIsOk = true;
- $iRemainder = 0;
- $iNewBufferSize = $iBufferSize;
- $bBufferSizeAdapted = true;
- }
- if (!$bBufferIsOk && ($iRemainder + $iBufferSize) < $iSize) {
- $sReadRem = fread($imap_stream,$iRemainder);
- } else if (!$bBufferIsOk) {
- $sReadRem = fread($imap_stream,$iSize - $iBufferSize);
- $bFinished = true;
- }
- if (!$sReadRem && $sReadRem !== '') {
- $results = false;
- break;
- }
- $iBufferSize = $iNewBufferSize;
- $bBufferSizeAdapted = true;
- } else {
- $sReadRem = fread($imap_stream,$iSize - $iBufferSize);
- $bFinished = true;
- if (!$sReadRem) {
- $results = false;
- break;
- }
- }
- $sRead .= $sReadRem;
- $iRetrieved += $iRemainder;
- unset($sReadRem);
- }
+ if ($sReadRem) {
+ $sRead = $sReadRem . $sRead;
+ $sReadRem = '';
+ }
+ if (substr($sRead,-1) !== "\n") {
+ $i = strrpos($sRead,"\n");
+ if ($i !== false && $iRetrieved<$iSize) {
+ ++$i;
+ $sReadRem = substr($sRead,$i);
+ $sRead = substr($sRead,0,$i);
+ } else if ($iLength && $iRetrieved<$iSize) { // linelength > received buffer
+ $sReadRem = $sRead;
+ $sRead = '';
+ }
+ }
+ if ($filter && $sRead) {