用戶:Antigng-bot/錯誤
外觀
這個機械人沒有使用任何現成的http庫,如果不是用了ssl反向代理,我可能還要考慮把openssl弄進去。所以想談有多少功能是不現實的,保證不出錯就足夠了。
這裏列出的只是影響維基百科頁面的錯誤,實際上Antigng-bot犯的錯誤比所列的十倍還要多,造成死機的也不少。
原因是頁面太長了,原先採用定長數組存儲頁面源碼的方法行不通了。
解決方法:使用新的結構存儲頁面。
2015/9/29
[編輯]大量增刪內容,產生錯誤的原因是:
while(sst=recv(s,g,BUFFERMAX,0))
{
if(sst>0) hputs(g,BUFFERMAX,result);
}
recv函數不會加入\0,因而多次循環之後可能會重複寫入數據。(想像一下第一次循環寫入xxxxxxxx,第二次循環寫入aaaaa,則result不是xxxxxxxxaaaaa,而是xxxxxxxxaaaaaxxx)。
解決方法:if(sst>0) hputs(g,BUFFERMAX,result);替換為if(sst>0){g[sst]=0;hputs(g,BUFFERMAX,result);}
2015/9/25
[編輯]線程安全問題,子線程處理某個標題下的問題條目的同時,主線程在從搜索結果中獲取、修改標題,導致往某一個條目中提交的新內容是另一個條目的內容。
解決方法:顯而易見
2015/9/23
[編輯]忽略了fprintf與fputs的差異,見WP:VPO。
解決方法:自行補上\n。
2015/9/20
[編輯]由於程序只有檢出內鏈的部分,而缺少比較的部分。本來只想移除向某個條目的連結,結果把條目中所有的內鏈都拿走了。
解決方法:加上比較的代碼。
2015/9/12
[編輯]由於太過相信搜索結果,沒有檢查條目內容直接prependtext={{subst:veil}}。
解決方法:檢查一下再決定是否編輯。
2015/9/10
[編輯]api以format=xml形式返回的頁面源碼,&都被換成 ,沒有轉回來就提交了。
解決方法:
- 自行轉換&、<、>、"之類的符號
- 用index.php?action=raw代替api