Skip to content

Commit 156c8db

Browse files
xiaobaishu1pymumu
authored andcommitted
fix(security): prevent buffer overflow in domain_rule.c
Added parameter validation at function entry (checking pointers and buffer sizes) Fixed buffer write operations to prevent overflow when adding suffix dots Ensured proper null-termination order
1 parent 2e0e540 commit 156c8db

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

src/dns_conf/domain_rule.c

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -174,8 +174,9 @@ static int _config_setup_domain_key(const char *domain, char *domain_key, int do
174174

175175
int len = strlen(domain);
176176
domain_len = len;
177-
if (len >= domain_key_max_len - 3) {
178-
tlog(TLOG_ERROR, "domain %s too long", domain);
177+
if (!domain_key || !domain_key_len || domain_key_max_len <= 0 ||
178+
len + 3 > domain_key_max_len) {
179+
tlog(TLOG_ERROR, "invalid parameters or domain too long: %s (max %d)", domain, domain_key_max_len - 3);
179180
return -1;
180181
}
181182

@@ -202,12 +203,14 @@ static int _config_setup_domain_key(const char *domain, char *domain_key, int do
202203
}
203204
} else if (len > 0) {
204205
/* suffix match */
205-
domain_key[len + 1] = '.';
206-
len++;
206+
if (len + 2 < domain_key_max_len) {
207+
domain_key[len + 1] = '.';
208+
len++;
209+
}
207210
}
208211

209-
domain_key[len + 1] = 0;
210212
domain_key[0] = '.';
213+
domain_key[len + 1] = '\0';
211214

212215
*domain_key_len = len + 1;
213216
if (root_rule_only) {

0 commit comments

Comments
 (0)