This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Use size_t instead of int for internal variables in glob (bug 14621)


On Tue, Sep 25, 2012 at 6:18 PM, Joseph S. Myers
<joseph@codesourcery.com> wrote:
> Carlos, is this version of this patch (for a likely security bug) OK for
> 2.16 branch?  Tested x86_64 and x86.
>
> diff --git a/ChangeLog b/ChangeLog
> index 5e818a9..bab83fa 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,3 +1,11 @@
> +2012-09-25  Joseph Myers  <joseph@codesourcery.com>
> +
> +       [BZ #14621]
> +       * posix/glob.c (next_brace_sub): Use size_t instead of unsigned
> +       int as type of variable DEPTH.
> +       (glob): Use size_t instead of int as type of variables NEWCOUNT
> +       and OLD_PATHC.
> +
>  2012-08-29  H.J. Lu  <hongjiu.lu@intel.com>
>
>         [BZ #14476]
> diff --git a/NEWS b/NEWS
> index ecb9350..7cfb812 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -9,7 +9,7 @@ Version 2.16.1
>
>  * The following bugs are resolved with this release:
>
> -  14195, 14459, 14476
> +  14195, 14459, 14476, 14621
>
>  Version 2.16
>
> diff --git a/posix/glob.c b/posix/glob.c
> index 68ea205..87d4f1b 100644
> --- a/posix/glob.c
> +++ b/posix/glob.c
> @@ -217,7 +217,7 @@ static int collated_compare (const void *, const void *) __THROW;
>  static const char *
>  next_brace_sub (const char *cp, int flags)
>  {
> -  unsigned int depth = 0;
> +  size_t depth = 0;
>    while (*cp != '\0')
>      if ((flags & GLOB_NOESCAPE) == 0 && *cp == '\\')
>        {
> @@ -960,7 +960,7 @@ glob (pattern, flags, errfunc, pglob)
>                   && S_ISDIR (st.st_mode))
>                : (__stat64 (dirname, &st64) == 0 && S_ISDIR (st64.st_mode)))))
>         {
> -         int newcount = pglob->gl_pathc + pglob->gl_offs;
> +         size_t newcount = pglob->gl_pathc + pglob->gl_offs;
>           char **new_gl_pathv;
>
>           if (newcount > UINTPTR_MAX - (1 + 1)
> @@ -1059,7 +1059,7 @@ glob (pattern, flags, errfunc, pglob)
>          appending the results to PGLOB.  */
>        for (i = 0; i < dirs.gl_pathc; ++i)
>         {
> -         int old_pathc;
> +         size_t old_pathc;
>
>  #ifdef SHELL
>           {
> @@ -1114,7 +1114,7 @@ glob (pattern, flags, errfunc, pglob)
>           /* No matches.  */
>           if (flags & GLOB_NOCHECK)
>             {
> -             int newcount = pglob->gl_pathc + pglob->gl_offs;
> +             size_t newcount = pglob->gl_pathc + pglob->gl_offs;
>               char **new_gl_pathv;
>
>               if (newcount > UINTPTR_MAX - 2
> @@ -1158,7 +1158,7 @@ glob (pattern, flags, errfunc, pglob)
>      }
>    else
>      {
> -      int old_pathc = pglob->gl_pathc;
> +      size_t old_pathc = pglob->gl_pathc;
>        int orig_flags = flags;
>
>        if (meta & 2)
>

Reviewed the old_pathc and newcount are the only non-size_t variables
that are used with size_t glob_t values.

This looks good for 2.16.

Cheers,
Carlos.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]