diff --git a/src/main.c b/src/main.c index beccd82..d132223 100644 --- a/src/main.c +++ b/src/main.c @@ -30,6 +30,10 @@ typedef struct { uint8_t _padding; } rcon_packet_t; +// Minimum and maximum values for the `size` field of a valid packet. +#define MIN_SIZE (sizeof(int32_t) * 2 + 2) +#define MAX_SIZE (sizeof(rcon_packet_t) - sizeof(int32_t)) + int read_env_int(const char *var) { const char* port_str = getenv(var); if (port_str == NULL) { @@ -125,7 +129,7 @@ int recv_packet(int sockfd, rcon_packet_t *packet) { } packet->size = le32toh(packet->size); - if (packet->size < 10 || packet->size > 4110) { + if (packet->size < (int32_t)MIN_SIZE || packet->size > (int32_t)MAX_SIZE) { fprintf(stderr, "invalid packet size: %d\n", packet->size); return -1; }