This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
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.