mirror of
				https://github.com/Mbed-TLS/mbedtls.git
				synced 2025-10-30 10:45:34 +03:00 
			
		
		
		
	Add a missing guard for the definition and declaration of mbedtls_test_hook_error_add. Also make the declaration always visible when MBEDTLS_TEST_HOOKS is enabled. This fixes an issue when MBEDTLS_ERROR_C is not defined but MBEDTLS_TEST_HOOKS is. Signed-off-by: Chris Jones <christopher.jones@arm.com>
		
			
				
	
	
		
			170 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			170 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| /*
 | |
|  *  Error message information
 | |
|  *
 | |
|  *  Copyright The Mbed TLS Contributors
 | |
|  *  SPDX-License-Identifier: Apache-2.0
 | |
|  *
 | |
|  *  Licensed under the Apache License, Version 2.0 (the "License"); you may
 | |
|  *  not use this file except in compliance with the License.
 | |
|  *  You may obtain a copy of the License at
 | |
|  *
 | |
|  *  http://www.apache.org/licenses/LICENSE-2.0
 | |
|  *
 | |
|  *  Unless required by applicable law or agreed to in writing, software
 | |
|  *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | |
|  *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
|  *  See the License for the specific language governing permissions and
 | |
|  *  limitations under the License.
 | |
|  */
 | |
| 
 | |
| #include "common.h"
 | |
| 
 | |
| #include "mbedtls/error.h"
 | |
| 
 | |
| #if defined(MBEDTLS_ERROR_C) || defined(MBEDTLS_ERROR_STRERROR_DUMMY)
 | |
| 
 | |
| #if defined(MBEDTLS_ERROR_C)
 | |
| 
 | |
| #if defined(MBEDTLS_PLATFORM_C)
 | |
| #include "mbedtls/platform.h"
 | |
| #else
 | |
| #define mbedtls_snprintf snprintf
 | |
| #endif
 | |
| 
 | |
| #include <stdio.h>
 | |
| #include <string.h>
 | |
| 
 | |
| HEADER_INCLUDED
 | |
| 
 | |
| const char * mbedtls_high_level_strerr( int error_code )
 | |
| {
 | |
|     int high_level_error_code;
 | |
| 
 | |
|     if( error_code < 0 )
 | |
|         error_code = -error_code;
 | |
| 
 | |
|     /* Extract the high-level part from the error code. */
 | |
|     high_level_error_code = error_code & 0xFF80;
 | |
| 
 | |
|     switch( high_level_error_code )
 | |
|     {
 | |
|         /* Begin Auto-Generated Code. */
 | |
| HIGH_LEVEL_CODE_CHECKS
 | |
|         /* End Auto-Generated Code. */
 | |
| 
 | |
|         default:
 | |
|             break;
 | |
|     }
 | |
| 
 | |
|     return( NULL );
 | |
| }
 | |
| 
 | |
| const char * mbedtls_low_level_strerr( int error_code )
 | |
| {
 | |
|     int low_level_error_code;
 | |
| 
 | |
|     if( error_code < 0 )
 | |
|         error_code = -error_code;
 | |
| 
 | |
|     /* Extract the low-level part from the error code. */
 | |
|     low_level_error_code = error_code & ~0xFF80;
 | |
| 
 | |
|     switch( low_level_error_code )
 | |
|     {
 | |
|         /* Begin Auto-Generated Code. */
 | |
| LOW_LEVEL_CODE_CHECKS
 | |
|         /* End Auto-Generated Code. */
 | |
| 
 | |
|         default:
 | |
|             break;
 | |
|     }
 | |
| 
 | |
|     return( NULL );
 | |
| }
 | |
| 
 | |
| void mbedtls_strerror( int ret, char *buf, size_t buflen )
 | |
| {
 | |
|     size_t len;
 | |
|     int use_ret;
 | |
|     const char * high_level_error_description = NULL;
 | |
|     const char * low_level_error_description = NULL;
 | |
| 
 | |
|     if( buflen == 0 )
 | |
|         return;
 | |
| 
 | |
|     memset( buf, 0x00, buflen );
 | |
| 
 | |
|     if( ret < 0 )
 | |
|         ret = -ret;
 | |
| 
 | |
|     if( ret & 0xFF80 )
 | |
|     {
 | |
|         use_ret = ret & 0xFF80;
 | |
| 
 | |
|         // Translate high level error code.
 | |
|         high_level_error_description = mbedtls_high_level_strerr( ret );
 | |
| 
 | |
|         if( high_level_error_description == NULL )
 | |
|             mbedtls_snprintf( buf, buflen, "UNKNOWN ERROR CODE (%04X)", (unsigned int) use_ret );
 | |
|         else
 | |
|             mbedtls_snprintf( buf, buflen, "%s", high_level_error_description );
 | |
| 
 | |
| #if defined(MBEDTLS_SSL_TLS_C)
 | |
|         // Early return in case of a fatal error - do not try to translate low
 | |
|         // level code.
 | |
|         if(use_ret == -(MBEDTLS_ERR_SSL_FATAL_ALERT_MESSAGE))
 | |
|             return;
 | |
| #endif /* MBEDTLS_SSL_TLS_C */
 | |
|     }
 | |
| 
 | |
|     use_ret = ret & ~0xFF80;
 | |
| 
 | |
|     if( use_ret == 0 )
 | |
|         return;
 | |
| 
 | |
|     // If high level code is present, make a concatenation between both
 | |
|     // error strings.
 | |
|     //
 | |
|     len = strlen( buf );
 | |
| 
 | |
|     if( len > 0 )
 | |
|     {
 | |
|         if( buflen - len < 5 )
 | |
|             return;
 | |
| 
 | |
|         mbedtls_snprintf( buf + len, buflen - len, " : " );
 | |
| 
 | |
|         buf += len + 3;
 | |
|         buflen -= len + 3;
 | |
|     }
 | |
| 
 | |
|     // Translate low level error code.
 | |
|     low_level_error_description = mbedtls_low_level_strerr( ret );
 | |
| 
 | |
|     if( low_level_error_description == NULL )
 | |
|         mbedtls_snprintf( buf, buflen, "UNKNOWN ERROR CODE (%04X)", (unsigned int) use_ret );
 | |
|     else
 | |
|         mbedtls_snprintf( buf, buflen, "%s", low_level_error_description );
 | |
| }
 | |
| 
 | |
| #else /* MBEDTLS_ERROR_C */
 | |
| 
 | |
| /*
 | |
|  * Provide an non-function in case MBEDTLS_ERROR_C is not defined
 | |
|  */
 | |
| void mbedtls_strerror( int ret, char *buf, size_t buflen )
 | |
| {
 | |
|     ((void) ret);
 | |
| 
 | |
|     if( buflen > 0 )
 | |
|         buf[0] = '\0';
 | |
| }
 | |
| 
 | |
| #endif /* MBEDTLS_ERROR_C */
 | |
| 
 | |
| #if defined(MBEDTLS_TEST_HOOKS)
 | |
| void (*mbedtls_test_hook_error_add)( int, int, const char *, int );
 | |
| #endif
 | |
| 
 | |
| #endif /* MBEDTLS_ERROR_C || MBEDTLS_ERROR_STRERROR_DUMMY */
 |