@@ -104,7 +104,7 @@ static void parse_dns_fwd_zones(char * fwd_addrs) {
104104 int zone_idx = 1 ;
105105 char * zone_info = NULL ;
106106 char buf [BUF_SIZE ];
107- char zone_name [64 ];
107+ char zone_name [FWD_MAX_DOMAIN_NAME_LEN ];
108108 char zone_addr [BUF_SIZE ];
109109 zone_fwd_input_tmp * fwd_input_tmp = NULL ;
110110 if (strlen (fwd_addrs ) == 0 ){
@@ -125,13 +125,18 @@ static void parse_dns_fwd_zones(char * fwd_addrs) {
125125 while (zone_info ) {
126126 char * pos ;
127127 memset (buf , 0 , BUF_SIZE );
128- memset (zone_name , 0 , 64 );
128+ memset (zone_name , 0 , FWD_MAX_DOMAIN_NAME_LEN );
129129 memset (zone_addr , 0 , BUF_SIZE );
130130 strncpy (buf , zone_info , BUF_SIZE - 1 );
131131 pos = (strrchr (buf , '@' ));
132132 if (pos ) {
133- memcpy (zone_name ,buf ,pos - buf );
134- memcpy (zone_addr ,pos + 1 , strlen (buf )+ buf - pos - 1 );
133+ if (pos - buf >= FWD_MAX_DOMAIN_NAME_LEN ) {
134+ log_msg (LOG_ERR , "domain name legth greater than %d\n" , FWD_MAX_DOMAIN_NAME_LEN );
135+ exit (-1 );
136+ }
137+
138+ memcpy (zone_name , buf , pos - buf );
139+ memcpy (zone_addr , pos + 1 , strlen (buf )+ buf - pos - 1 );
135140 fwd_input_tmp [zone_idx ].zone_name = strdup (zone_name );
136141 fwd_input_tmp [zone_idx ].fwd_addrs = strdup (zone_addr );
137142 }else {
0 commit comments