Pacman-g2'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 <[email protected]> --- lib/libpacman/be_files.c | 23 ++++++++++++----------- lib/libpacman/util.c | 12 ++++++++---- src/pacman-g2/log.c | 3 ++- 3 files changed, 22 insertions(+), 16 deletions(-) diff --git a/lib/libpacman/be_files.c b/lib/libpacman/be_files.c index 55c5744..3fedaad 100644 --- a/lib/libpacman/be_files.c +++ b/lib/libpacman/be_files.c @@ -218,6 +218,7 @@ int _pacman_db_read(pmdb_t *db, unsigned int inforeq, pmpkg_t *info) struct stat buf; char path[PATH_MAX]; char line[512]; + int sline = sizeof(line)-1; pmlist_t *i; char *ptr; @@ -250,7 +251,7 @@ int _pacman_db_read(pmdb_t *db, unsigned int inforeq, pmpkg_t *info) } _pacman_strtrim(line); if(!strcmp(line, "%DESC%")) { - while(fgets(line, 512, fp) && strlen(_pacman_strtrim(line))) { + while(fgets(line, sline, fp) && strlen(_pacman_strtrim(line))) { info->desc_localized = _pacman_list_add(info->desc_localized, strdup(line)); } STRNCPY(info->desc, (char*)info->desc_localized->data, sizeof(info->desc)); @@ -262,7 +263,7 @@ int _pacman_db_read(pmdb_t *db, unsigned int inforeq, pmpkg_t *info) } _pacman_strtrim(info->desc); } else if(!strcmp(line, "%GROUPS%")) { - while(fgets(line, 512, fp) && strlen(_pacman_strtrim(line))) { + while(fgets(line, sline, fp) && strlen(_pacman_strtrim(line))) { info->groups = _pacman_list_add(info->groups, strdup(line)); } } else if(!strcmp(line, "%URL%")) { @@ -271,7 +272,7 @@ int _pacman_db_read(pmdb_t *db, unsigned int inforeq, pmpkg_t *info) } _pacman_strtrim(info->url); } else if(!strcmp(line, "%LICENSE%")) { - while(fgets(line, 512, fp) && strlen(_pacman_strtrim(line))) { + while(fgets(line, sline, fp) && strlen(_pacman_strtrim(line))) { info->license = _pacman_list_add(info->license, strdup(line)); } } else if(!strcmp(line, "%ARCH%")) { @@ -346,7 +347,7 @@ int _pacman_db_read(pmdb_t *db, unsigned int inforeq, pmpkg_t *info) } else if(!strcmp(line, "%REPLACES%")) { /* the REPLACES tag is special -- it only appears in sync repositories, * not the local one. */ - while(fgets(line, 512, fp) && strlen(_pacman_strtrim(line))) { + while(fgets(line, sline, fp) && strlen(_pacman_strtrim(line))) { info->replaces = _pacman_list_add(info->replaces, strdup(line)); } } else if(!strcmp(line, "%FORCE%")) { @@ -374,7 +375,7 @@ int _pacman_db_read(pmdb_t *db, unsigned int inforeq, pmpkg_t *info) while(fgets(line, 256, fp)) { _pacman_strtrim(line); if(!strcmp(line, "%FILES%")) { - while(fgets(line, 512, fp) && strlen(_pacman_strtrim(line))) { + while(fgets(line, sline, fp) && strlen(_pacman_strtrim(line))) { if((ptr = strchr(line, '|'))) { /* just ignore the content after the pipe for now */ *ptr = '\0'; @@ -382,7 +383,7 @@ int _pacman_db_read(pmdb_t *db, unsigned int inforeq, pmpkg_t *info) info->files = _pacman_list_add(info->files, strdup(line)); } } else if(!strcmp(line, "%BACKUP%")) { - while(fgets(line, 512, fp) && strlen(_pacman_strtrim(line))) { + while(fgets(line, sline, fp) && strlen(_pacman_strtrim(line))) { info->backup = _pacman_list_add(info->backup, strdup(line)); } } @@ -403,25 +404,25 @@ int _pacman_db_read(pmdb_t *db, unsigned int inforeq, pmpkg_t *info) fgets(line, 255, fp); _pacman_strtrim(line); if(!strcmp(line, "%DEPENDS%")) { - while(fgets(line, 512, fp) && strlen(_pacman_strtrim(line))) { + while(fgets(line, sline, fp) && strlen(_pacman_strtrim(line))) { info->depends = _pacman_list_add(info->depends, strdup(line)); } } else if(!strcmp(line, "%REQUIREDBY%")) { - while(fgets(line, 512, fp) && strlen(_pacman_strtrim(line))) { + while(fgets(line, sline, fp) && strlen(_pacman_strtrim(line))) { info->requiredby = _pacman_list_add(info->requiredby, strdup(line)); } } else if(!strcmp(line, "%CONFLICTS%")) { - while(fgets(line, 512, fp) && strlen(_pacman_strtrim(line))) { + while(fgets(line, sline, fp) && strlen(_pacman_strtrim(line))) { info->conflicts = _pacman_list_add(info->conflicts, strdup(line)); } } else if(!strcmp(line, "%PROVIDES%")) { - while(fgets(line, 512, fp) && strlen(_pacman_strtrim(line))) { + while(fgets(line, sline, fp) && strlen(_pacman_strtrim(line))) { info->provides = _pacman_list_add(info->provides, strdup(line)); } } else if(!strcmp(line, "%REPLACES%")) { /* the REPLACES tag is special -- it only appears in sync repositories, * not the local one. */ - while(fgets(line, 512, fp) && strlen(_pacman_strtrim(line))) { + while(fgets(line, sline, fp) && strlen(_pacman_strtrim(line))) { info->replaces = _pacman_list_add(info->replaces, strdup(line)); } } else if(!strcmp(line, "%FORCE%")) { diff --git a/lib/libpacman/util.c b/lib/libpacman/util.c index b763445..44feb17 100644 --- a/lib/libpacman/util.c +++ b/lib/libpacman/util.c @@ -411,10 +411,11 @@ int _pacman_rmrf(char *path) int _pacman_logaction(unsigned char usesyslog, FILE *f, char *fmt, ...) { char msg[1024]; + int smsg = sizeof(msg)-1; va_list args; va_start(args, fmt); - vsnprintf(msg, 1024, fmt, args); + vsnprintf(msg, smsg, fmt, args); va_end(args); if(usesyslog) { @@ -468,7 +469,8 @@ static int grep(const char *fn, const char *needle) } while(!feof(fp)) { char line[1024]; - fgets(line, 1024, fp); + int sline = sizeof(line)-1; + fgets(line, sline, fp); if(feof(fp)) { continue; } @@ -573,7 +575,8 @@ int _pacman_runscriptlet(char *root, char *installfn, char *script, char *ver, c } while(!feof(pp)) { char line[1024]; - if(fgets(line, 1024, pp) == NULL) + sline = sizeof(line)-1; + if(fgets(line, sline, pp) == NULL) break; /* "START <event desc>" */ if((strlen(line) > strlen(STARTSTR)) && !strncmp(line, STARTSTR, strlen(STARTSTR))) { @@ -681,7 +684,8 @@ int _pacman_runhook(char *root, char *hookdir, char *hookname, pmtrans_t *trans) } while(!feof(pp)) { char line[1024]; - if(fgets(line, 1024, pp) == NULL) + sline = sizeof(line)-1; + if(fgets(line, sline, pp) == NULL) break; /* "START <event desc>" */ if((strlen(line) > strlen(STARTSTR)) && !strncmp(line, STARTSTR, strlen(STARTSTR))) { diff --git a/src/pacman-g2/log.c b/src/pacman-g2/log.c index 5b3cb36..183c3d0 100644 --- a/src/pacman-g2/log.c +++ b/src/pacman-g2/log.c @@ -133,6 +133,7 @@ int yesno(char *fmt, ...) { char str[LOG_STR_LEN]; char response[32]; + int sresponse = sizeof(response)-1; va_list args; if(config->noconfirm) { @@ -144,7 +145,7 @@ int yesno(char *fmt, ...) va_end(args); pm_fprintf(stderr, NL, str); - if(fgets(response, 32, stdin)) { + if(fgets(response, sresponse, stdin)) { /* trim whitespace and newlines */ char *pch = response; while(isspace(*pch)) { -- 1.6.5 _______________________________________________ Frugalware-devel mailing list [email protected] http://frugalware.org/mailman/listinfo/frugalware-devel
