Code coverage report for DMTF/libspdm
Current view: top level - library/spdm_responder_lib - libspdm_rsp_error.c (source / functions) Coverage Total Hit
Test: 36148b912f76d231c18d216d6dee5c0858575bb1 Lines: 100.0 % 24 24
Test Date: 2026-10-25 08:40:22 Functions: 100.0 % 2 2
Branches: 100.0 % 4 4

             Branch data     Line data    Source code
       1                 :             : /**
       2                 :             :  *  Copyright Notice:
       3                 :             :  *  Copyright 2021-2022 DMTF. All rights reserved.
       4                 :             :  *  License: BSD 3-Clause License. For full text see link: https://github.com/DMTF/libspdm/blob/main/LICENSE.md
       5                 :             :  **/
       6                 :             : 
       7                 :             : #include "internal/libspdm_responder_lib.h"
       8                 :             : 
       9                 :        1276 : libspdm_return_t libspdm_generate_error_response(const void *spdm_context,
      10                 :             :                                                  uint8_t error_code,
      11                 :             :                                                  uint8_t error_data,
      12                 :             :                                                  size_t *response_size,
      13                 :             :                                                  void *response)
      14                 :             : {
      15                 :             :     spdm_error_response_t *spdm_response;
      16                 :             : 
      17                 :        1276 :     LIBSPDM_ASSERT(*response_size >= sizeof(spdm_error_response_t));
      18                 :        1276 :     *response_size = sizeof(spdm_error_response_t);
      19                 :        1276 :     spdm_response = response;
      20                 :             : 
      21                 :        1276 :     spdm_response->header.spdm_version = libspdm_get_connection_version (spdm_context);
      22         [ +  + ]:        1276 :     if (spdm_response->header.spdm_version == 0) {
      23                 :             :         /* if version is not negotiated, then use default version 1.0 */
      24                 :          44 :         spdm_response->header.spdm_version = SPDM_MESSAGE_VERSION_10;
      25                 :             :     }
      26                 :        1276 :     spdm_response->header.request_response_code = SPDM_ERROR;
      27                 :        1276 :     spdm_response->header.param1 = error_code;
      28                 :        1276 :     spdm_response->header.param2 = error_data;
      29                 :             : 
      30         [ +  + ]:        1276 :     if (spdm_response->header.spdm_version <= SPDM_MESSAGE_VERSION_11) {
      31                 :         824 :         LIBSPDM_ASSERT ((error_code != SPDM_ERROR_CODE_RESPONSE_TOO_LARGE) &&
      32                 :             :                         (error_code != SPDM_ERROR_CODE_LARGE_RESPONSE));
      33                 :             :     }
      34                 :             : 
      35                 :        1276 :     return LIBSPDM_STATUS_SUCCESS;
      36                 :             : }
      37                 :             : 
      38                 :          50 : libspdm_return_t libspdm_generate_extended_error_response(
      39                 :             :     const void *spdm_context, uint8_t error_code, uint8_t error_data,
      40                 :             :     size_t extended_error_data_size, const uint8_t *extended_error_data,
      41                 :             :     size_t *response_size, void *response)
      42                 :             : {
      43                 :             :     spdm_error_response_t *spdm_response;
      44                 :             :     size_t response_capacity;
      45                 :             : 
      46                 :          50 :     LIBSPDM_ASSERT(*response_size >=
      47                 :             :                    sizeof(spdm_error_response_t) + extended_error_data_size);
      48                 :          50 :     response_capacity = *response_size;
      49                 :          50 :     *response_size = sizeof(spdm_error_response_t) + extended_error_data_size;
      50                 :          50 :     spdm_response = response;
      51                 :             : 
      52                 :          50 :     spdm_response->header.spdm_version = libspdm_get_connection_version (spdm_context);
      53                 :          50 :     spdm_response->header.request_response_code = SPDM_ERROR;
      54                 :          50 :     spdm_response->header.param1 = error_code;
      55                 :          50 :     spdm_response->header.param2 = error_data;
      56                 :          50 :     libspdm_copy_mem(spdm_response + 1, response_capacity - sizeof(spdm_error_response_t),
      57                 :             :                      extended_error_data, extended_error_data_size);
      58                 :             : 
      59                 :          50 :     return LIBSPDM_STATUS_SUCCESS;
      60                 :             : }
        

Generated by: LCOV version 2.0-1