Size handling was changed in fgets() functions

Pacman's fgets function in the API used hardcoded numbers to identify the size.
This is not good practice, so replace them with sizeof handling.

Signed-off-by: Laszlo Papp <djszapi@archlinux.us>
Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
Laszlo Papp 2009-10-17 23:12:19 +02:00 committed by Dan McGee
parent f9582c7df2
commit 4281a1a7f2
3 changed files with 29 additions and 26 deletions

View File

@ -387,6 +387,7 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
FILE *fp = NULL; FILE *fp = NULL;
char path[PATH_MAX]; char path[PATH_MAX];
char line[513]; char line[513];
int sline = sizeof(line)-1;
char *pkgpath = NULL; char *pkgpath = NULL;
ALPM_LOG_FUNC; ALPM_LOG_FUNC;
@ -418,7 +419,7 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
info->name, inforeq); info->name, inforeq);
/* clear out 'line', to be certain - and to make valgrind happy */ /* clear out 'line', to be certain - and to make valgrind happy */
memset(line, 0, 513); memset(line, 0, sline+1);
pkgpath = get_pkgpath(db, info); pkgpath = get_pkgpath(db, info);
@ -442,7 +443,7 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
} }
_alpm_strtrim(line); _alpm_strtrim(line);
if(strcmp(line, "%NAME%") == 0) { if(strcmp(line, "%NAME%") == 0) {
if(fgets(line, 512, fp) == NULL) { if(fgets(line, sline, fp) == NULL) {
goto error; goto error;
} }
if(strcmp(_alpm_strtrim(line), info->name) != 0) { if(strcmp(_alpm_strtrim(line), info->name) != 0) {
@ -450,7 +451,7 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
"mismatch on package %s\n"), db->treename, info->name); "mismatch on package %s\n"), db->treename, info->name);
} }
} else if(strcmp(line, "%VERSION%") == 0) { } else if(strcmp(line, "%VERSION%") == 0) {
if(fgets(line, 512, fp) == NULL) { if(fgets(line, sline, fp) == NULL) {
goto error; goto error;
} }
if(strcmp(_alpm_strtrim(line), info->version) != 0) { if(strcmp(_alpm_strtrim(line), info->version) != 0) {
@ -458,39 +459,39 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
"mismatch on package %s\n"), db->treename, info->name); "mismatch on package %s\n"), db->treename, info->name);
} }
} else if(strcmp(line, "%FILENAME%") == 0) { } else if(strcmp(line, "%FILENAME%") == 0) {
if(fgets(line, 512, fp) == NULL) { if(fgets(line, sline, fp) == NULL) {
goto error; goto error;
} }
STRDUP(info->filename, _alpm_strtrim(line), goto error); STRDUP(info->filename, _alpm_strtrim(line), goto error);
} else if(strcmp(line, "%DESC%") == 0) { } else if(strcmp(line, "%DESC%") == 0) {
if(fgets(line, 512, fp) == NULL) { if(fgets(line, sline, fp) == NULL) {
goto error; goto error;
} }
STRDUP(info->desc, _alpm_strtrim(line), goto error); STRDUP(info->desc, _alpm_strtrim(line), goto error);
} else if(strcmp(line, "%GROUPS%") == 0) { } else if(strcmp(line, "%GROUPS%") == 0) {
while(fgets(line, 512, fp) && strlen(_alpm_strtrim(line))) { while(fgets(line, sline, fp) && strlen(_alpm_strtrim(line))) {
char *linedup; char *linedup;
STRDUP(linedup, _alpm_strtrim(line), goto error); STRDUP(linedup, _alpm_strtrim(line), goto error);
info->groups = alpm_list_add(info->groups, linedup); info->groups = alpm_list_add(info->groups, linedup);
} }
} else if(strcmp(line, "%URL%") == 0) { } else if(strcmp(line, "%URL%") == 0) {
if(fgets(line, 512, fp) == NULL) { if(fgets(line, sline, fp) == NULL) {
goto error; goto error;
} }
STRDUP(info->url, _alpm_strtrim(line), goto error); STRDUP(info->url, _alpm_strtrim(line), goto error);
} else if(strcmp(line, "%LICENSE%") == 0) { } else if(strcmp(line, "%LICENSE%") == 0) {
while(fgets(line, 512, fp) && strlen(_alpm_strtrim(line))) { while(fgets(line, sline, fp) && strlen(_alpm_strtrim(line))) {
char *linedup; char *linedup;
STRDUP(linedup, _alpm_strtrim(line), goto error); STRDUP(linedup, _alpm_strtrim(line), goto error);
info->licenses = alpm_list_add(info->licenses, linedup); info->licenses = alpm_list_add(info->licenses, linedup);
} }
} else if(strcmp(line, "%ARCH%") == 0) { } else if(strcmp(line, "%ARCH%") == 0) {
if(fgets(line, 512, fp) == NULL) { if(fgets(line, sline, fp) == NULL) {
goto error; goto error;
} }
STRDUP(info->arch, _alpm_strtrim(line), goto error); STRDUP(info->arch, _alpm_strtrim(line), goto error);
} else if(strcmp(line, "%BUILDDATE%") == 0) { } else if(strcmp(line, "%BUILDDATE%") == 0) {
if(fgets(line, 512, fp) == NULL) { if(fgets(line, sline, fp) == NULL) {
goto error; goto error;
} }
_alpm_strtrim(line); _alpm_strtrim(line);
@ -506,7 +507,7 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
info->builddate = atol(line); info->builddate = atol(line);
} }
} else if(strcmp(line, "%INSTALLDATE%") == 0) { } else if(strcmp(line, "%INSTALLDATE%") == 0) {
if(fgets(line, 512, fp) == NULL) { if(fgets(line, sline, fp) == NULL) {
goto error; goto error;
} }
_alpm_strtrim(line); _alpm_strtrim(line);
@ -522,12 +523,12 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
info->installdate = atol(line); info->installdate = atol(line);
} }
} else if(strcmp(line, "%PACKAGER%") == 0) { } else if(strcmp(line, "%PACKAGER%") == 0) {
if(fgets(line, 512, fp) == NULL) { if(fgets(line, sline, fp) == NULL) {
goto error; goto error;
} }
STRDUP(info->packager, _alpm_strtrim(line), goto error); STRDUP(info->packager, _alpm_strtrim(line), goto error);
} else if(strcmp(line, "%REASON%") == 0) { } else if(strcmp(line, "%REASON%") == 0) {
if(fgets(line, 512, fp) == NULL) { if(fgets(line, sline, fp) == NULL) {
goto error; goto error;
} }
info->reason = (pmpkgreason_t)atol(_alpm_strtrim(line)); info->reason = (pmpkgreason_t)atol(_alpm_strtrim(line));
@ -537,7 +538,7 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
* is currently only used in sync databases, and SIZE is * is currently only used in sync databases, and SIZE is
* only used in local databases. * only used in local databases.
*/ */
if(fgets(line, 512, fp) == NULL) { if(fgets(line, sline, fp) == NULL) {
goto error; goto error;
} }
info->size = atol(_alpm_strtrim(line)); info->size = atol(_alpm_strtrim(line));
@ -548,19 +549,19 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
} else if(strcmp(line, "%ISIZE%") == 0) { } else if(strcmp(line, "%ISIZE%") == 0) {
/* ISIZE (installed size) tag only appears in sync repositories, /* ISIZE (installed size) tag only appears in sync repositories,
* not the local one. */ * not the local one. */
if(fgets(line, 512, fp) == NULL) { if(fgets(line, sline, fp) == NULL) {
goto error; goto error;
} }
info->isize = atol(_alpm_strtrim(line)); info->isize = atol(_alpm_strtrim(line));
} else if(strcmp(line, "%MD5SUM%") == 0) { } else if(strcmp(line, "%MD5SUM%") == 0) {
/* MD5SUM tag only appears in sync repositories, /* MD5SUM tag only appears in sync repositories,
* not the local one. */ * not the local one. */
if(fgets(line, 512, fp) == NULL) { if(fgets(line, sline, fp) == NULL) {
goto error; goto error;
} }
STRDUP(info->md5sum, _alpm_strtrim(line), goto error); STRDUP(info->md5sum, _alpm_strtrim(line), goto error);
} else if(strcmp(line, "%REPLACES%") == 0) { } else if(strcmp(line, "%REPLACES%") == 0) {
while(fgets(line, 512, fp) && strlen(_alpm_strtrim(line))) { while(fgets(line, sline, fp) && strlen(_alpm_strtrim(line))) {
char *linedup; char *linedup;
STRDUP(linedup, _alpm_strtrim(line), goto error); STRDUP(linedup, _alpm_strtrim(line), goto error);
info->replaces = alpm_list_add(info->replaces, linedup); info->replaces = alpm_list_add(info->replaces, linedup);
@ -583,13 +584,13 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
while(fgets(line, 256, fp)) { while(fgets(line, 256, fp)) {
_alpm_strtrim(line); _alpm_strtrim(line);
if(strcmp(line, "%FILES%") == 0) { if(strcmp(line, "%FILES%") == 0) {
while(fgets(line, 512, fp) && strlen(_alpm_strtrim(line))) { while(fgets(line, sline, fp) && strlen(_alpm_strtrim(line))) {
char *linedup; char *linedup;
STRDUP(linedup, _alpm_strtrim(line), goto error); STRDUP(linedup, _alpm_strtrim(line), goto error);
info->files = alpm_list_add(info->files, linedup); info->files = alpm_list_add(info->files, linedup);
} }
} else if(strcmp(line, "%BACKUP%") == 0) { } else if(strcmp(line, "%BACKUP%") == 0) {
while(fgets(line, 512, fp) && strlen(_alpm_strtrim(line))) { while(fgets(line, sline, fp) && strlen(_alpm_strtrim(line))) {
char *linedup; char *linedup;
STRDUP(linedup, _alpm_strtrim(line), goto error); STRDUP(linedup, _alpm_strtrim(line), goto error);
info->backup = alpm_list_add(info->backup, linedup); info->backup = alpm_list_add(info->backup, linedup);
@ -611,24 +612,24 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
fgets(line, 255, fp); fgets(line, 255, fp);
_alpm_strtrim(line); _alpm_strtrim(line);
if(strcmp(line, "%DEPENDS%") == 0) { if(strcmp(line, "%DEPENDS%") == 0) {
while(fgets(line, 512, fp) && strlen(_alpm_strtrim(line))) { while(fgets(line, sline, fp) && strlen(_alpm_strtrim(line))) {
pmdepend_t *dep = _alpm_splitdep(_alpm_strtrim(line)); pmdepend_t *dep = _alpm_splitdep(_alpm_strtrim(line));
info->depends = alpm_list_add(info->depends, dep); info->depends = alpm_list_add(info->depends, dep);
} }
} else if(strcmp(line, "%OPTDEPENDS%") == 0) { } else if(strcmp(line, "%OPTDEPENDS%") == 0) {
while(fgets(line, 512, fp) && strlen(_alpm_strtrim(line))) { while(fgets(line, sline, fp) && strlen(_alpm_strtrim(line))) {
char *linedup; char *linedup;
STRDUP(linedup, _alpm_strtrim(line), goto error); STRDUP(linedup, _alpm_strtrim(line), goto error);
info->optdepends = alpm_list_add(info->optdepends, linedup); info->optdepends = alpm_list_add(info->optdepends, linedup);
} }
} else if(strcmp(line, "%CONFLICTS%") == 0) { } else if(strcmp(line, "%CONFLICTS%") == 0) {
while(fgets(line, 512, fp) && strlen(_alpm_strtrim(line))) { while(fgets(line, sline, fp) && strlen(_alpm_strtrim(line))) {
char *linedup; char *linedup;
STRDUP(linedup, _alpm_strtrim(line), goto error); STRDUP(linedup, _alpm_strtrim(line), goto error);
info->conflicts = alpm_list_add(info->conflicts, linedup); info->conflicts = alpm_list_add(info->conflicts, linedup);
} }
} else if(strcmp(line, "%PROVIDES%") == 0) { } else if(strcmp(line, "%PROVIDES%") == 0) {
while(fgets(line, 512, fp) && strlen(_alpm_strtrim(line))) { while(fgets(line, sline, fp) && strlen(_alpm_strtrim(line))) {
char *linedup; char *linedup;
STRDUP(linedup, _alpm_strtrim(line), goto error); STRDUP(linedup, _alpm_strtrim(line), goto error);
info->provides = alpm_list_add(info->provides, linedup); info->provides = alpm_list_add(info->provides, linedup);
@ -647,7 +648,7 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
fgets(line, 255, fp); fgets(line, 255, fp);
_alpm_strtrim(line); _alpm_strtrim(line);
if(strcmp(line, "%DELTAS%") == 0) { if(strcmp(line, "%DELTAS%") == 0) {
while(fgets(line, 512, fp) && strlen(_alpm_strtrim(line))) { while(fgets(line, sline, fp) && strlen(_alpm_strtrim(line))) {
pmdelta_t *delta = _alpm_delta_parse(line); pmdelta_t *delta = _alpm_delta_parse(line);
if(delta) { if(delta) {
info->deltas = alpm_list_add(info->deltas, delta); info->deltas = alpm_list_add(info->deltas, delta);

View File

@ -320,7 +320,8 @@ static int grep(const char *fn, const char *needle)
} }
while(!feof(fp)) { while(!feof(fp)) {
char line[1024]; char line[1024];
fgets(line, 1024, fp); int sline = sizeof(line)-1;
fgets(line, sline, fp);
if(feof(fp)) { if(feof(fp)) {
continue; continue;
} }

View File

@ -580,6 +580,7 @@ void display_optdepends(pmpkg_t *pkg)
static int question(short preset, char *fmt, va_list args) static int question(short preset, char *fmt, va_list args)
{ {
char response[32]; char response[32];
int sresponse = sizeof(response)-1;
FILE *stream; FILE *stream;
if(config->noconfirm) { if(config->noconfirm) {
@ -602,7 +603,7 @@ static int question(short preset, char *fmt, va_list args)
return(preset); return(preset);
} }
if(fgets(response, 32, stdin)) { if(fgets(response, sresponse, stdin)) {
strtrim(response); strtrim(response);
if(strlen(response) == 0) { if(strlen(response) == 0) {
return(preset); return(preset);