找回密码
 加入
搜索
查看: 9051|回复: 1

[BUG报告] 无法处理一个 字符串 ,异常退出 [CODE]:-1073741819

  [复制链接]
发表于 2010-9-22 09:16:00 | 显示全部楼层 |阅读模式
本帖最后由 republican 于 2010-9-22 09:51 编辑

本BUG在08 R2(64Bit)系统下100%重现。

出错涉及UDF, _POP3.AU3.

出错猜想: 无法 Handle 包含特殊字符串的 变量。

出错涉及过程:(出错代码在第36行)

Func _Pop3Top($msg, $nb)
        ConsoleWrite($msg &"--------0"&@CRLF )
        If $pop3_IsAuth = 1 Then
                Local $ret
                
                ; Send Top
                $ret = TCPSend ($pop3_socket, "TOP " & $msg & " " & $nb & @CRLF)
                If @error Then
                        SetError($pop3_error_top_refused)
                        Return -1
                EndIf
                $ret = _Pop3WaitForOK()
                If @error Then
                        SetError($pop3_error_no_OK_response)
                        Return -1
                EndIf
                
                $ret = _WaitTcpResponse()
                If @error Then
                        SetError($pop3_error_no_TCP_response)
                        Return -1
                EndIf
                ConsoleWrite($msg &"--------1"&@CRLF )
                ; Downloading until final dot and cariage return.
                While Not StringRegExp($ret, "\r\n\.\r\n")
                        $ret = $ret & _WaitTcpResponse()
                        If @error Then
                                SetError($pop3_error_no_TCP_response)
                                Return -1
                        EndIf
                WEnd
                ConsoleWrite($msg &"--------OK"&@CRLF )
                
                MsgBox(0,"",$ret)

                Return $ret
                
        Else
                SetError($pop3_error_no_auth)
                Return -1
        EndIf
EndFunc   ;==>_Pop3Top



函数调用过程:

For $i = 1 To $uidl[0]
        $Temp=StringRegExp($uidl[$i],'(\d+) (.*)',3)
        If UBound($Temp) = 2 Then
                $MyUID[$i][0]=$Temp[0]
                $MyUID[$i][1]=$Temp[1]
        Else
                $MyUID[$i][0]=$i
                $MyUID[$i][1]="ERROR"
        EndIf
Next
$MyUID[0][0]="0"
$MyUID[0][1]=$uidl[0]
;~ IniWriteSection("MailDB.ini","UID",$MyUID,0)
$WebMailUIDX=IniReadSection("MailDBOld.ini","UID")
_ArrayDelete($WebMailUIDX, 1)
$Test=        _MyArrayContrast($MyUID,$WebMailUIDX)
If $Test[0] <> -1 And $Test[4] <> 0 Then 
        
        MsgBox(0,"提示","您有"&$Test[4]&"封新邮件!")
        
        For $i = $uidl[0] To $uidl[0]-$Test[4]+1 Step -1

                $muti = _Pop3Top ($i, 1)

                MsgBox(0,"标题为",_MailDecode($muti))
        Next
EndIf



出错及排除过程;

1. 出错过程在 Return 一句。


2.到底是不是呢?测试一下,注销此句,结果没事了。


3.直接return不行,试试用二进制吧。好的,没问题。


4.我要的字符串,二进制可不行,转回字符串吧,结果再次出错了。


以上,我想说明的是,AU3可能无法 Handle 此字符串。

程序打包,用户名及密码已被删除,如果您是测试者,请PM我.


本问题应该在NT6 64bit 的系统下都能重现,在32bit系统下则随机出现,非常恼人。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2012-5-15 11:43:05 | 显示全部楼层
是的,在调用IE UDF的时候也会莫名出现这样的情况
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-22 12:17 , Processed in 0.071479 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表