From d8bdd16779b4b7de6e73fb680f793e43921bfcd0 Mon Sep 17 00:00:00 2001 From: g00525463 Date: Tue, 22 Jun 2021 16:13:54 +0800 Subject: [PATCH 1/2] [Huawei]add null-dereference check Offering: GaussDB Kernel More detail: check null cases to avoid crash --- DriverManager/SQLGetDiagField.c | 6 +++++- DriverManager/SQLGetStmtAttr.c | 4 ++++ DriverManager/SQLGetStmtOption.c | 4 ++++ DriverManager/SQLParamOptions.c | 4 ++++ 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/DriverManager/SQLGetDiagField.c b/DriverManager/SQLGetDiagField.c index 58a253c..a0cc2b7 100644 --- a/DriverManager/SQLGetDiagField.c +++ b/DriverManager/SQLGetDiagField.c @@ -701,12 +701,16 @@ static SQLRETURN extract_sql_error_field( EHEAD *head, { strcpy( diag_info_ptr, str ); } - else + else if (buffer_length > 0) { ret = SQL_SUCCESS_WITH_INFO; memcpy( diag_info_ptr, str, buffer_length - 1 ); (( char * ) diag_info_ptr )[ buffer_length - 1 ] = '\0'; } + else + { + return SQL_ERROR; + } } if ( string_length_ptr ) { diff --git a/DriverManager/SQLGetStmtAttr.c b/DriverManager/SQLGetStmtAttr.c index a03e1f8..30e2bed 100644 --- a/DriverManager/SQLGetStmtAttr.c +++ b/DriverManager/SQLGetStmtAttr.c @@ -188,6 +188,10 @@ SQLRETURN SQLGetStmtAttr( SQLHSTMT statement_handle, SQLRETURN ret; SQLCHAR s1[ 100 + LOG_MESSAGE_LEN ]; + if (value == NULL) { + return SQL_ERROR; + } + /* * check statement */ diff --git a/DriverManager/SQLGetStmtOption.c b/DriverManager/SQLGetStmtOption.c index 04fcdc8..d2ca7a9 100644 --- a/DriverManager/SQLGetStmtOption.c +++ b/DriverManager/SQLGetStmtOption.c @@ -132,6 +132,10 @@ SQLRETURN SQLGetStmtOption( SQLHSTMT statement_handle, * check statement */ + if (value == NULL) { + return SQL_ERROR; + } + if ( !__validate_stmt( statement )) { dm_log_write( __FILE__, diff --git a/DriverManager/SQLParamOptions.c b/DriverManager/SQLParamOptions.c index cffa233..9efea1c 100644 --- a/DriverManager/SQLParamOptions.c +++ b/DriverManager/SQLParamOptions.c @@ -141,6 +141,10 @@ SQLRETURN SQLParamOptions( * check statement */ + if (statement->connection->driver_act_ver != SQL_OV_ODBC2) { + return SQL_ERROR; + } + if ( !__validate_stmt( statement )) { dm_log_write( __FILE__, -- 2.23.0