(set them to the null pointer instead).
Thus, code that doesn't specificallly attempt to clean up allocated
memory after an error result is returned from yp_...() won't have an
unexpected memory leak (i.e, most 3rd party code)
* Ensure that all 'char **outXXX' pointers aren't the null pointer before use.
* Set *outXXX=NULL before checking any other arguments.
* Document that *outXXX will always be NULL or a malloc(3)ed string
unless outXXX was NULL (in which case YPERR_BADARGS will be returned
and the caller shouldn't attempt to free(*outXXX) if *outXXX != NULL;
These changes should prevent most occurances of coredumps when a bad
argument was given to a yp client function and the caller attempts to
free an outvalue that isn't the null pointer. To be really safe, the
caller probably should set the *outvalue=NULL anyway (ref: PR [lib/3580])
upper-level YP call. This allows the RPC code to retry the transaction,
which is helpful for busy networks.
Problem noted and suggested fix from Michael.Eriksson@era-t.ericsson.se,
and slightly modified by me to compute the RPC timeout one at compile-time,
rather than N times at run-time.
Fixes PR #3117.
xdr_ypbind_setdom() would always fail because the test for
xdr_ypdomain_wrap_string() was reversed. Fixed this and in
the process made all the function tests to be of the form:
if (!xdr_foo())
return FALSE;
....
return TRUE;
instead of having some of them like above and others like:
if (xdr_foo() == FALSE)
return FALSE;
...
return xdr_bar();
this is more consistant now and hopefully in the future people
will pattern match correctly and not introduce spurious errors.
Use a constant struct timeval for yp timeouts instead of creating
a new struct timeval in each yp function at runtime.
Check arguments and return YPERR_BADARGS if invalid.
* Include appropriate header files to bring prototypes into scope.
* bcopy -> memcpy
* bzero -> memset
* bcmp -> memcmp
* Tweak yp xdr routines so compiler can do a better job --- saves
at least 5 instructions per function call on the i386.