Jianqiu Zhang : wpcap: Fix crash on pcap_loop.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Feb 16 09:54:58 CST 2016


Module: wine
Branch: master
Commit: eacc448f6c7525cdfa725cea497d5d4e1864213b
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=eacc448f6c7525cdfa725cea497d5d4e1864213b

Author: Jianqiu Zhang <zhangjianqiu_133 at yeah.net>
Date:   Tue Jan  5 09:12:42 2016 +0800

wpcap: Fix crash on pcap_loop.

Signed-off-by: Jianqiu Zhang <zhangjianqiu_133 at yeah.net>
Signed-off-by: André Hentschel <nerv at dawncrow.de>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 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 ae9e482..b770067 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);




More information about the wine-cvs mailing list