Browse Source

happy-eyeballs: Reserve array length for all candidates

The code currently assumes that the array does not change during
execution, this assumption is violated when the darray resizes causing
previous pointers to point to invalid memory and cause undefined
behavior and crashes.

This may need refactoring in the future, this commit simply fixes the
issue for now.

(cherry picked from commit fce534572b18d14e059bb63045213d2506c88b85)
Richard Stanway 1 year ago
parent
commit
09d2e37709
1 changed files with 1 additions and 0 deletions
  1. 1 0
      deps/happy-eyeballs/happy-eyeballs.c

+ 1 - 0
deps/happy-eyeballs/happy-eyeballs.c

@@ -497,6 +497,7 @@ int happy_eyeballs_create(struct happy_eyeballs_ctx **context)
 
 	ctx->socket_fd = INVALID_SOCKET;
 	da_init(ctx->candidates);
+	da_reserve(ctx->candidates, HAPPY_EYEBALLS_MAX_ATTEMPTS);
 
 	/* race_completed_event will be signalled when there is a winner or all
 	 * attempts have failed */