Fix buffer overflows in argument parser

This commit is contained in:
ValdikSS
2017-04-12 20:50:36 +03:00
parent 83a04ad79d
commit 9af1b201f6

16
udpxd.c
View File

@@ -176,21 +176,27 @@ int main ( int argc, char* argv[] ) {
} }
break; break;
case 'b': case 'b':
srcip = malloc(INET6_ADDRSTRLEN+1);
if(strlen(optarg) > INET6_ADDRSTRLEN) { if(strlen(optarg) > INET6_ADDRSTRLEN) {
fprintf(stderr, "Bind ip address is too long!\n"); fprintf(stderr, "Bind ip address is too long!\n");
err = 1; err = 1;
} }
srcip = malloc(INET6_ADDRSTRLEN+1); else {
strncpy(srcip, optarg, strlen(optarg)); strncpy(srcip, optarg, INET6_ADDRSTRLEN);
srcip[INET6_ADDRSTRLEN-1] = '\0';
}
break; break;
case 'p': case 'p':
strncpy(pidfile, optarg, strlen(optarg)); strncpy(pidfile, optarg, MAX_BUFFER_SIZE);
pidfile[MAX_BUFFER_SIZE-1] = '\0';
break; break;
case 'u': case 'u':
strncpy(user, optarg, strlen(optarg)); strncpy(user, optarg, 128);
user[128-1] = '\0';
break; break;
case 'c': case 'c':
strncpy(chroot, optarg, strlen(optarg)); strncpy(chroot, optarg, MAX_BUFFER_SIZE);
chroot[MAX_BUFFER_SIZE-1] = '\0';
break; break;
default: default:
usage(); usage();