]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: pass correct string to exits on Plan 9
authorOri Bernstein <ori@eigenstate.org>
Sun, 3 Jul 2022 16:26:30 +0000 (12:26 -0400)
committerIan Lance Taylor <iant@google.com>
Mon, 4 Jul 2022 04:09:44 +0000 (04:09 +0000)
In CL 405901 the definition of exit in the Plan 9 go runtime
was changed like so:

-               status = append(itoa(tmp[:len(tmp)-1], uint64(e)), 0)
+               sl := itoa(tmp[:len(tmp)-1], uint64(e))
+               // Don't append, rely on the existing data being zero.
+               status = tmp[:len(sl)+1]

However, itoa only puts the converted number "somewhere" in the buffer.
Specifically, it builds it from the end of the buffer towards the start,
meaning the first byte of the buffer is a 0 byte, and the resulting string
that's passed to exits is empty, leading to a falsely successful exit.

This change uses the returned value from itoa, rather than the buffer
that was passed in, so that we start from the correct location in the
string.

Fixes #53669

Change-Id: I63f0c7641fc6f55250857dc17a1eeb12ae0c2e10
Reviewed-on: https://go-review.googlesource.com/c/go/+/415680
Reviewed-by: David Chase <drchase@google.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
src/runtime/os_plan9.go

index 13bc3be4abfa92ee16b2f8274817267493b65b40..f0e7c6ae70f814e28562182af88604e20377641f 100644 (file)
@@ -439,7 +439,7 @@ func exit(e int32) {
                var tmp [32]byte
                sl := itoa(tmp[:len(tmp)-1], uint64(e))
                // Don't append, rely on the existing data being zero.
-               status = tmp[:len(sl)+1]
+               status = sl[:len(sl)+1]
        }
        goexitsall(&status[0])
        exits(&status[0])