snprintf retval checks
This commit is contained in:
parent
2a56a66bb9
commit
0c45ceb5fd
@ -48,7 +48,7 @@ void log_print(int prio, const char *fmt, ...)
|
||||
len = vsnprintf(buffer, BUFSIZE, fmt, az);
|
||||
va_end(az);
|
||||
|
||||
if (len >= BUFSIZE) {
|
||||
if (len < 0 || len >= BUFSIZE) {
|
||||
log_print(LOG_ERROR, "log_print: arguments too long");
|
||||
errno = 0;
|
||||
return;
|
||||
|
@ -57,7 +57,7 @@ static void probe(void)
|
||||
FILE *fp;
|
||||
char *buffer, *val[16], filename[16];
|
||||
unsigned long long arr[16];
|
||||
int i, cpu = 0;
|
||||
int i, len, cpu = 0;
|
||||
|
||||
buffer = malloc(BUFSIZE);
|
||||
if (buffer == NULL) {
|
||||
@ -82,7 +82,9 @@ static void probe(void)
|
||||
for (i = 0; i < 16; i++)
|
||||
arr[i] = strtoll(val[i], NULL, 16);
|
||||
|
||||
snprintf(filename, sizeof(filename), "ctstat-%d.rrd", cpu);
|
||||
len = snprintf(filename, sizeof(filename), "ctstat-%d.rrd", cpu);
|
||||
if (len < 0 || len >= sizeof(filename))
|
||||
continue;
|
||||
|
||||
probe_submit(&plugin, filename, 0,
|
||||
"%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu",
|
||||
|
@ -86,7 +86,7 @@ static void probe(void)
|
||||
}
|
||||
|
||||
len = snprintf(filename, sizeof(filename), "mount%s.rrd", mnt->mnt_fsname);
|
||||
if (len >= sizeof(filename)) {
|
||||
if (len < 0 || len >= sizeof(filename)) {
|
||||
log_print(LOG_WARN, "plugin mount: file name too long", mnt->mnt_fsname);
|
||||
continue;
|
||||
}
|
||||
|
@ -45,6 +45,7 @@ static void probe(void)
|
||||
FILE *fp;
|
||||
char *buffer, *stats, *device;
|
||||
char *val[16], filename[32];
|
||||
int len;
|
||||
|
||||
buffer = malloc(BUFSIZE);
|
||||
if (buffer == NULL) {
|
||||
@ -76,7 +77,9 @@ static void probe(void)
|
||||
if (strsplit(stats, val, 16) != 16)
|
||||
continue;
|
||||
|
||||
snprintf(filename, sizeof(filename), "net-%s.rrd", device);
|
||||
len = snprintf(filename, sizeof(filename), "net-%s.rrd", device);
|
||||
if (len < 0 || len >= sizeof(filename))
|
||||
continue;
|
||||
|
||||
probe_submit(&plugin, filename, 0, "%s:%s:%s:%s",
|
||||
val[0], val[8], val[1], val[9]);
|
||||
|
@ -58,7 +58,7 @@ static void probe(void)
|
||||
FILE *fp;
|
||||
char *buffer, *val[17], filename[16];
|
||||
unsigned long long arr[17];
|
||||
int i, cpu = 0;
|
||||
int i, len, cpu = 0;
|
||||
|
||||
buffer = malloc(BUFSIZE);
|
||||
if (buffer == NULL) {
|
||||
@ -83,7 +83,9 @@ static void probe(void)
|
||||
for (i = 0; i < 17; i++)
|
||||
arr[i] = strtoll(val[i], NULL, 16);
|
||||
|
||||
snprintf(filename, sizeof(filename), "rtstat-%d.rrd", cpu);
|
||||
len = snprintf(filename, sizeof(filename), "rtstat-%d.rrd", cpu);
|
||||
if (len < 0 || len >= sizeof(filename))
|
||||
continue;
|
||||
|
||||
probe_submit(&plugin, filename, 0,
|
||||
"%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu:%llu",
|
||||
|
6
p_stat.c
6
p_stat.c
@ -90,11 +90,13 @@ static void probe(void)
|
||||
while (fgets(buffer, BUFSIZE, fp) != NULL) {
|
||||
if (!strncmp(buffer, "cpu", 3)) {
|
||||
char *val[9], filename[16];
|
||||
int numfields, cpu;
|
||||
int numfields, len, cpu;
|
||||
|
||||
if ((buffer[3] >= '0') && (buffer[3] <= '9')) {
|
||||
cpu = atoi(buffer +3);
|
||||
snprintf(filename, sizeof(filename), "cpu-%d.rrd", cpu);
|
||||
len = snprintf(filename, sizeof(filename), "cpu-%d.rrd", cpu);
|
||||
if (len < 0 || len >= sizeof(filename))
|
||||
continue;
|
||||
|
||||
} else {
|
||||
strncpy(filename, "cpu.rrd", sizeof(filename));
|
||||
|
15
plugins.c
15
plugins.c
@ -54,7 +54,7 @@ static void plugin_load(char *filename)
|
||||
}
|
||||
|
||||
len = snprintf(buffer, BUFSIZE, "%s/%s", plugin_dir, filename);
|
||||
if (len >= BUFSIZE) {
|
||||
if (len < 0 || len >= BUFSIZE) {
|
||||
log_print(LOG_ERROR, "plugin_load: file name too long: %s/%s", plugin_dir, filename);
|
||||
free(buffer);
|
||||
return;
|
||||
@ -90,11 +90,12 @@ void plugin_load_all()
|
||||
struct conf_tupel *tupel;
|
||||
|
||||
section = config_get_section("global");
|
||||
if (section) {
|
||||
list_for_each_entry(tupel, §ion->tupel, list)
|
||||
if (!strcmp(tupel->option, "plugin"))
|
||||
plugin_load(tupel->parameter);
|
||||
}
|
||||
if (section == NULL)
|
||||
return;
|
||||
|
||||
list_for_each_entry(tupel, §ion->tupel, list)
|
||||
if (!strcmp(tupel->option, "plugin"))
|
||||
plugin_load(tupel->parameter);
|
||||
}
|
||||
|
||||
void plugins_probe(void)
|
||||
@ -136,7 +137,7 @@ void probe_submit(struct sammler_plugin *plugin, char *filename, int ds_id, cons
|
||||
len = vsnprintf(buffer, BUFSIZE, fmt, az);
|
||||
va_end(az);
|
||||
|
||||
if (len >= BUFSIZE) {
|
||||
if (len < 0 || len >= BUFSIZE) {
|
||||
log_print(LOG_ERROR, "probe_submit: %s arguments too long", plugin->name);
|
||||
free(buffer);
|
||||
return;
|
||||
|
12
rrdtool.c
12
rrdtool.c
@ -60,7 +60,7 @@ static int append_rra_config(char *buffer, int size, int *pos)
|
||||
continue;
|
||||
|
||||
len = snprintf(buffer + *pos, size - *pos, "%s ", tupel->parameter);
|
||||
if (len >= size - *pos) {
|
||||
if (len < 0 || len >= size - *pos) {
|
||||
log_print(LOG_ERROR, "append_ds_config: arguments too long");
|
||||
return -1;
|
||||
}
|
||||
@ -84,14 +84,14 @@ static int append_ds_config(char *buffer, int size, int *pos, int heartbeat, cha
|
||||
|
||||
while (*ds_def != NULL) {
|
||||
len = snprintf(dsbuild, BUFSIZE, *ds_def, heartbeat);
|
||||
if (len >= BUFSIZE) {
|
||||
if (len < 0 || len >= BUFSIZE) {
|
||||
log_print(LOG_ERROR, "append_ds_config: arguments too long");
|
||||
free(dsbuild);
|
||||
return -1;
|
||||
}
|
||||
|
||||
len = snprintf(buffer + *pos, size - *pos, "%s ", dsbuild);
|
||||
if (len >= size - *pos) {
|
||||
if (len < 0 || len >= size - *pos) {
|
||||
log_print(LOG_ERROR, "append_ds_config: arguments too long");
|
||||
free(dsbuild);
|
||||
return -1;
|
||||
@ -151,7 +151,7 @@ static int rrd_create_file(char *filename, char **ds_def)
|
||||
heartbeat = (step * 2) + (step / 2);
|
||||
|
||||
pos = snprintf(buffer, ARGVSIZE, "create %s -s %d ", filename, step);
|
||||
if (pos >= ARGVSIZE) {
|
||||
if (pos < 0 || pos >= ARGVSIZE) {
|
||||
log_print(LOG_ERROR, "rrd_create_file: arguments too long");
|
||||
free(buffer);
|
||||
return -1;
|
||||
@ -185,7 +185,7 @@ static int rrd_update_file(char *filename, char *values)
|
||||
}
|
||||
|
||||
pos = snprintf(buffer, ARGVSIZE, "update %s %lu:%s", filename, time(NULL), values);
|
||||
if (pos >= ARGVSIZE) {
|
||||
if (pos < 0 || pos >= ARGVSIZE) {
|
||||
log_print(LOG_ERROR, "rrd_update_file: arguments too long");
|
||||
free(buffer);
|
||||
return -1;
|
||||
@ -272,7 +272,7 @@ void rrd_submit(char *plugin, int version, char *filename, int ds_id, char *data
|
||||
}
|
||||
|
||||
len = snprintf(fullfile, BUFSIZE, "%s/%s", rrd_dir, filename);
|
||||
if (len >= BUFSIZE) {
|
||||
if (len < 0 || len >= BUFSIZE) {
|
||||
log_print(LOG_ERROR, "rrd_submit: arguments too long");
|
||||
free(fullfile);
|
||||
return;
|
||||
|
Loading…
Reference in New Issue
Block a user