0088-pmap: Always check the return value of fgets().
Otherwise "the contents of the array remain unchanged and a null pointer is returned" or "the array contents are indeterminate and a null pointer is returned". Signed-off-by: Craig Small <csmall@enc.com.au>
This commit is contained in:
parent
45f81ef706
commit
5f654f143a
12
pmap.c
12
pmap.c
@ -333,6 +333,8 @@ static void print_extended_maps (FILE *f)
|
|||||||
c = mapbuf[strlen(mapbuf) - 1];
|
c = mapbuf[strlen(mapbuf) - 1];
|
||||||
while (c != '\n') {
|
while (c != '\n') {
|
||||||
fgets(mapbuf, sizeof mapbuf, f);
|
fgets(mapbuf, sizeof mapbuf, f);
|
||||||
|
if (!ret || !mapbuf[0])
|
||||||
|
xerrx(EXIT_FAILURE, _("Unknown format in smaps file!"));
|
||||||
c = mapbuf[strlen(mapbuf) - 1];
|
c = mapbuf[strlen(mapbuf) - 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -344,8 +346,8 @@ static void print_extended_maps (FILE *f)
|
|||||||
if (strlen(inode ) > maxw5) maxw5 = strlen(inode);
|
if (strlen(inode ) > maxw5) maxw5 = strlen(inode);
|
||||||
|
|
||||||
ret = fgets(mapbuf, sizeof mapbuf, f);
|
ret = fgets(mapbuf, sizeof mapbuf, f);
|
||||||
nfields = sscanf(mapbuf, "%"DETL"[^:]: %"NUML"[0-9] kB %c",
|
nfields = ret ? sscanf(mapbuf, "%"DETL"[^:]: %"NUML"[0-9] kB %c",
|
||||||
detail_desc, value_str, &c);
|
detail_desc, value_str, &c) : 0;
|
||||||
listnode = listhead;
|
listnode = listhead;
|
||||||
/* === READ MAPPING DETAILS === */
|
/* === READ MAPPING DETAILS === */
|
||||||
while (ret != NULL && nfields == 2) {
|
while (ret != NULL && nfields == 2) {
|
||||||
@ -387,12 +389,12 @@ static void print_extended_maps (FILE *f)
|
|||||||
listnode = listnode->next;
|
listnode = listnode->next;
|
||||||
loop_end:
|
loop_end:
|
||||||
ret = fgets(mapbuf, sizeof mapbuf, f);
|
ret = fgets(mapbuf, sizeof mapbuf, f);
|
||||||
nfields = sscanf(mapbuf, "%"DETL"[^:]: %"NUML"[0-9] kB %c",
|
nfields = ret ? sscanf(mapbuf, "%"DETL"[^:]: %"NUML"[0-9] kB %c",
|
||||||
detail_desc, value_str, &c);
|
detail_desc, value_str, &c) : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* === GET VMFLAGS === */
|
/* === GET VMFLAGS === */
|
||||||
nfields = sscanf(mapbuf, "VmFlags: %[a-z ]", vmflags);
|
nfields = ret ? sscanf(mapbuf, "VmFlags: %[a-z ]", vmflags) : 0;
|
||||||
if (nfields == 1) {
|
if (nfields == 1) {
|
||||||
if (! has_vmflags) has_vmflags = 1;
|
if (! has_vmflags) has_vmflags = 1;
|
||||||
ret = fgets(mapbuf, sizeof mapbuf, f);
|
ret = fgets(mapbuf, sizeof mapbuf, f);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user