include_stack_ln[include_stack_ptr++]=linenumber;
linenumber=1;
- if(*(yytext+1)=='/') {
- if (strlen(yytext+1) >= sizeof(filename)) {
- fprintf( stderr, "Filename '%s' is too long\n",yytext+1);
- exit( 1 );
- }
- strcpy(filename,yytext+1);
- }
- else {
- size_t bind_directory_len = strlen(bind_directory);
- if (bind_directory_len >= sizeof(filename) ||
- strlen(yytext+1) + 2 >= sizeof(filename) - bind_directory_len) {
- fprintf( stderr, "Filename '%s' is too long\n",yytext+1);
- exit( 1 );
- }
- strcpy(filename,bind_directory);
- strcat(filename,"/");
- strcat(filename,yytext+1);
- }
- filename[sizeof(filename)-1]='\0';
+ int ret;
+ if(*(yytext+1)=='/') {
+ ret = snprintf(filename, sizeof(filename), "%s", yytext+1);
+ }
+ else {
+ ret = snprintf(filename, sizeof(filename), "%s/%s", bind_directory, yytext+1);
+ }
+ if (ret == -1 || ret >= sizeof(filename)) {
+ fprintf( stderr, "Filename '%s' is too long\n",yytext+1);
+ exit( 1 );
+ }
if (!(yyin=fopen(filename,"r"))) {
fprintf( stderr, "Unable to open '%s': %s\n",filename,strerror(errno));
time_t d_tickinterval;
set<DomainInfo> d_tocheck;
struct cmp {
- bool operator()(const DNSPacket& a, const DNSPacket& b) {
+ bool operator()(const DNSPacket& a, const DNSPacket& b) const {
return a.qdomain < b.qdomain;
};
};
ret.reserve((int)(str.size()*2.2));
for(string::size_type n=0;n<str.size();++n) {
- sprintf(tmp,"%02x ", (unsigned char)str[n]);
+ snprintf(tmp, sizeof(tmp), "%02x ", (unsigned char)str[n]);
ret+=tmp;
}
return ret;