mirror of
				https://github.com/psycopg/psycopg2.git
				synced 2025-10-30 23:37:29 +03:00 
			
		
		
		
	* psycopg/adapter_binary.c (binary_quote): apply Brandon Rhodes'
patch from ticket #209 to check return value from PyObject_AsCharBuffer(). This fixes the segfault. (binary_quote): switch from PyObject_AsCharBuffer() to PyObject_AsReadBuffer() to support buffer objects that don't implement the bf_getcharbuf protocol. * tests/types_basic.py (TypesBasicTests.testBinary): Test round tripping of bytea buffers. Currently segfaults.
This commit is contained in:
		
							parent
							
								
									729117af8b
								
							
						
					
					
						commit
						86597f6939
					
				
							
								
								
									
										10
									
								
								ChangeLog
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								ChangeLog
									
									
									
									
									
								
							|  | @ -1,5 +1,15 @@ | |||
| 2008-01-11  James Henstridge  <james@jamesh.id.au> | ||||
| 
 | ||||
| 	* psycopg/adapter_binary.c (binary_quote): apply Brandon Rhodes' | ||||
| 	patch from ticket #209 to check return value from | ||||
| 	PyObject_AsCharBuffer().  This fixes the segfault. | ||||
| 	(binary_quote): switch from PyObject_AsCharBuffer() to | ||||
| 	PyObject_AsReadBuffer() to support buffer objects that don't | ||||
| 	implement the bf_getcharbuf protocol. | ||||
| 
 | ||||
| 	* tests/types_basic.py (TypesBasicTests.testBinary): Test round | ||||
| 	tripping of bytea buffers.  Currently segfaults. | ||||
| 
 | ||||
| 	* psycopg/connection_int.c (conn_close): fix for new | ||||
| 	pq_abort_locked() prototype. | ||||
| 	(conn_switch_isolation_level): fix for new pq_abort_locked() | ||||
|  |  | |||
|  | @ -141,7 +141,9 @@ binary_quote(binaryObject *self) | |||
|     /* if we got a plain string or a buffer we escape it and save the buffer */ | ||||
|     if (PyString_Check(self->wrapped) || PyBuffer_Check(self->wrapped)) { | ||||
|         /* escape and build quoted buffer */ | ||||
|         PyObject_AsCharBuffer(self->wrapped, &buffer, &buffer_len); | ||||
|         if (PyObject_AsReadBuffer(self->wrapped, (const void **)&buffer, | ||||
|                                   &buffer_len) < 0) | ||||
|             return NULL; | ||||
| 
 | ||||
|         to = (char *)binary_escape((unsigned char*)buffer, (size_t) buffer_len, | ||||
|             &len, self->conn ? ((connectionObject*)self->conn)->pgconn : NULL); | ||||
|  |  | |||
|  | @ -63,11 +63,15 @@ class TypesBasicTests(unittest.TestCase): | |||
|     def testBinary(self): | ||||
|         s = ''.join([chr(x) for x in range(256)]) | ||||
|         b = psycopg2.Binary(s) | ||||
|         r = str(self.execute("SELECT %s::bytea AS foo", (b,))) | ||||
|         self.failUnless(r == s, "wrong binary quoting") | ||||
|         buf = self.execute("SELECT %s::bytea AS foo", (b,)) | ||||
|         self.failUnless(str(buf) == s, "wrong binary quoting") | ||||
|         # test to make sure an empty Binary is converted to an empty string | ||||
|         b = psycopg2.Binary('') | ||||
|         self.assertEqual(str(b), "''") | ||||
|         # test to make sure buffers returned by psycopg2 are | ||||
|         # understood by execute: | ||||
|         buf2 = self.execute("SELECT %s::bytea AS foo", (buf,)) | ||||
|         self.failUnless(str(buf2) == s, "wrong binary quoting") | ||||
| 
 | ||||
|     def testArray(self): | ||||
|         s = self.execute("SELECT %s AS foo", ([[1,2],[3,4]],)) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user