Index: trunk/psModules/src/extras/psIOBuffer.c
===================================================================
--- trunk/psModules/src/extras/psIOBuffer.c	(revision 10610)
+++ trunk/psModules/src/extras/psIOBuffer.c	(revision 10727)
@@ -25,7 +25,7 @@
     psMemSetDeallocator(buffer, (psFreeFunc) psIOBufferFree);
 
-    buffer->data = (char *) psAlloc (nBuffer);
+    buffer->data = (char *) psAlloc (nBuffer + 1);
 
-    buffer->nAlloc = nBuffer;
+    buffer->nAlloc = nBuffer + 1;
     buffer->nReset = nBuffer;
     buffer->nBlock = nBuffer / 2;
@@ -41,5 +41,5 @@
     buffer->n = 0;
     buffer->nAlloc = buffer->nReset;
-    psRealloc (buffer->data, buffer->nAlloc);
+    buffer->data = psRealloc (buffer->data, buffer->nAlloc);
     bzero (buffer->data, buffer->nAlloc);
 
@@ -57,10 +57,10 @@
     }
 
-    Nfree = buffer->nAlloc - buffer->n;
+    Nfree = buffer->nAlloc - buffer->n - 1;
 
     // extend the data block if needed
     if (Nfree < buffer->nBlock) {
-        buffer->nAlloc += 2*buffer->nBlock;
-        psRealloc (buffer->data, buffer->nAlloc);
+        buffer->nAlloc += 2*buffer->nBlock + 1;
+        buffer->data = psRealloc (buffer->data, buffer->nAlloc);
         Nfree = buffer->nAlloc - buffer->n;
         bzero (buffer->data + buffer->n, Nfree);
