From: Manfred L. <man...@we...> - 2012-11-01 10:13:53
|
On Thu, 1 Nov 2012 09:17:24 +0100 Manfred Lotz <man...@we...> wrote: > Ok, I found the bug. > > In rxsock.h in line 147 it must be > if (dotPos == NULL || dotPos == (stemName + strlen(stemName) - 1)) > instead of > if (dotPos == NULL || dotPos == (stemName + strlen(stemName) + > 1)) > > Now it works like a charm. > Well, there are more segfaults when I try certain edge cases in invoking SockSelect() like these: nbsock = SockSelect("Rd.","",,timeout) nbsock = SockSelect("","Wd.",,timeout) nbsock = SockSelect("Rd.",,,timeout) Here are the fixes (output of svn diff). Index: extensions/rxsock/rxsock.h =================================================================== --- extensions/rxsock/rxsock.h (revision 8552) +++ extensions/rxsock/rxsock.h (working copy) @@ -133,6 +133,10 @@ */ bool resolveStem(RexxObjectPtr source) { + // handle the case where no stem was provided at all + if ( source == NULL ) { + return false; + } // this is the simplest solution if (context->IsStem(source)) { @@ -144,7 +148,7 @@ const char *dotPos = strchr(stemName, '.'); // if no dot or the dot is the last character, this is a standard // stem value - if (dotPos == NULL || dotPos == (stemName + strlen(stemName) + 1)) + if (dotPos == NULL || dotPos == (stemName + strlen(stemName) - 1)) { stem = context->ResolveStemVariable(source); } @@ -169,7 +173,6 @@ } if (stem == NULL) { - context->InvalidRoutine(); return false; } } Index: extensions/rxsock/rxsockfn.cpp =================================================================== --- extensions/rxsock/rxsockfn.cpp (revision 8552) +++ extensions/rxsock/rxsockfn.cpp (working copy) @@ -832,12 +832,12 @@ { struct timeval timeOutS; struct timeval *timeOutP; - int rCount; - int wCount; - int eCount; - int *rArray; - int *wArray; - int *eArray; + int rCount = 0; + int wCount = 0; + int eCount = 0; + int *rArray = NULL; + int *wArray = NULL; + int *eArray = NULL; int i; int j; int rc; Please check my code. Thanks a lot. -- Manfred |