diff --git a/CHANGES.3 b/CHANGES.3 index ef5a99f..3e89b96 100644 --- a/CHANGES.3 +++ b/CHANGES.3 @@ -373,6 +373,26 @@ it now will show ...:/uronode6 instead. Fixed the "Sockets:" line in the Status command display. The word "Sessions" was off by one space throwing all the following column headers off by 1 space. +17/10/2018 v2.10 +Edited node.h to reflect this version. + +Edited CHANGES.3 to include new changes to the node. + +Thanks to Marius YO2LOJ for a patch in do_ports within command.c where there +is a possibility that the interface count may return NULL and the function +will generate an exception in libc for the routine causing the node to +segment fault out and disconnect the user from the node. Good to see Marius +digging into the code again. + +While at it Marius also discovered the possibility of the interface showing +as "null" in the do_sessions routine, possibly due to some changes in +libax25 perhaps? Under some conditions ax25_config_get_name(dev) could return +a null pointer - Marius YO2LOJ + +Changed a call that was in axdigi.c which had a lib call hardcoded and could +break compiles under different archs. Patch supplied by Helmut Grohne, thanks +to KI6ZHD for relaying the mail that included the patch. + ----------- Note on SystemD -------- In uronode.socket, you'll notice the line: ListenStream=0.0.0.0:3694 diff --git a/axdigi.c b/axdigi.c index 2f3dbe6..06ecb2f 100644 --- a/axdigi.c +++ b/axdigi.c @@ -21,7 +21,7 @@ * 12th June 1997. */ -#include +#include #include #include #include diff --git a/command.c b/command.c index a688aa2..c6b18f9 100644 --- a/command.c +++ b/command.c @@ -395,7 +395,9 @@ int do_ports(int argc, char **argv) n=0; if (ax_list) for (ax=ax_list;ax!=NULL;ax=ax->next) { // if (strcmp(ax25_config_get_name(ax->dev), cp)==0 && strcmp(ax->dest_addr, "*")!=0) n++; - if (strcmp(ax->dest_addr, "*")!=0 && strcmp(ax25_config_get_name(ax->dev), cp)==0) n++; + /* Fixed a possible exception error if the port count returns NULL + in libc for strcmp - Marius YO2LOJ */ + if (strcmp(ax->dest_addr, "*")!=0 && ax25_config_get_name(ax->dev) && strcmp(ax25_config_get_name(ax->dev), cp)==0) n++; } tx=0; rx=0; if (dev_list) for (dev=dev_list;dev!=NULL;dev=dev->next) { @@ -448,6 +450,9 @@ int do_sessions(int argc, char **argv) if ((argc < 2) && !strcmp(ax_p->dest_addr, "*")) continue; cp = ax25_config_get_name(ax_p->dev); + /* under some conditions ax25_config_get_name(dev) could return a null + pointer - Marius YO2LOJ */ + if(!cp) continue; axio_printf(NodeIo,"%-7s %-9s %-9s ", cp, ax_p->dest_addr, ax_p->src_addr); if (!strcmp(ax_p->dest_addr, "*")) { axio_printf(NodeIo,"Listening\n"); diff --git a/node.h b/node.h index c54214a..fa9dfe5 100644 --- a/node.h +++ b/node.h @@ -1,5 +1,5 @@ -#define VERSION "URONode v2.9" -#define COMPILING "May 27, 2018" +#define VERSION "URONode v2.10" +#define COMPILING "December, 2018" #define STATE_IDLE 0 #define STATE_TRYING 1