Fix get_from_pipe potentially reading more bytes than its buffer size
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -58,6 +58,7 @@ doc/texinfo.tex
|
|||||||
doc/version.texi
|
doc/version.texi
|
||||||
examples/affinity
|
examples/affinity
|
||||||
examples/df
|
examples/df
|
||||||
|
examples/disk
|
||||||
examples/diskio
|
examples/diskio
|
||||||
examples/first
|
examples/first
|
||||||
examples/free
|
examples/free
|
||||||
|
@@ -11,7 +11,7 @@ AM_LDFLAGS = $(LIBGTOP_EXTRA_LIBS)
|
|||||||
|
|
||||||
noinst_PROGRAMS = first second pprint procargs df netlist \
|
noinst_PROGRAMS = first second pprint procargs df netlist \
|
||||||
mountlist procmap netload sysdeps timings \
|
mountlist procmap netload sysdeps timings \
|
||||||
openfiles smp proclist free wd affinity diskio sysinfo
|
openfiles smp proclist free wd affinity disk diskio sysinfo
|
||||||
|
|
||||||
first_SOURCES = first.c
|
first_SOURCES = first.c
|
||||||
first_LDADD = $(top_builddir)/lib/libgtop-2.0.la
|
first_LDADD = $(top_builddir)/lib/libgtop-2.0.la
|
||||||
|
@@ -235,7 +235,7 @@ glibtop_get_disk_s (glibtop *server, glibtop_disk *buf)
|
|||||||
|
|
||||||
file_to_buffer (server, buffer, sizeof buffer, FILENAME);
|
file_to_buffer (server, buffer, sizeof buffer, FILENAME);
|
||||||
|
|
||||||
get_from_pipe (map_buffer, CMD_PIPE);
|
get_from_pipe (map_buffer, STAT_BUFSIZ, CMD_PIPE);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* GLOBAL
|
* GLOBAL
|
||||||
|
@@ -58,17 +58,15 @@ skip_token (const char *p)
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
get_from_pipe (char *buffer, const char *cmd)
|
get_from_pipe (char *buffer, const size_t bufsiz, const char *cmd)
|
||||||
{
|
{
|
||||||
FILE* fp;
|
FILE* fp;
|
||||||
long psize;
|
|
||||||
|
|
||||||
fp = popen (cmd, "r");
|
fp = popen (cmd, "r");
|
||||||
|
|
||||||
fseek (fp, 0, SEEK_END);
|
size_t psize = fread(buffer,1,bufsiz,fp);
|
||||||
psize = ftell (fp);
|
if (psize == bufsiz)
|
||||||
fseek (fp, 0, SEEK_SET);
|
g_warning("Read bufsiz bytes, there may be more");
|
||||||
fread(buffer,1,psize,fp);
|
|
||||||
|
|
||||||
pclose (fp);
|
pclose (fp);
|
||||||
}
|
}
|
||||||
|
@@ -62,7 +62,7 @@ skip_line (const char *p)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
get_from_pipe (char *buffer, const char *cmd);
|
get_from_pipe (char *buffer, const size_t bufsiz, const char *cmd);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Smart strtoul which handles binary suffixes
|
* Smart strtoul which handles binary suffixes
|
||||||
|
Reference in New Issue
Block a user