You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/dev-db/unixODBC/files/unixODBC-2.3.5-CVE-2018-748...

136 lines
5.1 KiB

From 45ef78e037f578b15fc58938a3a3251655e71d6f Mon Sep 17 00:00:00 2001
From: Nick Gorham <nick@lurcher.ink.org>
Date: Mon, 8 Jan 2018 11:12:39 +0000
Subject: [PATCH] New Pre Source
diff --git a/DriverManager/SQLGetDiagRecW.c b/DriverManager/SQLGetDiagRecW.c
index a6368d7..be89120 100644
--- a/DriverManager/SQLGetDiagRecW.c
+++ b/DriverManager/SQLGetDiagRecW.c
@@ -98,6 +98,8 @@
static char const rcsid[]= "$RCSfile: SQLGetDiagRecW.c,v $";
+extern int __is_env( EHEAD * head ); /* in SQLGetDiagRec.c */
+
static SQLRETURN extract_sql_error_rec_w( EHEAD *head,
SQLWCHAR *sqlstate,
SQLINTEGER rec_number,
diff --git a/DriverManager/SQLSetDescField.c b/DriverManager/SQLSetDescField.c
index 333d786..0e2f67c 100644
--- a/DriverManager/SQLSetDescField.c
+++ b/DriverManager/SQLSetDescField.c
@@ -306,7 +306,7 @@ SQLRETURN SQLSetDescField( SQLHDESC descriptor_handle,
return function_return_nodrv( SQL_HANDLE_DESC, descriptor, SQL_ERROR );
}
- if ( field_identifier == SQL_DESC_COUNT && (SQLINTEGER)value < 0 )
+ if ( field_identifier == SQL_DESC_COUNT && (intptr_t)value < 0 )
{
__post_internal_error( &descriptor -> error,
ERROR_07009, NULL,
@@ -315,9 +315,9 @@ SQLRETURN SQLSetDescField( SQLHDESC descriptor_handle,
return function_return_nodrv( SQL_HANDLE_DESC, descriptor, SQL_ERROR );
}
- if ( field_identifier == SQL_DESC_PARAMETER_TYPE && value != SQL_PARAM_INPUT
- && value != SQL_PARAM_OUTPUT && value != SQL_PARAM_INPUT_OUTPUT &&
- value != SQL_PARAM_INPUT_OUTPUT_STREAM && value != SQL_PARAM_OUTPUT_STREAM )
+ if ( field_identifier == SQL_DESC_PARAMETER_TYPE && (intptr_t)value != SQL_PARAM_INPUT
+ && (intptr_t)value != SQL_PARAM_OUTPUT && (intptr_t)value != SQL_PARAM_INPUT_OUTPUT &&
+ (intptr_t)value != SQL_PARAM_INPUT_OUTPUT_STREAM && (intptr_t)value != SQL_PARAM_OUTPUT_STREAM )
{
__post_internal_error( &descriptor -> error,
ERROR_HY105, NULL,
diff --git a/DriverManager/SQLSetDescFieldW.c b/DriverManager/SQLSetDescFieldW.c
index 5e066ac..45125ff 100644
--- a/DriverManager/SQLSetDescFieldW.c
+++ b/DriverManager/SQLSetDescFieldW.c
@@ -288,7 +288,7 @@ SQLRETURN SQLSetDescFieldW( SQLHDESC descriptor_handle,
return function_return_nodrv( SQL_HANDLE_DESC, descriptor, SQL_ERROR );
}
- if ( field_identifier == SQL_DESC_COUNT && (SQLINTEGER)value < 0 )
+ if ( field_identifier == SQL_DESC_COUNT && (intptr_t)value < 0 )
{
__post_internal_error( &descriptor -> error,
ERROR_07009, NULL,
@@ -297,9 +297,9 @@ SQLRETURN SQLSetDescFieldW( SQLHDESC descriptor_handle,
return function_return_nodrv( SQL_HANDLE_DESC, descriptor, SQL_ERROR );
}
- if ( field_identifier == SQL_DESC_PARAMETER_TYPE && value != SQL_PARAM_INPUT
- && value != SQL_PARAM_OUTPUT && value != SQL_PARAM_INPUT_OUTPUT &&
- value != SQL_PARAM_INPUT_OUTPUT_STREAM && value != SQL_PARAM_OUTPUT_STREAM )
+ if ( field_identifier == SQL_DESC_PARAMETER_TYPE && (intptr_t)value != SQL_PARAM_INPUT
+ && (intptr_t)value != SQL_PARAM_OUTPUT && (intptr_t)value != SQL_PARAM_INPUT_OUTPUT &&
+ (intptr_t)value != SQL_PARAM_INPUT_OUTPUT_STREAM && (intptr_t)value != SQL_PARAM_OUTPUT_STREAM )
{
__post_internal_error( &descriptor -> error,
ERROR_HY105, NULL,
diff --git a/exe/iusql.c b/exe/iusql.c
index aac5329..484a889 100644
--- a/exe/iusql.c
+++ b/exe/iusql.c
@@ -413,7 +413,6 @@ static int ExecuteSQL( SQLHDBC hDbc, char *szSQL, char cDelimiter, int bColumnNa
if ( bVerbose ) DumpODBCLog( hEnv, hDbc, hStmt );
fprintf( stderr, "[ISQL]ERROR: Could not SQLExecDirect\n" );
SQLFreeStmt( hStmt, SQL_DROP );
- free(szSepLine);
return 0;
}
}
diff --git a/odbcinst/SQLCreateDataSource.c b/odbcinst/SQLCreateDataSource.c
index a9fa735..83a1e9e 100644
--- a/odbcinst/SQLCreateDataSource.c
+++ b/odbcinst/SQLCreateDataSource.c
@@ -26,7 +26,7 @@ char* _multi_string_alloc_and_copy( LPCWSTR in )
if ( !in )
{
- return in;
+ return NULL;
}
while ( in[ len ] != 0 || in[ len + 1 ] != 0 )
@@ -55,7 +55,7 @@ char* _single_string_alloc_and_copy( LPCWSTR in )
if ( !in )
{
- return in;
+ return NULL;
}
while ( in[ len ] != 0 )
@@ -83,7 +83,7 @@ SQLWCHAR* _multi_string_alloc_and_expand( LPCSTR in )
if ( !in )
{
- return in;
+ return NULL;
}
while ( in[ len ] != 0 || in[ len + 1 ] != 0 )
@@ -112,7 +112,7 @@ SQLWCHAR* _single_string_alloc_and_expand( LPCSTR in )
if ( !in )
{
- return in;
+ return NULL;
}
while ( in[ len ] != 0 )
diff --git a/odbcinst/SQLWriteFileDSN.c b/odbcinst/SQLWriteFileDSN.c
index c2f987b..e225796 100644
--- a/odbcinst/SQLWriteFileDSN.c
+++ b/odbcinst/SQLWriteFileDSN.c
@@ -21,7 +21,7 @@ BOOL SQLWriteFileDSN( LPCSTR pszFileName,
if ( pszFileName[0] == '/' )
{
- strncpy( szFileName, sizeof(szFileName) - 5, pszFileName );
+ strncpy( szFileName, pszFileName, sizeof(szFileName) - 5 );
}
else
{