[Libreoffice-commits] core.git: desktop/source

Matteo Casalin matteo.casalin at gmx.com
Wed Feb 20 06:32:10 PST 2013


Hi all,
    I may be completely wrong and I really don't know this code and what it is aimet to, but I'm worried that

    if (nBytes > 0)
    {
        pReceiveBuffer[nBytes-1] = 0;
    }

overwrites a received character (that could be '\0' or not).

If I understand correctly, the target is to have the sequence of characters being '\0' terminated whether that '\0' whas in the stream or not, and then I would say that the whole routine should be something like:

    char pReceiveBuffer[sc_nCSASeqLength + 1] = {0};
    int nResult = 0;
    int nBytes = 0;
    // read byte per byte
    while ((nResult=aStreamPipe.recv( pReceiveBuffer+nBytes, sc_nCSASeqLength-nBytes))>0)
    {
        nBytes += nResult;
        if (pReceiveBuffer[nBytes-1]=='\0')
        {
            break;
        }
    }
    // unconditionally end stream with '\0'
    pReceiveBuffer[nBytes] = '\0';

In case a '\0' is already in the sequence and the additional '\0' is undesired, nBytes can be adjusted in the "if (pReceiveBuffer[nBytes-1]=='\0')" so to overwrite the existing one.
Also, the "read byte per byte" comment looks wrong to me.

If I misunderstood the point then apologies for the noise.
Cheers

Matteo



On Wed, 20 Feb 2013 05:54:50 -0800 (PST)
julien2412 <serval2412 at yahoo.fr> wrote:

> Lubos Lunak wrote
> > On Tuesday 19 of February 2013, Julien Nabet wrote:
> >> diff --git a/desktop/source/app/officeipcthread.cxx
> >> b/desktop/source/app/officeipcthread.cxx index 8db7946..445ccb4 100644
> >> --- a/desktop/source/app/officeipcthread.cxx
> >> +++ b/desktop/source/app/officeipcthread.cxx
> >> @@ -497,23 +497,17 @@ OfficeIPCThread::Status
> >> OfficeIPCThread::EnableOfficeIPCThread() else if( pThread->maPipe.create(
> >> aPipeIdent.getStr(), osl_Pipe_OPEN, rSecurity )) // Creation not
> >> successfull, now we try to connect {
> >>              osl::StreamPipe aStreamPipe(pThread->maPipe.getHandle());
> >> -            char pReceiveBuffer[sc_nCSASeqLength + 1];
> >> +            char pReceiveBuffer[sc_nCSASeqLength + 1] = {0};
> >>              int nResult = 0;
> >>              int nBytes = 0;
> >>              int nBufSz = sc_nCSASeqLength + 1;
> >>              // read byte per byte
> >> -            pReceiveBuffer[0] = 0;
> >>              while ((nResult=aStreamPipe.recv( pReceiveBuffer+nBytes,
> >> nBufSz-nBytes))>0) { nBytes += nResult;
> >>                  if (pReceiveBuffer[nBytes-1]=='\0') {
> >>                      break;
> >>                  }
> >>              }
> >> -            /* make sure the buffer is \0 terminated */
> >> -            if (nBytes > 0)
> >> -            {
> >> -                pReceiveBuffer[nBytes-1] = 0;
> >> -            }
> >  Did you really mean to remove this part?
> 
> Hi Lubos,
> 
> Yes I meant it, why? Is it wrong?
> if "pReceiveBuffer" is initialized with 0 for the (sc_nCSASeqLength + 1)
> elements thanks to = {0} initialization, what obvious thing did I miss? Why
> "pReceiveBuffer[nBytes-1] = 0;" would need to stay?
> 
> Of course, if my commit is wrong, I'll revert it after my day time job
> 
> Julien
> 
> 
> 
> --
> View this message in context: http://nabble.documentfoundation.org/Re-Libreoffice-commits-core-git-desktop-source-tp4038892p4038893.html
> Sent from the Dev mailing list archive at Nabble.com.
> _______________________________________________
> LibreOffice mailing list
> LibreOffice at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/libreoffice


More information about the LibreOffice mailing list