Skip to content

random: return empty string instead of spinning when length is 0#63

Open
c-tonneslan wants to merge 1 commit into
labstack:masterfrom
c-tonneslan:fix/random-string-zero-length
Open

random: return empty string instead of spinning when length is 0#63
c-tonneslan wants to merge 1 commit into
labstack:masterfrom
c-tonneslan:fix/random-string-zero-length

Conversation

@c-tonneslan
Copy link
Copy Markdown

`Random.String(0)` allocates a zero-length result buffer and a zero-length read buffer, then enters the read loop. `io.ReadFull` on a zero-length slice returns immediately, the inner range over the empty buffer does nothing, and the outer for-loop spins forever without making progress.

Easy to hit since the input type is `uint8` so any caller passing a length computed at runtime can land on 0.

```go
random.String(0) // hangs
```

Returns "" up front when `length == 0`. Added a 0-length case to `TestRandomString`.

Random.String(0) allocates a zero-length result buffer and a zero-length
read buffer, then enters the read loop. io.ReadFull on a 0-length slice
returns immediately, the inner range loop does nothing, and the outer
loop just spins forever without making progress. Easy to hit because
the input type is uint8 so callers passing a variable can land on 0.

Return "" up front when length is 0. Added a 0-length case to
TestRandomString.

Signed-off-by: Charlie Tonneslan <cst0520@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant