diff --git a/diskbrowser.c b/diskbrowser.c index 72cb8e3..4e4a896 100644 --- a/diskbrowser.c +++ b/diskbrowser.c @@ -312,6 +312,11 @@ void DoSearch(void) { /* keep reading */ ; sess.contentLength -= sess.readCount; *(netBuf + sess.contentLength) = 0; + if (sess.contentLength == 0) { + result = NO_RESPONSE; + goto errorReturn; + } + if (json) json_value_free(json); diff --git a/readtcp.c b/readtcp.c index 78918ff..ae3b2ba 100644 --- a/readtcp.c +++ b/readtcp.c @@ -2,7 +2,9 @@ #include "readtcp.h" #include "session.h" +#include #include +#include #include #include @@ -24,15 +26,25 @@ ReadStatus TryReadTCP(Session *sess) { rrBuff rrBuff; TCPIPPoll(); - sess->tcperr = TCPIPReadTCP(sess->ipid, buffTypePointer, (Ref)sess->readPtr, + sess->tcperr = TCPIPReadTCP(sess->ipid, buffTypeNewHandle, NULL, sess->readCount, &rrBuff); sess->toolerr = toolerror(); if (sess->tcperr || sess->toolerr) { return rsError; } - sess->readCount -= rrBuff.rrBuffCount; - sess->readPtr += rrBuff.rrBuffCount; + if (rrBuff.rrBuffCount != 0) { + /* Work around Marinetti bug #57 */ + rrBuff.rrBuffCount = GetHandleSize(rrBuff.rrBuffHandle); + + HLock(rrBuff.rrBuffHandle); + memcpy(sess->readPtr, *rrBuff.rrBuffHandle, rrBuff.rrBuffCount); + DisposeHandle(rrBuff.rrBuffHandle); + + sess->readCount -= rrBuff.rrBuffCount; + sess->readPtr += rrBuff.rrBuffCount; + } + if (sess->readCount == 0) { return rsDone;