diff options
author | Erich Eckner <git@eckner.net> | 2019-04-06 22:29:43 +0200 |
---|---|---|
committer | Erich Eckner <git@eckner.net> | 2019-04-06 22:29:43 +0200 |
commit | bbcb57bb5fa397ec88734c0c421b10f56d870947 (patch) | |
tree | 4cf34565d5e21131a8a0bf1c76fa73ccd689ac3e | |
parent | a5253b3bc9bc2a0f75db8601346bb9ccdcc26ce2 (diff) | |
download | units-bbcb57bb5fa397ec88734c0c421b10f56d870947.tar.xz |
popimapunit.pas: bugfixes
-rw-r--r-- | popimapunit.pas | 90 |
1 files changed, 64 insertions, 26 deletions
diff --git a/popimapunit.pas b/popimapunit.pas index 5461792..df95c3e 100644 --- a/popimapunit.pas +++ b/popimapunit.pas @@ -139,6 +139,9 @@ var zeit: extended; begin writeString(pr,bef+#10); + {$IFDEF DEBUG} + writeln(stderr, '>> ' + bef); + {$ENDIF} zeit:=now+timeOut/24/60/60; ausg:=''; @@ -147,6 +150,9 @@ begin if pos(ende,ausg)>0 then begin result:=baeOk; + {$IFDEF DEBUG} + writeln(stderr, '<< ' + copy(ausg, 1, 80)); + {$ENDIF} exit; end; @@ -177,6 +183,9 @@ var const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; begin + {$IFDEF DEBUG} + writeln(stderr, '>> ' + bef); + {$ENDIF} id:=''; for i:=0 to 15 do id:=id + chars[random(length(chars))]; @@ -190,6 +199,9 @@ begin if pos(id+' OK',ausg)>0 then begin result:=baeOk; delete(ausg, pos(id+' OK',ausg), length(ausg)); + {$IFDEF DEBUG} + writeln(stderr, '<< ' + copy(ausg, 1, 80)); + {$ENDIF} exit; end; @@ -390,7 +402,7 @@ begin if assigned(pr) then begin case _mailProtocol of - mpPop: begin + mpPop: for i:=0 to length(_lIds)-1 do begin case popBefehlAusfuehren(pr,'DELE '+intToStr(_lIds[i]),_besitzer.timeOut) of baeTimeOut: exit; @@ -401,22 +413,7 @@ begin end{of case}; if beenden then exit; - for j:=length(_nachrichten)-1 downto 0 do - if _nachrichten[j].id=_lIds[i] then begin - _nachrichten[j].free; - for k:=j+1 to length(_nachrichten)-1 do - _nachrichten[k-1]:=_nachrichten[k]; - setLength(_nachrichten,length(_nachrichten)-1); - break; - end - else if j=0 then begin - pr.free; - pr:=nil; - writeln(stderr,'DELE '+intToStr(_lIds[i])+' fehlgeschlagen - ich habe die Nachricht nicht bei mir gefunden!'); - exit; - end; end; - end; mpImap: begin s:=''; for i:=0 to length(_lIds)-1 do @@ -433,11 +430,28 @@ begin end; end{of case}; + for i:=0 to length(_lIds)-1 do begin + for j:=length(_nachrichten)-1 downto 0 do + if _nachrichten[j].id=_lIds[i] then begin + _nachrichten[j].free; + for k:=j+1 to length(_nachrichten)-1 do + _nachrichten[k-1]:=_nachrichten[k]; + setLength(_nachrichten,length(_nachrichten)-1); + break; + end + else if j=0 then begin + pr.free; + pr:=nil; + writeln(stderr,'DELE '+intToStr(_lIds[i])+' fehlgeschlagen - ich habe die Nachricht nicht bei mir gefunden!'); + exit; + end; + end; + setLength(_lIds,0); esGibtArbeit:=false; end; - synchronize(@datenRausGeben) + synchronize(@datenRausGeben); end; function tPopImapThread.doLogin(pr: tProcess): tBefehlAusfuehrenErgebnis; @@ -632,25 +646,49 @@ begin break; if beenden then break; - if not startetMit('* '+intToStr(_nachrichten[i].id)+' FETCH (BODY[HEADER] {',buf,false) then + if not startetMit('* '+intToStr(_nachrichten[i].id)+' FETCH (BODY[HEADER] {',buf,false) then begin + writeln(stderr, 'syntax-Fehler: Antwort begann nicht mit "* '+intToStr(_nachrichten[i].id)+' FETCH (BODY[HEADER] {"'); break; - _nachrichten[i].groesze:=strToInt(erstesArgument(buf,'}',false)); - if not startetMit(#13#10,buf,false) then + end; + s:=erstesArgument(buf,'}',false); + try + _nachrichten[i].groesze:=strToInt(s); + except + writeln(stderr, 'syntax-Fehler: "'+s+'" (1. Größe) ist kein Integer'); break; + end; + if not startetMit(#13#10,buf,false) then begin + writeln(stderr, 'syntax-Fehler: Zwischen-"#13#10" fehlt'); + break; + end; _nachrichten[i].text:=copy(buf,1,_nachrichten[i].groesze); delete(buf,1,_nachrichten[i].groesze); - if not startetMit(' BODY[TEXT] {',buf,false) then + if not startetMit(' BODY[TEXT] {',buf,false) then begin + writeln(stderr, 'syntax-Fehler: Zwischen-" BODY[TEXT] {" fehlt'); + break; + end; + s:=erstesArgument(buf,'}',false); + try + j:=strToInt(s); + except + writeln(stderr, 'syntax-Fehler: "'+s+'" (2. Größe) ist kein Integer'); break; - j:=strToInt(erstesArgument(buf,'}',false)); - if not startetMit(#13#10,buf,false) then + end; + if not startetMit(#13#10,buf,false) then begin + writeln(stderr, 'syntax-Fehler: 2. Zwischen-"#13#10" fehlt'); break; + end; _nachrichten[i].text:=_nachrichten[i].text + #10 + copy(buf,1,j); delete(buf,1,j); _nachrichten[i].groesze:=_nachrichten[i].groesze + j; - if not startetMit(')',buf) then + if not startetMit(')',buf) then begin + writeln(stderr, 'syntax-Fehler: End-")" fehlt'); break; - if buf<>'' then + end; + if (buf<>'') and not startetMit('* '+intToStr(_nachrichten[i].id)+' FETCH ',buf) then begin + writeln(stderr, 'syntax Fehler: zu lange Antwort: "'+buf+'" übrig'); break; + end; end; end{of case}; for j:=_nachrichten[i].count-1 downto 1 do @@ -671,7 +709,7 @@ begin continue; zeit:=now; - for i:=0 to 5 do begin + for i:=0 to 5*byte(_mailProtocol = mpPop) do begin zeit:=now+1/24/60/6; if doNOOP(pr)<>baeOk then break; |