Fixed segfault in Binary/QString.

This commit is contained in:
Federico Di Gregorio 2006-06-18 05:57:01 +00:00
parent cf7701a151
commit b9fcde1b39
3 changed files with 18 additions and 14 deletions

View File

@ -1,3 +1,11 @@
2006-06-18 Federico Di Gregorio <fog@initd.org>
* psycopg/adapter_binary.c: same as below.
* psycopg/adapter_qstring.c: does not segfault anymore if
.getquoted() is called without preparing the qstring with
the connection.
2006-06-15 Federico Di Gregorio <fog@initd.org>
* psycopg/typecast_basic.c: fixed problem with bogus

View File

@ -44,13 +44,11 @@ binary_escape(unsigned char *from, unsigned int from_length,
#if PG_MAJOR_VERSION > 8 || \
(PG_MAJOR_VERSION == 8 && PG_MINOR_VERSION > 1) || \
(PG_MAJOR_VERSION == 8 && PG_MINOR_VERSION == 1 && PG_PATCH_VERSION >= 4)
if (conn)
return PQescapeByteaConn(conn, from, from_length, to_length);
#else
#ifdef __GNUC__
#warning "YOUR POSTGRESQL VERSION IS TOO OLD AND IT CAN BE INSECURE"
else
#endif
return PQescapeBytea(from, from_length, to_length);
#endif
}
#else
static unsigned char *
@ -144,7 +142,7 @@ binary_quote(binaryObject *self)
/* escape and build quoted buffer */
PyObject_AsCharBuffer(self->wrapped, &buffer, &buffer_len);
to = (char *)binary_escape((unsigned char*)buffer, buffer_len, &len,
((connectionObject*)self->conn)->pgconn);
self->conn ? ((connectionObject*)self->conn)->pgconn : NULL);
if (to == NULL) {
PyErr_NoMemory();
return NULL;

View File

@ -45,13 +45,11 @@ qstring_escape(char *to, char *from, size_t len, PGconn *conn)
(PG_MAJOR_VERSION == 8 && PG_MINOR_VERSION > 1) || \
(PG_MAJOR_VERSION == 8 && PG_MINOR_VERSION == 1 && PG_PATCH_VERSION >= 4)
int err;
if (conn)
return PQescapeStringConn(conn, to, from, len, &err);
#else
#ifdef __GNUC__
#warning "YOUR POSTGRESQL VERSION IS TOO OLD AND IT CAN BE INSECURE"
else
#endif
return PQescapeString(to, from, len);
#endif
}
#else
static size_t
@ -149,7 +147,7 @@ qstring_quote(qstringObject *self)
Py_BEGIN_ALLOW_THREADS;
len = qstring_escape(buffer+1, s, len,
((connectionObject*)self->conn)->pgconn);
self->conn ? ((connectionObject*)self->conn)->pgconn : NULL);
buffer[0] = '\'' ; buffer[len+1] = '\'';
Py_END_ALLOW_THREADS;