pmap: Fix detail parsing on long mapping lines
If the mapping descriptor is longer than 128 chars, the last parsed character won't be a newline even if the current buffer contains it a bit further than that. The current code always interprets it as a short fgets() read instead, and thus keeps calling fgets() until it gets a newline, dropping valid lines and failing with the following error: pmap: ERROR: inconsistent detail field in smaps file, line: Rss: 212 kB
This commit is contained in:
parent
6eb4726e6f
commit
b921e2e765
6
pmap.c
6
pmap.c
@ -318,17 +318,17 @@ static void print_extended_maps (FILE *f)
|
||||
while (ret != NULL) {
|
||||
/* === READ MAPPING === */
|
||||
map_desc[0] = '\0';
|
||||
c = '\n';
|
||||
nfields = sscanf(mapbuf,
|
||||
"%"NUML"[0-9a-f]-%"NUML"[0-9a-f] "
|
||||
"%"DETL"s %"NUML"[0-9a-f] "
|
||||
"%63[0-9a-f:] %"NUML"s %127[^\n]%c",
|
||||
"%63[0-9a-f:] %"NUML"s %127[^\n]",
|
||||
start, end, perms, offset,
|
||||
dev, inode, map_desc, &c);
|
||||
dev, inode, map_desc);
|
||||
/* Must read at least up to inode, else something has changed! */
|
||||
if (nfields < 6)
|
||||
xerrx(EXIT_FAILURE, _("Unknown format in smaps file!"));
|
||||
/* If line too long we dump everything else. */
|
||||
c = mapbuf[strlen(mapbuf) - 1];
|
||||
while (c != '\n') {
|
||||
ret = fgets(mapbuf, sizeof mapbuf, f);
|
||||
c = mapbuf[strlen(mapbuf) - 1];
|
||||
|
Loading…
Reference in New Issue
Block a user