[BUG] Breakage in t5509 # 2 from read(stdin) EINVAL
- Date: Wed, 10 Jan 2018 13:36:04 -0500
- From: "Randall S. Becker" <rsbecker@xxxxxxxxxxxxx>
- Subject: [BUG] Breakage in t5509 # 2 from read(stdin) EINVAL
Here?s the situation. In the NonStop port, since time immemorial, we?ve had
a breakage in 5509 that I?ve finally had the chance to track down. The error
report at the breakage is:
./trash directory.t5509-fetch-push-namespaces/original: GIT_TRACE=true
GIT_PACKET_TRACE=true GIT_TRANSLOOP_DEBUG=true git push pushee-namespaced
11:55:02.512020 trace: built-in: git 'push' 'pushee-namespaced' 'master'
11:55:02.600895 trace: run_command: 'git-remote-ext' 'pushee-namespaced'
'git --namespace=namespace %s ../pushee'
11:55:02.610439 trace: built-in: git 'remote-ext' 'pushee-namespaced' 'git
--namespace=namespace %s ../pushee'
11:55:02.612643 trace: run_command: 'git' '--namespace=namespace'
11:55:02.622553 trace: built-in: git 'receive-pack' '../pushee'
Transfer loop debugging: stdin is readable
error: read(stdin) failed: Invalid function argument
Transfer loop debugging: remote input is readable
error: read(remote input) failed: Invalid function argument
error: Git to program copy process failed
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
transport-helper.c uses read instead of wrapper.c?s xread to do its work. It
looks like when the buffer size calculation is done passed into read, we?re
getting a very large value, more than SSIZE_MAX. In udt_do_read:
bytes = read(t->src, t->buf + t->bufuse, BUFFERSIZE - t->bufuse);
generates EINVAL. This may be because unidirectional_transfer.bufuse is
size_t instead of ssize_t. I can try to fix this a number of ways, but it
seems that xread is likely the way to go. udt_do_write already uses xwrite.
I?m looking to fix on or after 2.13.5 (7234152).
-- Brief whoami:
NonStop developer since approximately NonStop(211288444200000000)
UNIX developer since approximately 421664400
-- In my real life, I talk too much.