Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:12.2:ARM
capi4hylafax
capi4hylafax-secfix2.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File capi4hylafax-secfix2.diff of Package capi4hylafax
Index: capi4hylafax-01.03.00/src/faxrecv/faxrecv.cpp =================================================================== --- capi4hylafax-01.03.00.orig/src/faxrecv/faxrecv.cpp +++ capi4hylafax-01.03.00/src/faxrecv/faxrecv.cpp @@ -331,7 +331,7 @@ void CFaxReceive::IsDisconnected (c_info } // Hylafax: <qfile> <ModemDeviceID> <CommID> <Reason> <CIDNumber> <CIDName> <destination> - executeCommand.PrintAppend (" \"%S\" \"%S\" \"%09u\" \"%s\" \"%S\" \"\" \"%S\"", + executeCommand.PrintAppend (" \"%eS\" \"%eS\" \"%09u\" \"%es\" \"%eS\" \"\" \"%eS\"", GetRecvFiles()->GetFirst(), &FaxDevice->DeviceName, jobNr, StateText, GetReceiveID(), &MyNumber); WriteXferLog ("RECV", jobNr, 0, 0, (char *)FaxDevice->DeviceName.GetPointer(), 0, @@ -361,14 +361,14 @@ void CFaxReceive::IsDisconnected (c_info } executeCommand.PrintAppend (" %u 0x%X \"", recvStatus, Reason); - executeCommand.Append (GetReceiveID()); + executeCommand.PrintAppend ("%eS", GetReceiveID()); executeCommand.Append ("\" \""); if (!MyNumber.IsEmpty()) { - executeCommand.Append (&MyNumber); + executeCommand.PrintAppend ("%eS", &MyNumber); } executeCommand.PrintAppend ("\" %u", GetPageCount()); for (COneMultiString *pLauf = GetRecvFiles()->GetFirst(); (pLauf != 0); pLauf = pLauf->GetNext()) { - executeCommand.PrintAppend (" \"%S\"", pLauf); + executeCommand.PrintAppend (" \"%eS\"", pLauf); } } Index: capi4hylafax-01.03.00/src/faxsend/faxsend.cpp =================================================================== --- capi4hylafax-01.03.00.orig/src/faxsend/faxsend.cpp +++ capi4hylafax-01.03.00/src/faxsend/faxsend.cpp @@ -572,7 +572,7 @@ void CFaxSend::IsDisconnected (c_info Re commStr.Print ("%09u", m_commID); // Hylafax: <mailaddr> <qfile> <ModemDeviceID> <CommID> <Reason> - executeCommand.PrintAppend (" \"%S\" \"%S\" \"%S\" \"%S\" \"%s\"", &PollString, + executeCommand.PrintAppend (" \"%eS\" \"%eS\" \"%eS\" \"%eS\" \"%es\"", &PollString, GetRecvFiles()->GetFirst(), &DeviceName, &commStr, StateText); } else { // mgetty: <RecvStatus> <Hangup Code> "<sender id>" "<poll text>" <nr of pages> <file(s)> @@ -591,10 +591,10 @@ void CFaxSend::IsDisconnected (c_info Re case 3: break; } - executeCommand.PrintAppend (" %u 0x%X \"%S\" \"%S\" %u", recvStatus, Reason, GetReceiveID(), + executeCommand.PrintAppend (" %u 0x%X \"%eS\" \"%eS\" %u", recvStatus, Reason, GetReceiveID(), &PollString, GetPageCount()); for (COneMultiString *pLauf = GetRecvFiles()->GetFirst(); (pLauf != 0); pLauf = pLauf->GetNext()) { - executeCommand.PrintAppend (" \"%s\"", pLauf->GetPointer()); + executeCommand.PrintAppend (" \"%es\"", pLauf->GetPointer()); } } Index: capi4hylafax-01.03.00/src/standard/CString.cpp =================================================================== --- capi4hylafax-01.03.00.orig/src/standard/CString.cpp +++ capi4hylafax-01.03.00/src/standard/CString.cpp @@ -44,6 +44,9 @@ #define PRINTFLAGS_NEAR 0x0400 // Placeholder is a NEAR-pointer #define PRINTFLAGS_QUESTION 0x0800 // Sizeof Char specified before string #define PRINTFLAGS_STRINGTYPE 0x1000 // Placeholder is a CDynamicString-Pointer +#define PRINTFLAGS_SHELLESCAPE 0x2000 // The placeholder should be filled in with + // a string suitable for passing to /bin/sh + // between double quotes. /*===========================================================================*\ \*===========================================================================*/ @@ -389,6 +392,10 @@ tSInt CDynamicString::i_vPrintAppend (tF PrtFlags |= PRINTFLAGS_SHORT; break; + case 'e': + PrtFlags |= PRINTFLAGS_SHELLESCAPE; + break; + /*----- WIDTH or PRECISION-----*/ case '0': if (PrtPreci == -2) { @@ -580,13 +587,102 @@ tSInt CDynamicString::i_vPrintAppend (tF PrtWidth = 0; } tSize endPos = curLen + copyBufLen; - if (endPos >= GetMaxSize()) { - if (DynExpand (endPos + 1) == vFalse) { + const tSize max_space_needed = endPos + ((PrtFlags & PRINTFLAGS_SHELLESCAPE) ? copyBufLen : 0); + if (max_space_needed >= GetMaxSize()) { + if (DynExpand (max_space_needed + 1) == vFalse) { RETURN ('x', CSTRING_PRINT_MemoryError); } } - dassert (endPos < GetMaxSize()); + dassert (max_space_needed < GetMaxSize()); dassert (pntr != 0); + if (PrtFlags & PRINTFLAGS_SHELLESCAPE) { + const tChar * const c_bs = (tChar*) "\\"; + const tChar * const c_0 = (tChar*) "\0"; + const tChar * const c_dq = (tChar*) "\""; + const tChar * const c_d = (tChar*) "$"; + const tChar * const c_bq = (tChar*) "`"; + const tChar * const c_qm = (tChar*) "?"; + // Note that in this case, PrtWidth refers to the string _after_ + // interpretation by /bin/sh, i.e. after the escaping is removed. + if (PrtFlags & PRINTFLAGS_STRINGTYPE) { + const tStringChar *p = (tStringChar*)copyBuf; + const tStringChar * const p_end = p + copyBufLen; + for (;p < p_end; ++p) { + if (!s_strncmp(p,c_0,1)) { + s_strncpy (pntr + curLen, c_qm, 1); + } else { + if (!(s_strncmp(p,c_dq,1) && + s_strncmp(p,c_bs,1) && + s_strncmp(p,c_d ,1) && + s_strncmp(p,c_bq,1))) { + s_strncpy (pntr + curLen, c_bs, 1); + ++curLen; + ++endPos; + } + s_strncpy (pntr + curLen, p, 1); + } + ++curLen; + } + } else if (PrtFlags & PRINTFLAGS_LARGE) { + const tUWiChar *p = (tUWiChar*)copyBuf; + const tUWiChar * const p_end = p + copyBufLen; + for (;p < p_end; ++p) { + if (!s_strncmp(p,c_0,1)) { + s_strncpy (pntr + curLen, c_qm, 1); + } else { + if (!(s_strncmp(p,c_dq,1) && + s_strncmp(p,c_bs,1) && + s_strncmp(p,c_d,1) && + s_strncmp(p,c_bq,1))) { + s_strncpy (pntr + curLen, c_bs, 1); + ++curLen; + ++endPos; + } + s_strncpy (pntr + curLen, p, 1); + } + ++curLen; + } + } else if (PrtFlags & PRINTFLAGS_SHORT) { + const tUChar *p = (tUChar*)copyBuf; + const tUChar * const p_end = p + copyBufLen; + for (;p < p_end; ++p) { + if (!s_strncmp(p,c_0,1)) { + s_strncpy (pntr + curLen, c_qm, 1); + } else { + if (!(s_strncmp(p,c_dq,1) && + s_strncmp(p,c_bs,1) && + s_strncmp(p,c_d,1) && + s_strncmp(p,c_bq,1))) { + s_strncpy (pntr + curLen, c_bs, 1); + ++curLen; + ++endPos; + } + s_strncpy (pntr + curLen, p, 1); + } + ++curLen; + } + } else { + dassert((sizeof tChar)== (sizeof tFormatChar)); + const tChar *p = (tChar*)copyBuf; + const tChar * const p_end = p + copyBufLen; + for (;p < p_end; ++p) { + if (!s_strncmp(p,c_0,1)) { + s_strncpy (pntr + curLen, c_qm, 1); + } else { + if (!(s_strncmp(p,c_dq,1) && + s_strncmp(p,c_bs,1) && + s_strncmp(p,c_d,1) && + s_strncmp(p,c_bq,1))) { + s_strncpy (pntr + curLen, c_bs, 1); + ++curLen; + ++endPos; + } + s_strncpy (pntr + curLen, p, 1); + } + ++curLen; + } + } + } else { if (PrtFlags & PRINTFLAGS_STRINGTYPE) { s_strncpy (pntr + curLen, (tStringChar *)copyBuf, copyBufLen); } else if (PrtFlags & PRINTFLAGS_LARGE) { @@ -596,6 +692,7 @@ tSInt CDynamicString::i_vPrintAppend (tF } else { s_strncpy (pntr + curLen, copyBuf, copyBufLen); } + } pntr[endPos] = '\0'; curLen = endPos; if ((PrtWidth > copyBufLen) && (FillAppend (' ', PrtWidth - copyBufLen) == vFalse)) { Index: capi4hylafax-01.03.00/src/standard/aTypes.h =================================================================== --- capi4hylafax-01.03.00.orig/src/standard/aTypes.h +++ capi4hylafax-01.03.00/src/standard/aTypes.h @@ -29,6 +29,7 @@ /*---------------------------------------------------------------------------*\ \*---------------------------------------------------------------------------*/ +#include <limits.h> // should give __WORDSIZE #include <wchar.h> #if defined HAVE_STDINT_H && HAVE_STDINT_H > 0
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor