@@ -742,12 +742,11 @@ length: rl]; } @catch (id e) { if (bufferLength > 0) { /* * Append data to _readBuffer - * to prevent loss of data due - * to wrong encoding. + * to prevent loss of data. */ readBuffer = [self allocMemoryWithSize: _readBufferLength + bufferLength]; @@ -970,10 +969,36 @@ ret = [OFString stringWithCString: rcs encoding: encoding length: rl]; + } @catch (id e) { + if (bufferLength > 0) { + /* + * Append data to _readBuffer + * to prevent loss of data. + */ + readBuffer = [self + allocMemoryWithSize: + _readBufferLength + + bufferLength]; + + memcpy(readBuffer, _readBuffer, + _readBufferLength); + memcpy(readBuffer + + _readBufferLength, + buffer, bufferLength); + + [self freeMemory: + _readBufferMemory]; + _readBuffer = readBuffer; + _readBufferMemory = readBuffer; + _readBufferLength += + bufferLength; + } + + @throw e; } @finally { [self freeMemory: retCString]; } readBuffer = [self allocMemoryWithSize: