clq
    
    
    
		
        浏览(2) + 
        2006-12-01 21:36:44 发表
        
编辑
         
        
        
        
        关键字: 
        
 
        
        
        
        
                
        因为历史的原因兄弟我一直在使用 mail2000 控件,不过这个控件可真是满身bug,兄弟我是加了很多修改的.本来我应该回馈给 mail2000 邮件列表/社区 但它的人太少,俺的英文又没过4级,这个...这个...信心不足够.暂时贴在这里吧.英文好的兄弟请帮忙转贴吧!
        
        
        
        		
		        
                
                
     
    
 
	
	
     
    
       
    
    clq
    
    
    
    
    
    		    
    
          
              
    	mail2000 对一行超长的解码是会崩溃的,因为它先假设了一行不超过80个字符!没错,协议是这样规定的,但有sb发超过这个长度的怎么办?内存访问异常呀!我的修改如下:
      while nPos >= 0 do
      begin
        DataLine(Data, DecoLine, nPos);
        //clq del 奇怪 132 是怎么来的//GetMem(Buffer, 132);
        //这样肯定是错的,应该先分配足够的内存//它可能先假设了每行的字符不能大于多少
        //GetMem(Buffer, 132);
        GetMem(Buffer, Length(DecoLine)+1);//给结束符一个位置
        //clq end;
        Size := DecodeLineBASE64(TrimSpace(DecoLine), Buffer);
        Buffer[Size] := #0;//clq add//参见对 'B': 我解码
        if Size > 0 then
          FDecoded.Write(Buffer^, Size);
        FreeMem(Buffer);
      end;
大家只要查找其中的 132 就可以了.
这是 base64 编码的,还有另外一个.如下:
        while nPos >= 0 do
        begin
          DataLine(Data, DecoLine, nPos);
          //clqGetMem(Buffer, 80);
          GetMem(Buffer, length(DecoLine));//clq//参见 'U': 形式的解码//不能假设每行只有 80 个字符
          Size := DecodeLineUUCODE(TrimSpace(DecoLine), Buffer);
          FDecoded.Write(Buffer^, Size);
          FreeMem(Buffer);
        end;
查找其中的 80 就行了,它假设每行不超过 80 个字符.......   :(
    
    
     
 
	 
	
    NEWBT官方QQ群1: 276678893
    可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
    但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
    验证问题说明申请入群原因即可.