Apply base64 encoding to the DBus call parameters 65/140765/1
authorMu-Woong Lee <muwoong.lee@samsung.com>
Wed, 26 Jul 2017 08:29:46 +0000 (17:29 +0900)
committerMu-Woong Lee <muwoong.lee@samsung.com>
Wed, 26 Jul 2017 08:29:46 +0000 (17:29 +0900)
A DBus call parameter may contain SQL-unfriendly characters, it thus needs to be encoded into a safe form.

Change-Id: Iff7f21ec2692b5cf89641811d24b20e6cca6ba16
Signed-off-by: Mu-Woong Lee <muwoong.lee@samsung.com>
src/shared/JobAction.cpp
src/shared/JobInfo.cpp

index 2b2df6dc3a4ba42a77b1ed81490c6b4e0ba1f2d5..e6c228ca7b279408d7146a28115062970bfad7ac 100644 (file)
@@ -87,12 +87,19 @@ JobDBusCall::JobDBusCall(const std::string& busName, const std::string& objPath,
        __interface(interface),
        __methodName(methodName)
 {
-       if (param) {
-               //TODO: escaping quotes?
-               char* paramStr = g_variant_print(param, TRUE);
-               __parameters = paramStr ? paramStr : EMPTY_STR;
-               g_free(paramStr);
-       }
+       if (!param)
+               return;
+
+       char* paramStr = g_variant_print(param, TRUE);
+       IF_FAIL_VOID_TAG(paramStr, _E, "Invalid GVariant");
+
+       char* encoded = g_base64_encode(reinterpret_cast<const guchar*>(paramStr), strlen(paramStr) + 1);
+       g_free(paramStr);
+       IF_FAIL_VOID_TAG(encoded, _E, "Encoding failed");
+
+       __parameters = encoded;
+
+       g_free(encoded);
 }
 
 JobDBusCall::JobDBusCall(Json::Value& jsonNode)
@@ -138,7 +145,14 @@ GVariant* JobDBusCall::getParameters()
        if (__parameters.empty())
                return NULL;
 
-       return g_variant_parse(NULL, __parameters.c_str(), NULL, NULL, NULL);
+       gsize length = 0;
+       char* decoded = reinterpret_cast<char*>(g_base64_decode(__parameters.c_str(), &length));
+       IF_FAIL_RETURN_TAG(decoded, NULL, _E, "Decoding failed");
+
+       GVariant* param = g_variant_parse(NULL, decoded, NULL, NULL, NULL);
+       g_free(decoded);
+
+       return param;
 }
 
 void JobDBusCall::toJson(Json::Value& jsonNode) const
index e7b6a0b095799430357152fed6b9101a00356ac5..430148f6d3c7ba21876e8174c293528860d502ed 100644 (file)
@@ -125,7 +125,7 @@ size_t JobInfo::getUserData(char** data) const
        }
 
        gsize length = 0;
-       *data  = reinterpret_cast<char*>(g_base64_decode(__userData.c_str(), &length));
+       *data = reinterpret_cast<char*>(g_base64_decode(__userData.c_str(), &length));
 
        return length;
 }
@@ -188,7 +188,7 @@ JobInfo& JobInfo::setUserData(const char* data, size_t length)
        char* encoded = g_base64_encode(reinterpret_cast<const guchar*>(data), length);
 
        if (encoded == NULL) {
-               _W("User data encoding failed");
+               _W("Encoding failed");
                return *this;
        }