Thanks for commenting, a few supplements. *# 1. Version of Go?* We observed the issue with both go1.20.5 and go1.18.10 on linux/amd64 (centos)
*# 2. Context?* All panics we observed so far are from either *strconv.FormatInt -> strconv.formatBits* chain, or *strconv.FormatUint -> strconv.formatBits* chain where the base is always 10. // typical call site, toId is an "*int64". if com_count > 1 { com_string = anchor + "," + strconv.FormatInt(*toId, 10) } *# 3. If your program using pure Go (statically linked) or Cgo?* Binary was built with CGO_ENABLED=1 and -buildmode=exe. All panic call sites we observed so far are "pure go", that is, no C calling go path. *# 4. panic stack trace* panic: runtime error: index out of range [18446744073708732603] with length 200 goroutine 1 [running]: strconv.formatBits({0x0?, 0x0?, 0x0?}, 0xc09e00b750?, 0x1?, 0x1?, 0x0?) /usr/lib/go-1.20/src/strconv/itoa.go:140 +0x4b9 strconv.FormatInt(0x0?, 0xc07393df80?) /usr/lib/go-1.20/src/strconv/itoa.go:29 +0xa5 ... On Thursday, August 17, 2023 at 12:56:17 PM UTC+8 Kurtis Rader wrote: > Insufficient information. Version of Go? Since formatBits is private we > need to see the actual code of a call to a public API that resulted in the > call to formatBits that failed. Also, show us the literal panic stack. > Showing us the assembly code with no context is not useful. If your program > using pure Go (statically linked) or Cgo? Wild guesses, what I used to call > SWAGS (silly wild ass guesses) as a Unix support engineer, are seldom > useful. If your guess is scientifically informed that is a different matter > but you should be able to articulate why you think your guess is more > likely to be true than a random coin flip. > > On Wed, Aug 16, 2023 at 8:31 PM metronome <xiangd...@gmail.com> wrote: > >> Hi, >> >> We ran into a weird *out of range* issue of *strconv.formatBits*, hope >> someone can shed a light on what could be the root cause, any comment is >> highly appreciated. >> >> problem description: >> * random out of range at code >> <https://github.com/golang/go/blob/release-branch.go1.20/src/strconv/itoa.go#L140>, >> >> most of the time the indexing is a huge int but we observed at least one >> exception (#2).* >> >> * #1: runtime error: index out of range [18446744073709449339] with >> length 200* >> * #2: runtime error: index out of range [102511] with length 200* >> >> Wild guesses: >> 1. The machine code seems to suggest it's unlikely a data race or memory >> corruption? But perhaps >> relevant registers, like R10, had been saved and restored, then it might >> be due to stack corruption? >> Given that R12 is scratch reg, is it possible that R12 is clobbered >> somehow, say, by signal handling? >> >> =================================================================== >> 0x0000000000495b0a<+810>: mov %rdi,%r10 >> >> 0x0000000000495b0d<+813>: shr %rdi >> >> 0x0000000000495b10<+816>: mov %rax,%rsi >> >> 0x0000000000495b13<+819>: movabs $0xa3d70a3d70a3d70b,%rax >> >> 0x0000000000495b1d<+829>: mov %rdx,%r11 >> >> 0x0000000000495b20<+832>: mul %rdi >> >> 0x0000000000495b23<+835>: shr $0x5,%rdx >> >> * 0x0000000000495b27<+839>: imul $0x64,%rdx,%r12* >> >> * 0x0000000000495b2b<+843>: sub %r12,%r10* >> >> * 0x0000000000495b2e<+846>: lea (%r10,%r10,1),%rax* >> >> 0x0000000000495b32<+850>: lea 0x1(%rax),%rax >> >> 0x0000000000495b36<+854>: nopw 0x0(%rax,%rax,1) >> >> 0x0000000000495b3f<+863>: nop >> >> 0x0000000000495b40<+864>: cmp $0xc8,%rax >> >> 0x0000000000495b46<+870>: jae 0x495c8f >> <strconv.formatBits+1199> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "golang-nuts" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to golang-nuts...@googlegroups.com. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/golang-nuts/ff804d4c-24ee-480d-8ed1-219f9b8d7cbcn%40googlegroups.com >> >> <https://groups.google.com/d/msgid/golang-nuts/ff804d4c-24ee-480d-8ed1-219f9b8d7cbcn%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > > > -- > Kurtis Rader > Caretaker of the exceptional canines Junior and Hank > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/003ec4ce-443e-48ec-9ac8-22aa57b0c006n%40googlegroups.com.