[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r18417 - in libmwmodem: . src/main
From: |
gnunet |
Subject: |
[GNUnet-SVN] r18417 - in libmwmodem: . src/main |
Date: |
Thu, 1 Dec 2011 13:02:04 +0100 |
Author: grothoff
Date: 2011-12-01 13:02:04 +0100 (Thu, 01 Dec 2011)
New Revision: 18417
Modified:
libmwmodem/configure.ac
libmwmodem/src/main/libmwmodem.c
Log:
comments
Modified: libmwmodem/configure.ac
===================================================================
--- libmwmodem/configure.ac 2011-12-01 11:33:37 UTC (rev 18416)
+++ libmwmodem/configure.ac 2011-12-01 12:02:04 UTC (rev 18417)
@@ -21,6 +21,17 @@
AC_TYPE_UINT8_T
AC_PROG_LIBTOOL
+AC_CHECK_MEMBER([struct sockaddr_in.sin_len],
+ [ AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [Do we have sockaddr_in.sin_len?])
+ ],
+ [],
+ [
+ #include <sys/types.h>
+ #include <sys/socket.h>
+ #include <netinet/in.h>
+ ])
+
+
AC_LIBTOOL_WIN32_DLL
AC_CONFIG_FILES([
Modified: libmwmodem/src/main/libmwmodem.c
===================================================================
--- libmwmodem/src/main/libmwmodem.c 2011-12-01 11:33:37 UTC (rev 18416)
+++ libmwmodem/src/main/libmwmodem.c 2011-12-01 12:02:04 UTC (rev 18417)
@@ -25,19 +25,23 @@
#include <netinet/in.h>
#include <string.h>
#include <sys/ioctl.h>
+#include <errno.h>
+// TESTCASE!???
+
struct MWMODEM_Context * MWMODEM_init (uint16_t port, int af_int,
MWMODEM_InformationCallback *cb, void *cb_cls)
{
struct MWMODEM_Context *context;
const struct sockaddr *address;
struct sockaddr_in address4;
struct sockaddr_in6 address6;
+ socklen_t alen;
if ( (af_int!=AF_INET) && (af_int!=AF_INET6) )
{
fprintf(stderr,
- "Error no correct AF_INET or AF_INET6 value!");
- return;
+ "Error, expected af_int to be AF_INET or AF_INET6!");
+ return NULL;
}
context = malloc(sizeof(struct MWMODEM_Context)); // CHECK RETURN VALUE!
@@ -47,9 +51,9 @@
if (-1 == context->socket)
{
- fprintf(stderr, "Error no socket created: %s", strerror(0));
+ fprintf(stderr, "Error: failed to create socket: %s",
strerror(errno));
free (context);
- return;
+ return NULL;
}
if (af_int==AF_INET)
@@ -57,7 +61,10 @@
memset (&address4, 0, sizeof(address4));
address4.sin_family = af_int;
- if (port == 0)
+#if HAVE_SOCKADDR_IN_SIN_LEN
+ address4.sin_len = (u_char) sizeof (struct sockaddr_in);
+#endif
+ if (port == 0)
{
address4.sin_port = htons(MWMODEM_PORT);
}
@@ -66,12 +73,16 @@
address4.sin_port = htons(port);
}
address =(const struct sockaddr *) &address4;
+ alen = sizeof (address4);
}
else
{
memset( &address6, 0, sizeof (address6));
address6.sin6_family = af_int;
+#if HAVE_SOCKADDR_IN_SIN_LEN
+ address6.sin_len = (u_char) sizeof (struct sockaddr_in6);
+#endif
if (port == 0)
{
address6.sin6_port = htons(MWMODEM_PORT);
@@ -81,13 +92,16 @@
address6.sin6_port = htons(port);
}
address =(const struct sockaddr *) &address6;
+ alen = sizeof (address6);
}
- if (-1==bind(context->socket, address, sizeof(address4)))// check
return value!
+ if (-1==bind(context->socket, address, alen))
{
- fprintf(stderr, "The port bind have produced a
failure!");//Failure messafe TODO
+ fprintf(stderr, "Error: failed to bind to port %u: %s\n",
+ port,
+ strerror (errno));
free(context);
- return;
+ return NULL;
}
return context;
@@ -141,17 +155,18 @@
struct MWChannel *chl;
int package_length;
- octl(fc->socket, FIONREAD, &package_length);
+ ioctl(fc->socket, FIONREAD, &package_length); // CHECK RETURN VALUE!
if (package_length==0)
{
- fprintf(stderr, "Error no message to receive!");
+ fprintf(stderr, "Error no message to receive!"); // READ UP on IOCTL
FIONREAD SECURITY PROBLEMS! (Denial-of-Service)
return;
}
- package = malloc(sizeof(struct MWMODEM_Package));
- buffer = malloc(package_length);
+ 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)
{
fprintf(stderr, "Error no message received!");
@@ -159,17 +174,17 @@
free (buffer);
return;
}
- free(from);
- free(from_length);
+ 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!");
- free(hdr);
+ printf("No MWModem compatible message received!"); // fprintf
(stderr!!!
+ free(hdr);
free(package);
- free(buffer);
+ free(buffer); // double-free! (hdr == buffer)
return;
}
else
@@ -184,7 +199,7 @@
struct MWMODEM_Channel list2[package->num_channels];
list = list2;
- int i, currentBufferZelle;
+ int i, currentBufferZelle; // signed or unsigned int?
currentBufferZelle = 13;
for(i=0;i<=package->num_channels; i++)
{
@@ -202,7 +217,7 @@
else
{
fprintf(stderr, "Error no correct
satellite modcode!");
- free(list);
+ free(list); // quadruple-free
uninitialized crash me now!
free(buffer);
free(hdr);
free(chl);
@@ -224,11 +239,11 @@
package->channel = list;
- (*fc->cb)(fc->cls, package);
+ fc->cb(fc->cls, package);
}
void MWMODEM_free (struct MWMODEM_Context *fc)
{
- close(fc->socket);
+ (void) close(fc->socket);
free(fc);
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r18417 - in libmwmodem: . src/main,
gnunet <=