[Libreoffice-commits] core.git: vcl/unx

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Sun Aug 18 20:05:23 UTC 2019


 vcl/unx/generic/printer/cupsmgr.cxx |   39 +++++++++++++++++++++++++++++++-----
 1 file changed, 34 insertions(+), 5 deletions(-)

New commits:
commit 931b63db1ce15b309eb6f879f1da992986bf974d
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Sat Aug 17 21:14:58 2019 +0100
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Sun Aug 18 22:04:17 2019 +0200

    Related: tdf#53029 escape backslash in username for 'domain\username'
    
    Change-Id: I645623886396b55ccea273bfd697cf319b53f506
    Reviewed-on: https://gerrit.libreoffice.org/77651
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/vcl/unx/generic/printer/cupsmgr.cxx b/vcl/unx/generic/printer/cupsmgr.cxx
index 7d107de5724d..8d0c6528dbcd 100644
--- a/vcl/unx/generic/printer/cupsmgr.cxx
+++ b/vcl/unx/generic/printer/cupsmgr.cxx
@@ -745,6 +745,35 @@ namespace
     }
 }
 
+namespace
+{
+    OString EscapeCupsOption(const OString& rIn)
+    {
+        OStringBuffer sRet;
+        sal_Int32 nLen = rIn.getLength();
+        for (sal_Int32 i = 0; i < nLen; ++i)
+        {
+            switch(rIn[i])
+            {
+                case '\\':
+                case '\'':
+                case '\"':
+                case ',':
+                case ' ':
+                case '\f':
+                case '\n':
+                case '\r':
+                case '\t':
+                case '\v':
+                    sRet.append('\\');
+                    break;
+            }
+            sRet.append(rIn[i]);
+        }
+        return sRet.makeStringAndClear();
+    }
+}
+
 bool CUPSManager::endSpool( const OUString& rPrintername, const OUString& rJobTitle, FILE* pFile, const JobData& rDocumentJobData, bool bBanner, const OUString& rFaxNumber )
 {
     SAL_INFO( "vcl.unx.print", "endSpool: " << rPrintername << "," << rJobTitle << " copy count = " << rDocumentJobData.m_nCopies );
@@ -804,18 +833,18 @@ bool CUPSManager::endSpool( const OUString& rPrintername, const OUString& rJobTi
                 {
                     OString sAuth;
                     if (bDomain)
-                        sAuth = aDialog.getDomain().replaceAll(",", "\\,");
+                        sAuth = EscapeCupsOption(aDialog.getDomain());
                     if (bUser)
                     {
-                        if (!sAuth.isEmpty())
+                        if (bDomain)
                             sAuth += ",";
-                        sAuth += aDialog.getUserName().replaceAll(",", "\\,");
+                        sAuth += EscapeCupsOption(aDialog.getUserName());
                     }
                     if (bPass)
                     {
-                        if (!sAuth.isEmpty())
+                        if (bUser || bDomain)
                             sAuth += ",";
-                        sAuth += aDialog.getPassword().replaceAll(",", "\\,");
+                        sAuth += EscapeCupsOption(aDialog.getPassword());
                     }
                     nNumOptions = cupsAddOption("auth-info", sAuth.getStr(), nNumOptions, &pOptions);
                 }


More information about the Libreoffice-commits mailing list