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: [PATCH][BZ #17657] Return allocated array instead array on stack.


ping
On Wed, Dec 10, 2014 at 04:13:34PM +0100, OndÅej BÃlka wrote:
> On Wed, Dec 10, 2014 at 03:50:53PM +0100, Andreas Schwab wrote:
> > OndÅej BÃlka <neleai@seznam.cz> writes:
> > 
> > > On Wed, Dec 10, 2014 at 03:09:53PM +0100, Andreas Schwab wrote:
> > >> OndÅej BÃlka <neleai@seznam.cz> writes:
> > >> 
> > >> > here we return array on stack which is invalid. OK to fix it in obvious way?
> > >> 
> > >> The obvious way would be a static allocation.
> > >> 
> > > which breaks when user modifies array.
> > 
> > Which user?
> > 
> I meant caller, as I looked at code more caller cannot modify it so
> static allocation is ok. Also found second occurence of same problem.
> 
> 	[BZ #17657]
>         * locale/programs/ld-ctype.c (find_translit2, read_widestring): Return
> 	static array.
> 
> diff --git a/locale/programs/ld-ctype.c b/locale/programs/ld-ctype.c
> index 67846b3..eeaf645 100644
> --- a/locale/programs/ld-ctype.c
> +++ b/locale/programs/ld-ctype.c
> @@ -114,6 +114,9 @@ struct translit_include_t
>    struct translit_include_t *next;
>  };
>  
> +/* Provide some dummy pointer for empty string.  */
> +static uint32_t no_str[] = { 0 };
> +
>  
>  /* Sparse table of uint32_t.  */
>  #define TABLE idx_table
> @@ -1777,7 +1780,7 @@ find_translit2 (struct locale_ctype_t *ctype, const struct charmap_t *charmap,
>  
>  	  for (wi = tirunp->from; wi <= wch; wi += tirunp->step)
>  	    if (wi == wch)
> -	      return (uint32_t []) { 0 };
> +	      return no_str;
>  	}
>      }
>  
> @@ -1831,7 +1834,7 @@ read_widestring (struct linereader *ldfile, struct token *now,
>  
>    if (now->tok == tok_default_missing)
>      /* The special name "" will denote this case.  */
> -    wstr = ((uint32_t *) { 0 });
> +    wstr = no_str;
>    else if (now->tok == tok_bsymbol)
>      {
>        /* Get the value from the repertoire.  */
> @@ -4090,9 +4093,6 @@ allocate_arrays (struct locale_ctype_t *ctype, const struct charmap_t *charmap,
>      }
>    else
>      {
> -      /* Provide some dummy pointers since we have nothing to write out.  */
> -      static uint32_t no_str = { 0 };
> -
>        ctype->translit_from_idx = &no_str;
>        ctype->translit_from_tbl = &no_str;
>        ctype->translit_to_tbl = &no_str;

-- 

Too much radiation coming from the soil.


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