Hi,
now my initial problem:
I'm using a commercial application which is crashing while trying to
insert sets into tables (using psqlodbc.dll).
I did some tracing:
It crashes in module convert.c / copy_statement_with_parameters
in function:
convert_special_chars(char *si, char *dst, int used)
The access violation appears at:
if (si[i] == '\r' && i+1 < strlen(si) && si[i+1] == '\n')
si = 0x00000001
used = -103
It seems that it runs into an access violation, since 'si' has
been assigned a wrong value. Also 'used = -103' doesn't
seem to be healthy value. 'dst' seems to be alright.
convert_special_chars was called in
copy_statement_with_parameters:
convert_special_chars(buf, &new_statement[npos], used);
'buf' seems to be the same like 'buffer':
So 'used' and 'buffer' where assigned at (in copy_statement_with_parameters):
/* Assign correct buffers based on data at exec param or not */ if (
stmt->parameters[param_number].data_at_exec){ used = stmt->parameters[param_number].EXEC_used ?
*stmt->parameters[param_number].EXEC_used: SQL_NTS; buffer = stmt->parameters[param_number].EXEC_buffer; }
else{ used = stmt->parameters[param_number].used ? *stmt->parameters[param_number].used : SQL_NTS; buffer
=stmt->parameters[param_number].buffer; }
Well, here my knowledge ends. Something seems to be wrong with the ODBC parameters
supplied by my application, but:
Same application works flawless with MS-SQL-ODBC and ORACLE-ODBC.
So IMHO there must be a problem in psqlodbc.dll. Even though I admit that the buggy
call might be accepted in MS-ODBC due to another bug. :-)
Could somebody point me in the correct direction? Any hints? Patches?
I really would like to use Postgres for my app.
regards
Johann