From eacc448f6c7525cdfa725cea497d5d4e1864213b Mon Sep 17 00:00:00 2001 From: Jianqiu Zhang Date: Tue, 5 Jan 2016 09:12:42 +0800 Subject: [PATCH] wpcap: Fix crash on pcap_loop. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jianqiu Zhang Signed-off-by: André Hentschel Signed-off-by: Alexandre Julliard --- dlls/wpcap/wpcap.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/dlls/wpcap/wpcap.c b/dlls/wpcap/wpcap.c index ae9e4823584..b770067b503 100644 --- a/dlls/wpcap/wpcap.c +++ b/dlls/wpcap/wpcap.c @@ -95,7 +95,6 @@ static void pcap_handler_callback(u_char *user_data, const struct pcap_pkthdr *h TRACE("(%p %p %p)\n", user_data, h, p); pcb = (PCAP_HANDLER_CALLBACK *)user_data; pcb->pfn_cb(pcb->user_data, h, p); - HeapFree(GetProcessHeap(), 0, pcb); TRACE("Callback COMPLETED\n"); } @@ -107,11 +106,10 @@ int CDECL wine_pcap_dispatch(pcap_t *p, int cnt, if (callback) { - PCAP_HANDLER_CALLBACK *pcb; - pcb = HeapAlloc(GetProcessHeap(), 0, sizeof(PCAP_HANDLER_CALLBACK)); - pcb->pfn_cb = callback; - pcb->user_data = user; - return pcap_dispatch(p, cnt, pcap_handler_callback, (unsigned char*)pcb); + PCAP_HANDLER_CALLBACK pcb; + pcb.pfn_cb = callback; + pcb.user_data = user; + return pcap_dispatch(p, cnt, pcap_handler_callback, (unsigned char *)&pcb); } return pcap_dispatch(p, cnt, NULL, user); @@ -200,11 +198,10 @@ int CDECL wine_pcap_loop(pcap_t *p, int cnt, if (callback) { - PCAP_HANDLER_CALLBACK *pcb; - pcb = HeapAlloc(GetProcessHeap(), 0, sizeof(PCAP_HANDLER_CALLBACK)); - pcb->pfn_cb = callback; - pcb->user_data = user; - return pcap_loop(p, cnt, pcap_handler_callback, (unsigned char*)pcb); + PCAP_HANDLER_CALLBACK pcb; + pcb.pfn_cb = callback; + pcb.user_data = user; + return pcap_loop(p, cnt, pcap_handler_callback, (unsigned char *)&pcb); } return pcap_loop(p, cnt, NULL, user);