  //
  //
  //
-@@ -41,8 +42,16 @@
+@@ -41,10 +42,19 @@
  
  @implementation OracleAdaptorChannel (Private)
  

   if (!theExpression || ![theExpression length])
     {
       [NSException raise: @"OracleInvalidExpressionException"
Index: sope-core/NGExtensions/FdExt.subproj/NSString+Encoding.m
===================================================================
--- sope-core/NGExtensions/FdExt.subproj/NSString+Encoding.m	(rvision 1583)

+{
   column_info *info;
   int c;
+  sword result;
 
   [_resultSetProperties removeAllObjects];
 
@@ -58,11 +68,29 @@
       // so we just free the value instead.
       if (info->value)
 	{
-	  if (OCIDescriptorFree((dvoid *)info->value, (ub4)OCI_DTYPE_LOB) != OCI_SUCCESS)
+	  if (info->type == SQLT_CLOB
+	      || info->type == SQLT_BLOB
+	      || info->type == SQLT_BFILEE
+	      || info->type == SQLT_CFILEE)
+	    {
+	      result = OCIDescriptorFree((dvoid *)info->value, (ub4) OCI_DTYPE_LOB);
+	      if (result != OCI_SUCCESS)
+		{
+		  NSLog (@"value was not a LOB descriptor");
+		  abort();
+		}
+	    }
+	  else
 	    free(info->value);
 	  info->value = NULL;
 	}
-       free(info);
+      else
+	{
+	  NSLog (@"trying to free an already freed value!");
+	  abort();
+	}
+      free(info);
+
       [_row_buffer removeObjectAtIndex: c];
     }
 
@@ -231,6 +259,9 @@
 
   [self _cleanup];
 
