gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r18422 - libmwmodem/src/main


From: gnunet
Subject: [GNUnet-SVN] r18422 - libmwmodem/src/main
Date: Thu, 1 Dec 2011 15:17:49 +0100

Author: ruppa
Date: 2011-12-01 15:17:49 +0100 (Thu, 01 Dec 2011)
New Revision: 18422

Modified:
   libmwmodem/src/main/libmwmodem.c
Log:


Modified: libmwmodem/src/main/libmwmodem.c
===================================================================
--- libmwmodem/src/main/libmwmodem.c    2011-12-01 13:05:50 UTC (rev 18421)
+++ libmwmodem/src/main/libmwmodem.c    2011-12-01 14:17:49 UTC (rev 18422)
@@ -26,6 +26,7 @@
 #include <string.h>
 #include <sys/ioctl.h>
 #include <errno.h>
+#include <unistd.h>
 
 // TESTCASE!???
 
@@ -40,18 +41,24 @@
        if ( (af_int!=AF_INET) && (af_int!=AF_INET6) )
        {
                fprintf(stderr,
-                       "Error, expected af_int to be AF_INET or AF_INET6!"); 
+                       "Error: expected af_int to be AF_INET or AF_INET6!\n");
                return NULL;
        }
 
-       context = malloc(sizeof(struct MWMODEM_Context)); // CHECK RETURN VALUE!
+       context = malloc(sizeof(struct MWMODEM_Context));
+       if(NULL == context)
+       {
+               fprintf(stderr,
+                               "Error: failed to malloc space for structure 
MWMODEM_Context: %s\n", strerror(errno));
+               return NULL;
+       }
        context->cb = cb;
 
        context->socket = socket(af_int, SOCK_DGRAM, IPPROTO_UDP);
 
        if (-1 == context->socket)
        {
-               fprintf(stderr, "Error: failed to create socket: %s", 
strerror(errno));
+               fprintf(stderr, "Error: failed to create socket: %s\n", 
strerror(errno));
                free (context);
                return NULL;
        }       
@@ -61,9 +68,11 @@
 
                memset (&address4, 0, sizeof(address4));
                address4.sin_family = af_int;
-#if HAVE_SOCKADDR_IN_SIN_LEN
+
+               #if HAVE_SOCKADDR_IN_SIN_LEN
                address4.sin_len = (u_char) sizeof (struct sockaddr_in);
-#endif
+               #endif
+
        if (port == 0)
                        {
                                address4.sin_port = htons(MWMODEM_PORT);
@@ -80,9 +89,11 @@
 
                memset( &address6, 0, sizeof (address6));
                address6.sin6_family = af_int;
-#if HAVE_SOCKADDR_IN_SIN_LEN
+
+               #if HAVE_SOCKADDR_IN_SIN_LEN
                address6.sin_len = (u_char) sizeof (struct sockaddr_in6);
-#endif
+               #endif
+
                if (port == 0)
                        {
                                address6.sin6_port = htons(MWMODEM_PORT);
@@ -112,17 +123,6 @@
        return fc->socket;
 }
 
-
-static uint32_t charArrayToASCIICode (const char *byte4)
-{
-       uint32_t val;
-       val = (uint32_t)byte4[0]
-                    |val + (uint32_t)byte4[1] << 8
-                    |val + (uint32_t)byte4[2] << 16
-                    |val +(uint32_t)byte4[3] << 24;
-       return val;
-}
-
 //channel information at the udp package
 struct MWChannel {
   uint8_t index;
@@ -144,67 +144,65 @@
 
 void MWMODEM_run (struct MWMODEM_Context *fc)
 {
-       struct MWMODEM_Package *package;
+       struct MWMODEM_Package package;
        char *buffer;
-       char byte4[4];
+       char *ptr;
        struct MWMODEM_Channel *list;
-       struct sockaddr *from;
-       socklen_t *from_length;
+       struct sockaddr from;
+       socklen_t from_length;
        struct MWMODEM_Channel channel;
        struct MWHeader *hdr;
        struct MWChannel *chl;
        int package_length;
 
-       ioctl(fc->socket, FIONREAD, &package_length); // CHECK RETURN VALUE!
+       if (-1==ioctl(fc->socket, FIONREAD, &package_length))
+       {
+               fprintf(stderr, "Error: failure of ioctl to receive length of 
next UDP package %s\n",
+                                strerror (errno));
+               return;
+       }
 
        if (package_length==0)
        {
-         fprintf(stderr, "Error no message to receive!"); // READ UP on IOCTL 
FIONREAD SECURITY PROBLEMS! (Denial-of-Service)
+         fprintf(stderr, "Error: no message to receive!"); // READ UP on IOCTL 
FIONREAD SECURITY PROBLEMS! (Denial-of-Service)
                return;
        }
-
-       package = malloc(sizeof(struct MWMODEM_Package)); // NO MALLOC! Stack 
allocate!
-       buffer = malloc(package_length); // NO MALLOC! Stack allocate!
        
-       // man recvfrom! from/fromlength NOT allocated by recvfrom!!!
-       if (recvfrom(fc->socket, buffer, sizeof(buffer), 0, from, 
from_length)==-1)
+       buffer = malloc(package_length);
+
+       if (-1==recvfrom(fc->socket, buffer, sizeof(buffer), 0, &from, 
&from_length))
        {
-               fprintf(stderr, "Error no message received!");
-               free (package);
-               free (buffer);
+               fprintf(stderr, "Error: no message received!");
                return;
        }
-       free(from); // free uninitialized variable!
-       free(from_length);  // free uninitialized variable!
 
        hdr = (struct MWHeader*) buffer;
 
        if (1!=1)//TODO deklination der Erkennungsmerkmale der Message
        {
-         printf("No MWModem compatible message received!"); // fprintf 
(stderr!!!
+         fprintf(stderr, "Error: no MWModem compatible message received!");
                free(hdr); 
-               free(package);
-               free(buffer); // double-free! (hdr == buffer)
                return;
        }
        else
        {
-           package->header = ntohl(hdr->header);
+           package.header = ntohl(hdr->header);
            unsigned long long nstime = ntohl(hdr->time) * 
MWMODWM_TACT_NANO_SEC;
-           package->time.tv_nsec = nstime % (1000 * 1000 * 1000);
-           package->time.tv_sec = nstime / (1000 * 1000 * 1000);
-           package->symbolrate = ntohl(hdr->symbolrate);
-           package->num_channels = (uint8_t) hdr->channelmax;
+           package.time.tv_nsec = nstime % (1000 * 1000 * 1000);
+           package.time.tv_sec = nstime / (1000 * 1000 * 1000);
+           package.symbolrate = ntohl(hdr->symbolrate);
+           package.num_channels = (uint8_t) hdr->channelmax;
 
-               struct MWMODEM_Channel list2[package->num_channels];
+               struct MWMODEM_Channel list2[package.num_channels];
                list = list2;
 
-               int i, currentBufferZelle; // signed or unsigned int?
+               unsigned int i, currentBufferZelle;
                currentBufferZelle = 13;
-               for(i=0;i<=package->num_channels; i++)
+               for(i=0;i<=package.num_channels; i++)
                {
+                       ptr = &buffer[currentBufferZelle];
 
-                 chl = (struct MWChannel *) &buffer[currentBufferZelle]; // 
later: bus errors on SPARC architectures
+                       chl = (struct MWChannel *) ptr; // later: bus errors on 
SPARC architectures
 
                        if(buffer[currentBufferZelle]==i)
                        {
@@ -217,10 +215,8 @@
                                else
                                {
                                        fprintf(stderr, "Error no correct 
satellite modcode!");
-                                       free(list); // quadruple-free 
uninitialized crash me now!
+                                       free(list);
                                        free(buffer);
-                                       free(hdr);
-                                       free(chl);
                                        return;
                                }
 
@@ -237,13 +233,13 @@
                }
        }
        
-       package->channel = list;
+       package.channel = list;
 
-       fc->cb(fc->cls, package);
+       (*fc->cb)(fc->cls, &package);
 }
 
 void MWMODEM_free (struct MWMODEM_Context *fc)
 {
-        (void) close(fc->socket);
+    (void) close(fc->socket);
        free(fc);
 }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]