hexdump: catch memory leaks
Signed-off-by: Ondrej Oprala <ooprala@redhat.com>
This commit is contained in:
parent
3917a95d90
commit
d2740b0ef6
|
@ -279,12 +279,12 @@ get(void)
|
|||
*/
|
||||
if (!length || (ateof && !next(NULL))) {
|
||||
if (need == blocksize)
|
||||
return(NULL);
|
||||
goto retnul;
|
||||
if (!need && vflag != ALL &&
|
||||
!memcmp(curp, savp, nread)) {
|
||||
if (vflag != DUP)
|
||||
printf("*\n");
|
||||
return(NULL);
|
||||
goto retnul;
|
||||
}
|
||||
if (need > 0)
|
||||
memset((char *)curp + nread, 0, need);
|
||||
|
@ -293,7 +293,7 @@ get(void)
|
|||
}
|
||||
if (fileno(stdin) == -1) {
|
||||
warnx(_("all input file arguments failed"));
|
||||
return(NULL);
|
||||
goto retnul;
|
||||
}
|
||||
n = fread((char *)curp + nread, sizeof(unsigned char),
|
||||
length == -1 ? need : min(length, need), stdin);
|
||||
|
@ -323,6 +323,10 @@ get(void)
|
|||
else
|
||||
nread += n;
|
||||
}
|
||||
retnul:
|
||||
free (curp);
|
||||
free (savp);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int next(char **argv)
|
||||
|
|
|
@ -50,6 +50,7 @@ struct list_head fshead; /* head of format strings */
|
|||
ssize_t blocksize; /* data block size */
|
||||
int exitval; /* final exit value */
|
||||
ssize_t length = -1; /* max bytes to read */
|
||||
void hex_free(void);
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
|
@ -83,5 +84,28 @@ int main(int argc, char **argv)
|
|||
|
||||
next(argv);
|
||||
display();
|
||||
hex_free();
|
||||
return exitval;
|
||||
}
|
||||
|
||||
void hex_free(void)
|
||||
{
|
||||
struct list_head *p, *pn, *q, *qn, *r, *rn;
|
||||
FS *fs;
|
||||
FU *fu;
|
||||
PR *pr;
|
||||
list_for_each_safe(p, pn, &fshead) {
|
||||
fs = list_entry(p, FS, fslist);
|
||||
list_for_each_safe(q, qn, &fs->fulist) {
|
||||
fu = list_entry(q, FU, fulist);
|
||||
list_for_each_safe(r, rn, &fu->prlist) {
|
||||
pr = list_entry(r, PR, prlist);
|
||||
free(pr->fmt);
|
||||
free(pr);
|
||||
}
|
||||
free(fu->fmt);
|
||||
free(fu);
|
||||
}
|
||||
free(fs);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -231,7 +231,7 @@ void rewrite(FS *fs)
|
|||
|
||||
/* Only text in the string. */
|
||||
if (!*p1) {
|
||||
pr->fmt = fmtp;
|
||||
pr->fmt = xstrdup(fmtp);
|
||||
pr->flags = F_TEXT;
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue