This is an automated email from Gerrit.

"Antonio Borneo <borneo.anto...@gmail.com>" just uploaded a new patch set to 
Gerrit, which you can find at https://review.openocd.org/c/openocd/+/7533

-- gerrit

commit 3f953929733378d79ec78282830673806d3e2e6a
Author: Antonio Borneo <borneo.anto...@gmail.com>
Date:   Fri Mar 10 12:01:03 2023 +0100

    svf: fix memory leak on error during command execution
    
    If svf_set_padding() returns error, jump to free_all label to
    prevent any memory leak.
    Propagate the error reported by svf_set_padding() instead of
    overwriting it.
    Use command_print() instead of LOG_ERROR() for command output.
    
    Change-Id: I61fd89cad10652f2f9ef1f9d48a040e35253c3d4
    Signed-off-by: Antonio Borneo <borneo.anto...@gmail.com>

diff --git a/src/svf/svf.c b/src/svf/svf.c
index 05fb21d631..2a13312804 100644
--- a/src/svf/svf.c
+++ b/src/svf/svf.c
@@ -473,27 +473,31 @@ COMMAND_HANDLER(handle_svf_command)
                }
 
                /* HDR %d TDI (0) */
-               if (svf_set_padding(&svf_para.hdr_para, header_dr_len, 0) != 
ERROR_OK) {
-                       LOG_ERROR("failed to set data header");
-                       return ERROR_FAIL;
+               ret = svf_set_padding(&svf_para.hdr_para, header_dr_len, 0);
+               if (ret != ERROR_OK) {
+                       command_print(CMD, "failed to set data header");
+                       goto free_all;
                }
 
                /* HIR %d TDI (0xFF) */
-               if (svf_set_padding(&svf_para.hir_para, header_ir_len, 0xFF) != 
ERROR_OK) {
-                       LOG_ERROR("failed to set instruction header");
-                       return ERROR_FAIL;
+               ret = svf_set_padding(&svf_para.hir_para, header_ir_len, 0xFF);
+               if (ret != ERROR_OK) {
+                       command_print(CMD, "failed to set instruction header");
+                       goto free_all;
                }
 
                /* TDR %d TDI (0) */
-               if (svf_set_padding(&svf_para.tdr_para, trailer_dr_len, 0) != 
ERROR_OK) {
-                       LOG_ERROR("failed to set data trailer");
-                       return ERROR_FAIL;
+               ret = svf_set_padding(&svf_para.tdr_para, trailer_dr_len, 0);
+               if (ret != ERROR_OK) {
+                       command_print(CMD, "failed to set data trailer");
+                       goto free_all;
                }
 
                /* TIR %d TDI (0xFF) */
-               if (svf_set_padding(&svf_para.tir_para, trailer_ir_len, 0xFF) 
!= ERROR_OK) {
-                       LOG_ERROR("failed to set instruction trailer");
-                       return ERROR_FAIL;
+               ret = svf_set_padding(&svf_para.tir_para, trailer_ir_len, 0xFF);
+               if (ret != ERROR_OK) {
+                       command_print(CMD, "failed to set instruction trailer");
+                       goto free_all;
                }
        }
 

-- 

Reply via email to