On some systems where the system compiler enables `-Wformat-security -Werror=format-security` options by default, building libcpp fails because the code passes a variable directly as a format string. This change addresses this problem by patching the affected code. Tested with the default compiler of Nixpkgs unstable, GCC 9.3.0 with the options described above enabled by default. Signed-off-by: Masanori Ogino <mogino@acm.org> Change-Id: Ibf3c9e79ce10cd400c9f7ea40dd6de1ab81b50e2 Reviewed-on: https://review.coreboot.org/c/coreboot/+/45311 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net> Reviewed-by: Angel Pons <th3fanbus@gmail.com>
		
			
				
	
	
		
			57 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| GCC with `-Wformat-security -Werror=format-security` hardening options enabled
 | |
| by default rejects some codes in libcpp. This patch fixes them.
 | |
| 
 | |
| --- gcc-8.3.0/libcpp/expr.c.bak	2020-09-11 15:44:45.770000000 +0900
 | |
| +++ gcc-8.3.0/libcpp/expr.c	2020-09-11 15:46:22.370000000 +0900
 | |
| @@ -794,10 +794,10 @@
 | |
|  
 | |
|  	  if (CPP_OPTION (pfile, c99))
 | |
|              cpp_warning_with_line (pfile, CPP_W_LONG_LONG, virtual_location,
 | |
| -				   0, message);
 | |
| +				   0, "%s", message);
 | |
|            else
 | |
|              cpp_pedwarning_with_line (pfile, CPP_W_LONG_LONG,
 | |
| -				      virtual_location, 0, message);
 | |
| +				      virtual_location, 0, "%s", message);
 | |
|          }
 | |
|  
 | |
|        result |= CPP_N_INTEGER;
 | |
| --- gcc-8.3.0/libcpp/macro.c.bak	2020-09-11 16:01:42.550000000 +0900
 | |
| +++ gcc-8.3.0/libcpp/macro.c	2020-09-11 16:03:47.850000000 +0900
 | |
| @@ -160,7 +160,7 @@
 | |
|  	if (m_state == 2 && token->type == CPP_PASTE)
 | |
|  	  {
 | |
|  	    cpp_error_at (m_pfile, CPP_DL_ERROR, token->src_loc,
 | |
| -			  vaopt_paste_error);
 | |
| +			  "%s", vaopt_paste_error);
 | |
|  	    return ERROR;
 | |
|  	  }
 | |
|  	/* Advance states before further considering this token, in
 | |
| @@ -189,7 +189,7 @@
 | |
|  		if (was_paste)
 | |
|  		  {
 | |
|  		    cpp_error_at (m_pfile, CPP_DL_ERROR, token->src_loc,
 | |
| -				  vaopt_paste_error);
 | |
| +				  "%s", vaopt_paste_error);
 | |
|  		    return ERROR;
 | |
|  		  }
 | |
|  
 | |
| @@ -3361,7 +3361,7 @@
 | |
|  	     function-like macros, but not at the end.  */
 | |
|  	  if (following_paste_op)
 | |
|  	    {
 | |
| -	      cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
 | |
| +	      cpp_error (pfile, CPP_DL_ERROR, "%s", paste_op_error_msg);
 | |
|  	      return false;
 | |
|  	    }
 | |
|  	  break;
 | |
| @@ -3374,7 +3374,7 @@
 | |
|  	     function-like macros, but not at the beginning.  */
 | |
|  	  if (macro->count == 1)
 | |
|  	    {
 | |
| -	      cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
 | |
| +	      cpp_error (pfile, CPP_DL_ERROR, "%s", paste_op_error_msg);
 | |
|  	      return false;
 | |
|  	    }
 | |
|  
 |