When attempting to copy a non-existent file to another file on Solaris 5.8, a out-of-memory error is shown rather than a file-not-found error.
I've attached 'truss' output showing the sequence.
$ uname -a
SunOS xxx 5.8 Generic_117350-45 sun4u sparc SUNW,Sun-Fire-V440
$ cd /tmp
$ rsync missingfile /tmp
ERROR: out of memory in full_fname [sender]
rsync error: error allocating core memory buffers (code 22) at util.c(117) [sender=3.0.7]
The relevant portion of the truss output:
29718: lstat64("missingfile", 0xFFBEE3E8) Err#2 ENOENT
29718: write(2, 0xFFBEBDD0, 43) = 43
The problem does not manifest on Solaris 10.
Created attachment 6409 [details]
truss output of problem.
full_fname() is calling asprintf(). Perhaps that is not supported on Solaris 5.8? You could try using the version supplied by lib/snprintf.c (e.g. manipulating the defines in config.h, and perhaps some function-name trickery).
If asprintf() isn't the issue, I'd suggest either using a debugger to look at the string pointers that will be passed to asprintf(), or outputting them via debug fprintf(stderr, "...") calls.
The asprintf() call in question is only 1 of 2 in all of rsync that tests the success of the function via "<= 0" rather than "< 0". Perhaps just removing the '=' in those calls would fix the issue? Is asprintf() working OK if it returns 0?
I'll assume that this is fixed unless I hear otherwise.