UNIX_PATH_MAX was hardcoded to 108 for all systems. However, at
least on 32 bit NetBSD the size of the sun_path buffer is only
104 bytes. This resulted in a very nasty bug caused by a memset()
overwriting 4 bytes on the stack.
Fix this by calculating the correct value at compile time.
/** \file net.h exported symbols from net.c */
/**
/** \file net.h exported symbols from net.c */
/**
- * the buffer size of the sun_path component of struct sockaddr_un
+ * The buffer size of the sun_path component of struct sockaddr_un.
- * While glibc doesn't define \p UNIX_PATH_MAX, it
- * documents it has being limited to 108 bytes.
+ * While glibc doesn't define \p UNIX_PATH_MAX, it documents it has being
+ * limited to 108 bytes. On NetBSD it is only 104 bytes though. We trust \p
+ * UNIX_PATH_MAX if it is defined and use the size of the ->sun_path member
+ * otherwise. This should be safe everywhere.
-#define UNIX_PATH_MAX 108
+#define UNIX_PATH_MAX (sizeof(((struct sockaddr_un *)0)->sun_path))
#endif
/* Userland defines for Linux DCCP support. */
#endif
/* Userland defines for Linux DCCP support. */