[cfe-commits] r84981 - /cfe/trunk/lib/AST/ASTContext.cpp

Ted Kremenek kremenek at apple.com
Fri Oct 23 18:03:59 PDT 2009


Hi Fariborz,

It's great that you did this, but please don't use alloca.  It's not  
portable, and is strictly prohibited in the LLVM codebase.  Please use  
a SmallVector or something else.

On Oct 23, 2009, at 5:16 PM, Fariborz Jahanian wrote:

> Author: fjahanian
> Date: Fri Oct 23 19:16:42 2009
> New Revision: 84981
>
> URL: http://llvm.org/viewvc/llvm-project?rev=84981&view=rev
> Log:
> Make the local buffer overflow safe.
>
>
> Modified:
>    cfe/trunk/lib/AST/ASTContext.cpp
>
> Modified: cfe/trunk/lib/AST/ASTContext.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTContext.cpp?rev=84981&r1=84980&r2=84981&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- cfe/trunk/lib/AST/ASTContext.cpp (original)
> +++ cfe/trunk/lib/AST/ASTContext.cpp Fri Oct 23 19:16:42 2009
> @@ -2854,11 +2854,10 @@
>   bool HasCopyAndDispose = BlockRequiresCopying(Ty);
>
>   // FIXME: Move up
> -  static int UniqueBlockByRefTypeID = 0;
> -  // FIXME. This is error prone. Luckinly stack-canary stuff caught  
> it.
> -  char Name[128];
> +  static unsigned int UniqueBlockByRefTypeID = 0;
> +  char * Name =
> +    (char*)alloca(strlen("__Block_byref_") + 10 + 1 + strlen 
> (DeclName) + 1);
>   sprintf(Name, "__Block_byref_%d_%s", ++UniqueBlockByRefTypeID,  
> DeclName);
> -  assert((strlen(Name) < sizeof(Name)) && "BuildByRefType - buffer  
> overflow");
>   RecordDecl *T;
>   T = RecordDecl::Create(*this, TagDecl::TK_struct, TUDecl,  
> SourceLocation(),
>                          &Idents.get(Name));
> @@ -2905,11 +2904,10 @@
>   bool BlockHasCopyDispose,
>   llvm::SmallVector<const Expr *, 8> &BlockDeclRefDecls) {
>   // FIXME: Move up
> -  static int UniqueBlockParmTypeID = 0;
> -  // FIXME. This is error prone. Luckinly stack-canary stuff caught  
> it.
> -  char Name[128];
> +  static unsigned int UniqueBlockParmTypeID = 0;
> +  char * Name =
> +    (char*)alloca(strlen("__block_literal_") + 10 + 1);
>   sprintf(Name, "__block_literal_%u", ++UniqueBlockParmTypeID);
> -  assert((strlen(Name) < sizeof(Name)) && "getBlockParmType -  
> buffer overflow");
>   RecordDecl *T;
>   T = RecordDecl::Create(*this, TagDecl::TK_struct, TUDecl,  
> SourceLocation(),
>                          &Idents.get(Name));
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits




More information about the cfe-commits mailing list