From: Dmitry Kurochkin Date: Mon, 27 Jun 2011 21:16:45 +0000 (+0400) Subject: Fix crash in IpcIoFile::readCompleted() when response is NULL. X-Git-Tag: take07~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=70e3f7069b1963995dafc24205d5167c14fe81c3;p=thirdparty%2Fsquid.git Fix crash in IpcIoFile::readCompleted() when response is NULL. --- diff --git a/src/DiskIO/IpcIo/IpcIoFile.cc b/src/DiskIO/IpcIo/IpcIoFile.cc index 757571d19e..679b56645f 100644 --- a/src/DiskIO/IpcIo/IpcIoFile.cc +++ b/src/DiskIO/IpcIo/IpcIoFile.cc @@ -201,21 +201,22 @@ IpcIoFile::readCompleted(ReadRequest *readRequest, if (!response) { debugs(79,1, HERE << "error: timeout"); ioError = true; // I/O timeout does not warrant setting error_? - } else - if (response->xerrno) { - debugs(79,1, HERE << "error: " << xstrerr(response->xerrno)); - ioError = error_ = true; - } - else - if (!response->page) { - debugs(79,1, HERE << "error: run out of shared memory pages"); - ioError = true; } else { - const char *const buf = Ipc::Mem::PagePointer(response->page); - memcpy(readRequest->buf, buf, response->len); - } + if (response->xerrno) { + debugs(79,1, HERE << "error: " << xstrerr(response->xerrno)); + ioError = error_ = true; + } + else + if (!response->page) { + debugs(79,1, HERE << "error: run out of shared memory pages"); + ioError = true; + } else { + const char *const buf = Ipc::Mem::PagePointer(response->page); + memcpy(readRequest->buf, buf, response->len); + } - Ipc::Mem::PutPage(response->page); + Ipc::Mem::PutPage(response->page); + } const ssize_t rlen = ioError ? -1 : (ssize_t)readRequest->len; const int errflag = ioError ? DISK_ERROR : DISK_OK;