[pacman-dev] [PATCH] Size handling was changed in fgets() functions

Dan McGee dpmcgee at gmail.com
Sun Oct 18 21:35:28 EDT 2009


On Sat, Oct 17, 2009 at 4:54 PM, Laszlo Papp <djszapi2 at gmail.com> wrote:
> 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 at archlinux.us>
> ---

Doesn't apply to git HEAD...

dmcgee at galway ~/projects/pacman (master)
$ git am -3 -s < /tmp/pacman-sizeof.patch
Applying: Size handling was changed in fgets() functions
Using index info to reconstruct a base tree...
error: patch failed: lib/libalpm/trans.c:320
error: lib/libalpm/trans.c: patch does not apply
error: patch failed: src/pacman/util.c:580
error: src/pacman/util.c: patch does not apply
Did you hand edit your patch?
It does not apply to blobs recorded in its index.
Cannot fall back to three-way merge.
Patch failed at 0001 Size handling was changed in fgets() functions
When you have resolved this problem run "git am -3 --resolved".
If you would prefer to skip this patch, instead run "git am -3 --skip".
To restore the original branch and stop patching run "git am -3 --abort".



>  lib/libalpm/be_files.c |   49 ++++++++++++++++++++++++-----------------------
>  lib/libalpm/trans.c    |    3 +-
>  src/pacman/util.c      |    3 +-
>  3 files changed, 29 insertions(+), 26 deletions(-)
>
> diff --git a/lib/libalpm/be_files.c b/lib/libalpm/be_files.c
> index 53bbda1..ffbaa8d 100644
> --- a/lib/libalpm/be_files.c
> +++ b/lib/libalpm/be_files.c
> @@ -387,6 +387,7 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
>        FILE *fp = NULL;
>        char path[PATH_MAX];
>        char line[513];
> +       int     sline = sizeof(line)-1;
>        char *pkgpath = NULL;
>
>        ALPM_LOG_FUNC;
> @@ -418,7 +419,7 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
>                        info->name, inforeq);
>
>        /* 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);
>
> @@ -442,7 +443,7 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
>                        }
>                        _alpm_strtrim(line);
>                        if(strcmp(line, "%NAME%") == 0) {
> -                               if(fgets(line, 512, fp) == NULL) {
> +                               if(fgets(line, sline, fp) == NULL) {
>                                        goto error;
>                                }
>                                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);
>                                }
>                        } else if(strcmp(line, "%VERSION%") == 0) {
> -                               if(fgets(line, 512, fp) == NULL) {
> +                               if(fgets(line, sline, fp) == NULL) {
>                                        goto error;
>                                }
>                                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);
>                                }
>                        } else if(strcmp(line, "%FILENAME%") == 0) {
> -                               if(fgets(line, 512, fp) == NULL) {
> +                               if(fgets(line, sline, fp) == NULL) {
>                                        goto error;
>                                }
>                                STRDUP(info->filename, _alpm_strtrim(line), goto error);
>                        } else if(strcmp(line, "%DESC%") == 0) {
> -                               if(fgets(line, 512, fp) == NULL) {
> +                               if(fgets(line, sline, fp) == NULL) {
>                                        goto error;
>                                }
>                                STRDUP(info->desc, _alpm_strtrim(line), goto error);
>                        } 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;
>                                        STRDUP(linedup, _alpm_strtrim(line), goto error);
>                                        info->groups = alpm_list_add(info->groups, linedup);
>                                }
>                        } else if(strcmp(line, "%URL%") == 0) {
> -                               if(fgets(line, 512, fp) == NULL) {
> +                               if(fgets(line, sline, fp) == NULL) {
>                                        goto error;
>                                }
>                                STRDUP(info->url, _alpm_strtrim(line), goto error);
>                        } 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;
>                                        STRDUP(linedup, _alpm_strtrim(line), goto error);
>                                        info->licenses = alpm_list_add(info->licenses, linedup);
>                                }
>                        } else if(strcmp(line, "%ARCH%") == 0) {
> -                               if(fgets(line, 512, fp) == NULL) {
> +                               if(fgets(line, sline, fp) == NULL) {
>                                        goto error;
>                                }
>                                STRDUP(info->arch, _alpm_strtrim(line), goto error);
>                        } else if(strcmp(line, "%BUILDDATE%") == 0) {
> -                               if(fgets(line, 512, fp) == NULL) {
> +                               if(fgets(line, sline, fp) == NULL) {
>                                        goto error;
>                                }
>                                _alpm_strtrim(line);
> @@ -506,7 +507,7 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
>                                        info->builddate = atol(line);
>                                }
>                        } else if(strcmp(line, "%INSTALLDATE%") == 0) {
> -                               if(fgets(line, 512, fp) == NULL) {
> +                               if(fgets(line, sline, fp) == NULL) {
>                                        goto error;
>                                }
>                                _alpm_strtrim(line);
> @@ -522,12 +523,12 @@ int _alpm_db_read(pmdb_t *db, pmpkg_t *info, pmdbinfrq_t inforeq)
>                                        info->installdate = atol(line);
>                                }
>                        } else if(strcmp(line, "%PACKAGER%") == 0) {
> -                               if(fgets(line, 512, fp) == NULL) {
> +                               if(fgets(line, sline, fp) == NULL) {
>                                        goto error;
>                                }
>                                STRDUP(info->packager, _alpm_strtrim(line), goto error);
>                        } else if(strcmp(line, "%REASON%") == 0) {
> -                               if(fgets(line, 512, fp) == NULL) {
> +                               if(fgets(line, sline, fp) == NULL) {
>                                        goto error;
>                                }
>                                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
>                                 *       only used in local databases.
>                                 */
> -                               if(fgets(line, 512, fp) == NULL) {
> +                               if(fgets(line, sline, fp) == NULL) {
>                                        goto error;
>                                }
>                                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) {
>                                /* ISIZE (installed size) tag only appears in sync repositories,
>                                 * not the local one. */
> -                               if(fgets(line, 512, fp) == NULL) {
> +                               if(fgets(line, sline, fp) == NULL) {
>                                        goto error;
>                                }
>                                info->isize = atol(_alpm_strtrim(line));
>                        } else if(strcmp(line, "%MD5SUM%") == 0) {
>                                /* MD5SUM tag only appears in sync repositories,
>                                 * not the local one. */
> -                               if(fgets(line, 512, fp) == NULL) {
> +                               if(fgets(line, sline, fp) == NULL) {
>                                        goto error;
>                                }
>                                STRDUP(info->md5sum, _alpm_strtrim(line), goto error);
>                        } 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;
>                                        STRDUP(linedup, _alpm_strtrim(line), goto error);
>                                        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)) {
>                        _alpm_strtrim(line);
>                        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;
>                                        STRDUP(linedup, _alpm_strtrim(line), goto error);
>                                        info->files = alpm_list_add(info->files, linedup);
>                                }
>                        } 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;
>                                        STRDUP(linedup, _alpm_strtrim(line), goto error);
>                                        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);
>                        _alpm_strtrim(line);
>                        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));
>                                        info->depends = alpm_list_add(info->depends, dep);
>                                }
>                        } 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;
>                                        STRDUP(linedup, _alpm_strtrim(line), goto error);
>                                        info->optdepends = alpm_list_add(info->optdepends, linedup);
>                                }
>                        } 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;
>                                        STRDUP(linedup, _alpm_strtrim(line), goto error);
>                                        info->conflicts = alpm_list_add(info->conflicts, linedup);
>                                }
>                        } 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;
>                                        STRDUP(linedup, _alpm_strtrim(line), goto error);
>                                        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);
>                                _alpm_strtrim(line);
>                                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);
>                                                if(delta) {
>                                                        info->deltas = alpm_list_add(info->deltas, delta);
> diff --git a/lib/libalpm/trans.c b/lib/libalpm/trans.c
> index 65bd464..aea71db 100644
> --- a/lib/libalpm/trans.c
> +++ b/lib/libalpm/trans.c
> @@ -320,7 +320,8 @@ static int grep(const char *fn, const char *needle)
>        }
>        while(!feof(fp)) {
>                char line[1025];
> -               fgets(line, 1024, fp);
> +               int sline = sizeof(line)-1;
> +               fgets(line, sline, fp);
>                if(feof(fp)) {
>                        continue;
>                }
> diff --git a/src/pacman/util.c b/src/pacman/util.c
> index 0e5e7f5..1143bef 100644
> --- a/src/pacman/util.c
> +++ b/src/pacman/util.c
> @@ -580,6 +580,7 @@ void display_optdepends(pmpkg_t *pkg)
>  static int question(short preset, char *fmt, va_list args)
>  {
>        char response[33];
> +       int sresponse = sizeof(response)-1;
>        FILE *stream;
>
>        if(config->noconfirm) {
> @@ -602,7 +603,7 @@ static int question(short preset, char *fmt, va_list args)
>                return(preset);
>        }
>
> -       if(fgets(response, 32, stdin)) {
> +       if(fgets(response, sresponse, stdin)) {
>                strtrim(response);
>                if(strlen(response) == 0) {
>                        return(preset);
> --
> 1.6.4.4
>
>
>


More information about the pacman-dev mailing list