2011-08-19 11 views
2

私のアプリケーションが何らかの不明な理由でlibcurlを使用してクラッシュしました。 GuardMallocを使用している間、同じコードの多くのループの後に自発的にクラッシュしました。OSX(10.6.8)でlibcurl(7.19,7)が_mdns_query_callbackでクラッシュする

libcurlのバージョン情報:

カール7.19.7(ユニバーサル・りんご・darwin10.0)のlibcurl/7.19.7のOpenSSL/0.9.8r のzlib/1.2.3プロトコル:TFTPのftpのtelnetのdictのLDAP HTTPファイルのhttps FTPS 特長:GSS-ネゴシエートのIPv6については、largefile NTLM SSL

libzをソースコード:ここで

char * process_url(char * url,char * post){ 
    CURLcode res; 
    curl_easy_reset(curl); 
    if(curl){ 
     curl_easy_setopt(curl, CURLOPT_URL, url); 
     curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10); 
     curl_easy_setopt(curl, CURLOPT_POSTREDIR,CURL_REDIR_POST_ALL); 
     curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION,1L); 
     curl_easy_setopt(curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.107 Safari/535.1"); 
     curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION,write_to_string); 
     curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); 
     curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); 
     if (post) { 
      curl_easy_setopt(curl, CURLOPT_POSTFIELDS, post); 
     } 
     ResponseStruct result; 
     result.response = malloc(sizeof(char)); 
     result.response[0] = '\0'; 
     result.length = 1; 
     curl_easy_setopt(curl, CURLOPT_WRITEDATA, &result); 
     res = curl_easy_perform(curl); //CRASHED HERE 
     if (res) { 
      printf("CURL FAILED WITH ERROR CODE %i\n",(int)res); 
      return NULL; 
     } 
     sec_sleep(1); //Prevent passing float limit. 
     return result.response; 
    } 
    return NULL; 
} 

関数スタックです。

#0 0x7fff869d22ae in _mdns_query_callback 
#1 0x7fff869bfc29 in handle_query_response 
#2 0x7fff869bf08b in DNSServiceProcessResult 
#3 0x7fff869d1a71 in _mdns_query_mDNSResponder 
#4 0x7fff869d0c61 in _mdns_search 
#5 0x7fff869cfffc in _mdns_addrinfo 
#6 0x7fff869cf059 in search_addrinfo 
#7 0x7fff869cea7a in si_addrinfo 
#8 0x7fff869ce48d in getaddrinfo 
#9 0x7fff831695fc in Curl_getaddrinfo_ex 
#10 0x7fff83164a3d in Curl_getaddrinfo 
#11 0x7fff8313dda3 in Curl_resolv 
#12 0x7fff8313dfb6 in Curl_resolv_timeout 
#13 0x7fff8314b225 in resolve_server 
#14 0x7fff83150aaf in create_conn 
#15 0x7fff83150c08 in Curl_connect 
#16 0x7fff8315b817 in Curl_perform 
#17 0x100001126 in process_url at main.c:90 
#18 0x1000013f7 in cancel_outstanding_order at main.c:158 
#19 0x100002aac in main at main.c:554 

プログラムで使用するスレッドはありません。私は自分のデータintをデバッガでチェックしても問題ありません。 libcurlは何か好きではありません。解決策はありますか?

ありがとうございます。

+0

最も一般的な問題は、渡されたURLに問題があることです。どのようにそれを生成するのですか? –

+0

URLはhttps://api-test.tradehill.com/APIv1/USD/GetBalance –

答えて

1

getaddrinfo()は、オペレーティングシステム(OS X)が提供するlibc呼び出しです。

libcurlはクラッシュしない多くのオペレーティングシステムで全く同じ名前解決機能を使用しているため、問題は本当にOS Xであり、libcurlではないことを示しています。

このバグは報告されていません。本当にOS Xのバグだと奇妙ですが、libcurlで報告されたこともありませんでした。可能であれば、あなたのアプリケーションに問題があることを示唆しているでしょう...

スタンドアロンのサンプルプログラムでこの問題を繰り返すことができれば、それをcurlプロジェクトに提供し、デバッグに役立ててくださいそれはアイデアかもしれません。あなたが小さなプログラムでそれを繰り返すことができない場合は、問題があなたのアプリケーションによって引き起こされていることを示すもう一つの兆候になります!

+0

です。小規模なプログラムでテストし、エラーが発生するかどうかを確認します。何かが起これば私はあなたに戻ってきます。ありがとう。 –

関連する問題