Re: [pmacct-discussion] Segfault 1.6.1 and current master
Hi Steve, Spot on. Just committed the fix to GitHub code with credits to you: https://github.com/pmacct/pmacct/commit/7afe854b627a31de764d1567038181e2eec16640 Thanks, Paolo On Wed, Aug 23, 2017 at 08:03:08AM -0400, Stephen Clark wrote: > Hi Paolo, > > After doing some more investigation this looks like this could be the problem. > From cfg.h > /* global vars */ > EXT char *cfg[SRVBUFLEN], > > From cfg.c > while (!feof(file)) { > if (rows == LARGEBUFLEN) { > Log(LOG_ERR, "ERROR: [%s] maximum number of %d lines reached.\n", > filename, LARGEBUFLEN); > > Shouldn't *cfg[SRVBUFLEN] be *cfg[LARGEBUFLEN] ? > > It looks like there are not enough array elements to hold all the config item > we > have. > > Regards, > Steve > > On 08/22/2017 03:06 PM, Stephen Clark wrote: > > Hi Paolo, > > > > We have a large nfacctd.conf file around 530 lines. When we try to > > start nfacctd with the -F flag we get a segfault at line below. > > > > /* splitting key, value and name */ > > delim = strchr(cfg[index], ':'); > > *delim = '\0'; < > > key = cfg[index]; > > value = delim+1; > > > > > > I changed the code like below to avoid the segfault - note this happens on > > the > > last line of the file. > > Also we only get the segfault if we use the -F flag. > > > > delim = strchr(cfg[index], ':'); > > if (delim) { > > *delim = '\0'; > > key = cfg[index]; > > value = delim+1; > > } else { > > index++; > > continue; > > } > > > > Regards, > > Steve > > > > > > > > > > ___ > > pmacct-discussion mailing list > > http://www.pmacct.net/#mailinglists > > > -- > > "They that give up essential liberty to obtain temporary safety, > deserve neither liberty nor safety." (Ben Franklin) > > "The course of history shows that as a government grows, liberty > decreases." (Thomas Jefferson) > > "Beer is proof God loves us and wants us to be happy!" (Ben Franklin) > > ___ > pmacct-discussion mailing list > http://www.pmacct.net/#mailinglists ___ pmacct-discussion mailing list http://www.pmacct.net/#mailinglists
Re: [pmacct-discussion] Segfault 1.6.1 and current master
Hi Paolo, After doing some more investigation this looks like this could be the problem. From cfg.h /* global vars */ EXT char *cfg[SRVBUFLEN], From cfg.c while (!feof(file)) { if (rows == LARGEBUFLEN) { Log(LOG_ERR, "ERROR: [%s] maximum number of %d lines reached.\n", filename, LARGEBUFLEN); Shouldn't *cfg[SRVBUFLEN] be *cfg[LARGEBUFLEN] ? It looks like there are not enough array elements to hold all the config item we have. Regards, Steve On 08/22/2017 03:06 PM, Stephen Clark wrote: > Hi Paolo, > > We have a large nfacctd.conf file around 530 lines. When we try to > start nfacctd with the -F flag we get a segfault at line below. > > /* splitting key, value and name */ > delim = strchr(cfg[index], ':'); > *delim = '\0'; < > key = cfg[index]; > value = delim+1; > > > I changed the code like below to avoid the segfault - note this happens on the > last line of the file. > Also we only get the segfault if we use the -F flag. > > delim = strchr(cfg[index], ':'); > if (delim) { > *delim = '\0'; > key = cfg[index]; > value = delim+1; > } else { > index++; > continue; > } > > Regards, > Steve > > > > > ___ > pmacct-discussion mailing list > http://www.pmacct.net/#mailinglists -- "They that give up essential liberty to obtain temporary safety, deserve neither liberty nor safety." (Ben Franklin) "The course of history shows that as a government grows, liberty decreases." (Thomas Jefferson) "Beer is proof God loves us and wants us to be happy!" (Ben Franklin) signature.asc Description: OpenPGP digital signature ___ pmacct-discussion mailing list http://www.pmacct.net/#mailinglists
[pmacct-discussion] Segfault 1.6.1 and current master
Hi Paolo, We have a large nfacctd.conf file around 530 lines. When we try to start nfacctd with the -F flag we get a segfault at line below. /* splitting key, value and name */ delim = strchr(cfg[index], ':'); *delim = '\0'; < key = cfg[index]; value = delim+1; I changed the code like below to avoid the segfault - note this happens on the last line of the file. Also we only get the segfault if we use the -F flag. delim = strchr(cfg[index], ':'); if (delim) { *delim = '\0'; key = cfg[index]; value = delim+1; } else { index++; continue; } Regards, Steve signature.asc Description: OpenPGP digital signature ___ pmacct-discussion mailing list http://www.pmacct.net/#mailinglists