Version 6.1.4.1, tag libreoffice-6.1.4.1
[LibreOffice.git] / external / libcmis / xwwwformurlencoded.patch.0
blobb9f779cc6e80b5bb1561a4b2ed428b14ed88faa4
1 --- src/libcmis/oauth2-providers.cxx
2 +++ src/libcmis/oauth2-providers.cxx
3 @@ -26,6 +26,8 @@
4   * instead of those above.
5   */
6  
7 +#include <cassert>
9  #include <libxml/HTMLparser.h>
10  #include <libxml/xmlreader.h>
12 @@ -45,6 +47,29 @@
13  #define HTML_PARSE_RECOVER 0
14  #endif
16 +namespace {
18 +// See <https://url.spec.whatwg.org/#concept-urlencoded-byte-serializer>:
19 +void addXWwwFormUrlencoded(std::string * buffer, std::string const & data) {
20 +    assert(buffer);
21 +    for (string::const_iterator i = data.begin(); i != data.end(); ++i) {
22 +        unsigned char c = static_cast<unsigned char>(*i);
23 +        if (c == ' ' || c == '*' || c == '-' || c == '.' || (c >= '0' && c <= '9')
24 +            || (c >= 'A' && c <= 'Z') || c == '_' || (c >= 'a' && c <= 'z'))
25 +        {
26 +            *buffer += static_cast<char>(c);
27 +        } else {
28 +            static const char hex[16] = {
29 +                '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
30 +            *buffer += '%';
31 +            *buffer += hex[c >> 4];
32 +            *buffer += hex[c & 0xF];
33 +        }
34 +    }
39  string OAuth2Providers::OAuth2Gdrive( HttpSession* session, const string& authUrl,
40                                        const string& username, const string& password )
41  {
42 @@ -97,7 +120,7 @@
43          return string( );
45      loginEmailPost += "Email=";
46 -    loginEmailPost += string( username );
47 +    addXWwwFormUrlencoded(&loginEmailPost, username);
49      istringstream loginEmailIs( loginEmailPost );
50      string loginEmailRes;
51 @@ -119,7 +142,7 @@
52          return string( );
54      loginPasswdPost += "Passwd=";
55 -    loginPasswdPost += string( password );
56 +    addXWwwFormUrlencoded(&loginPasswdPost, password);
58      istringstream loginPasswdIs( loginPasswdPost );
59      string loginPasswdRes;