Added patches to fix several issues in wpcap.

This commit is contained in:
Sebastian Lackner
2016-01-14 08:33:09 +01:00
parent 7b0d10f1f4
commit a82ee1887f
6 changed files with 182 additions and 31 deletions

View File

@@ -0,0 +1,51 @@
From 9e5dd79c03afddd6a3d327b33cef358b849e891d Mon Sep 17 00:00:00 2001
From: Jianqiu Zhang <zhangjianqiu_133@yeah.net>
Date: Thu, 7 Jan 2016 16:33:34 +0800
Subject: wpcap: Implement pcap_dump_open and pcap_dump
Signed-off-by: Jianqiu Zhang <zhangjianqiu_133@yeah.net>
---
dlls/wpcap/wpcap.c | 10 ++++++++++
dlls/wpcap/wpcap.spec | 4 ++--
2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/dlls/wpcap/wpcap.c b/dlls/wpcap/wpcap.c
index ae9e482..da911c7 100644
--- a/dlls/wpcap/wpcap.c
+++ b/dlls/wpcap/wpcap.c
@@ -339,3 +339,13 @@ int CDECL wine_wsockinit(void)
if (WSAStartup(MAKEWORD(1,1), &wsadata)) return -1;
return 0;
}
+
+pcap_dumper_t* CDECL wine_pcap_dump_open(pcap_t *p, const char *fname)
+{
+ return pcap_dump_open(p, fname);
+}
+
+void CDECL wine_pcap_dump(u_char *user, const struct pcap_pkthdr *h, const u_char *sp)
+{
+ return pcap_dump(user, h, sp);
+}
diff --git a/dlls/wpcap/wpcap.spec b/dlls/wpcap/wpcap.spec
index 0e1e208..cf2ed43 100644
--- a/dlls/wpcap/wpcap.spec
+++ b/dlls/wpcap/wpcap.spec
@@ -16,12 +16,12 @@
@ cdecl pcap_datalink_val_to_description(long) wine_pcap_datalink_val_to_description
@ cdecl pcap_datalink_val_to_name(long) wine_pcap_datalink_val_to_name
@ cdecl pcap_dispatch(ptr long ptr ptr) wine_pcap_dispatch
-@ stub pcap_dump
+@ cdecl pcap_dump(ptr ptr str) wine_pcap_dump
@ stub pcap_dump_close
@ stub pcap_dump_file
@ stub pcap_dump_flush
@ stub pcap_dump_ftell
-@ stub pcap_dump_open
+@ cdecl pcap_dump_open(ptr str) wine_pcap_dump_open
@ stub pcap_file
@ stub pcap_fileno
@ cdecl pcap_findalldevs(ptr ptr) wine_pcap_findalldevs
--
2.6.4

View File

@@ -0,0 +1,57 @@
From b20a7a0ed29c40ad50c0e43b1f3d1cf3558f492e Mon Sep 17 00:00:00 2001
From: Jianqiu Zhang <zhangjianqiu_133@yeah.net>
Date: Thu, 7 Jan 2016 16:34:17 +0800
Subject: wpcap: Fix crash on pcap_loop
Signed-off-by: Jianqiu Zhang <zhangjianqiu_133@yeah.net>
---
dlls/wpcap/wpcap.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/dlls/wpcap/wpcap.c b/dlls/wpcap/wpcap.c
index da911c7..44e8c2a 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");
}
@@ -108,10 +107,14 @@ int CDECL wine_pcap_dispatch(pcap_t *p, int cnt,
if (callback)
{
PCAP_HANDLER_CALLBACK *pcb;
+ int res;
+
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);
+ res = pcap_dispatch(p, cnt, pcap_handler_callback, (unsigned char *)pcb);
+ HeapFree(GetProcessHeap(), 0, pcb);
+ return res;
}
return pcap_dispatch(p, cnt, NULL, user);
@@ -201,10 +204,14 @@ int CDECL wine_pcap_loop(pcap_t *p, int cnt,
if (callback)
{
PCAP_HANDLER_CALLBACK *pcb;
+ int res;
+
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);
+ res = pcap_loop(p, cnt, pcap_handler_callback, (unsigned char *)pcb);
+ HeapFree(GetProcessHeap(), 0, pcb);
+ return res;
}
return pcap_loop(p, cnt, NULL, user);
--
2.6.4

View File

@@ -0,0 +1,2 @@
Fixes: Implement pcap_dump_open and pcap_dump
Fixes: Fix possible crash in pcap_loop