]> git.meshlink.io Git - catta/blobdiff - socket.c
fix some memory corruption bugs
[catta] / socket.c
index 1887e1d932eba6694e339551b77691b2d683c1fe..54433d6e026042fd54cbf3561dacc73c1913cb43 100644 (file)
--- a/socket.c
+++ b/socket.c
@@ -252,7 +252,7 @@ gint flx_send_dns_packet_ipv4(gint fd, gint interface, flxDnsPacket *p) {
     mdns_mcast_group_ipv4(&sa);
 
     memset(&io, 0, sizeof(io));
-    io.iov_base = p->data;
+    io.iov_base = FLX_DNS_PACKET_DATA(p);
     io.iov_len = p->size;
 
     memset(cmsg_data, 0, sizeof(cmsg_data));
@@ -292,7 +292,7 @@ gint flx_send_dns_packet_ipv6(gint fd, gint interface, flxDnsPacket *p) {
     mdns_mcast_group_ipv6(&sa);
 
     memset(&io, 0, sizeof(io));
-    io.iov_base = p->data;
+    io.iov_base = FLX_DNS_PACKET_DATA(p);
     io.iov_len = p->size;
 
     memset(cmsg_data, 0, sizeof(cmsg_data));
@@ -330,10 +330,10 @@ flxDnsPacket* flx_recv_dns_packet_ipv4(gint fd, struct sockaddr_in *ret_sa, gint
     g_assert(ret_iface);
     g_assert(ret_ttl);
 
-    p = flx_dns_packet_new();
+    p = flx_dns_packet_new(0);
 
-    io.iov_base = p->data;
-    io.iov_len = sizeof(p->data);
+    io.iov_base = FLX_DNS_PACKET_DATA(p);
+    io.iov_len = p->max_size;
     
     memset(&msg, 0, sizeof(msg));
     msg.msg_name = ret_sa;
@@ -376,7 +376,7 @@ fail:
 }
 
 flxDnsPacket* flx_recv_dns_packet_ipv6(gint fd, struct sockaddr_in6 *ret_sa, gint *ret_iface, guint8* ret_ttl) {
-    flxDnsPacket *p= NULL;
+    flxDnsPacket *p = NULL;
     struct msghdr msg;
     struct iovec io;
     uint8_t aux[64];
@@ -389,10 +389,10 @@ flxDnsPacket* flx_recv_dns_packet_ipv6(gint fd, struct sockaddr_in6 *ret_sa, gin
     g_assert(ret_iface);
     g_assert(ret_ttl);
 
-    p = flx_dns_packet_new();
+    p = flx_dns_packet_new(0);
 
-    io.iov_base = p->data;
-    io.iov_len = sizeof(p->data);
+    io.iov_base = FLX_DNS_PACKET_DATA(p);
+    io.iov_len = p->max_size;
     
     memset(&msg, 0, sizeof(msg));
     msg.msg_name = ret_sa;
@@ -410,8 +410,6 @@ flxDnsPacket* flx_recv_dns_packet_ipv6(gint fd, struct sockaddr_in6 *ret_sa, gin
     
     *ret_ttl = 0;
 
-    g_message("pre");
-    
     for (cmsg = CMSG_FIRSTHDR(&msg); cmsg != NULL; cmsg = CMSG_NXTHDR(&msg, cmsg)) {
         if (cmsg->cmsg_level == SOL_IPV6 && cmsg->cmsg_type == IPV6_HOPLIMIT) {
             *ret_ttl = *(uint8_t *) CMSG_DATA(cmsg);
@@ -422,13 +420,8 @@ flxDnsPacket* flx_recv_dns_packet_ipv6(gint fd, struct sockaddr_in6 *ret_sa, gin
             *ret_iface = ((struct in6_pktinfo*) CMSG_DATA(cmsg))->ipi6_ifindex;
             found_iface = TRUE;
         }
-
-        g_message("-- %u -- %u\n", cmsg->cmsg_level, cmsg->cmsg_type);
     }
 
-    g_message("post");
-
     g_assert(found_iface);
     g_assert(found_ttl);