summaryrefslogtreecommitdiff
path: root/ucb
diff options
context:
space:
mode:
Diffstat (limited to 'ucb')
-rw-r--r--ucb/source/ucp/cmis/cmis_content.cxx2
-rw-r--r--ucb/source/ucp/cmis/cmis_url.cxx10
2 files changed, 10 insertions, 2 deletions
diff --git a/ucb/source/ucp/cmis/cmis_content.cxx b/ucb/source/ucp/cmis/cmis_content.cxx
index 44dba8919213..1e7aa847b97f 100644
--- a/ucb/source/ucp/cmis/cmis_content.cxx
+++ b/ucb/source/ucp/cmis/cmis_content.cxx
@@ -2019,7 +2019,7 @@ namespace cmis
// TODO Cache the objects
INetURLObject aURL( m_sURL );
- OUString sUser = aURL.GetUser( INetURLObject::NO_DECODE );
+ OUString sUser = aURL.GetUser( INetURLObject::DECODE_WITH_CHARSET );
URL aUrl( m_sURL );
OUString sPath( m_sObjectPath );
diff --git a/ucb/source/ucp/cmis/cmis_url.cxx b/ucb/source/ucp/cmis/cmis_url.cxx
index 533ebf2e4b11..103ccad2dbb6 100644
--- a/ucb/source/ucp/cmis/cmis_url.cxx
+++ b/ucb/source/ucp/cmis/cmis_url.cxx
@@ -61,13 +61,21 @@ namespace cmis
OUString URL::asString( )
{
OUString sUrl;
+ // Related tdf#96174, can no longer save on Google Drive
+ // the user field may contain characters that need to be escaped according to
+ // RFC3896 userinfo URI field
+ // see <https://tools.ietf.org/html/rfc3986#section-3.2.1>
+ OUString sEncodedUser = ( m_sUser.isEmpty() ?
+ OUString() :
+ rtl::Uri::encode( m_sUser, rtl_UriCharClassUserinfo,
+ rtl_UriEncodeIgnoreEscapes, RTL_TEXTENCODING_UTF8) );
OUString sEncodedBinding = rtl::Uri::encode(
m_sBindingUrl + "#" + m_sRepositoryId,
rtl_UriCharClassRelSegment,
rtl_UriEncodeKeepEscapes,
RTL_TEXTENCODING_UTF8 );
sUrl = "vnd.libreoffice.cmis://" +
- ( m_sUser.isEmpty() ? OUString( ) : (m_sUser + "@") ) +
+ ( sEncodedUser.isEmpty() ? OUString( ) : (sEncodedUser + "@") ) +
sEncodedBinding;
if ( !m_sPath.isEmpty( ) )