|
@@ -1820,26 +1820,46 @@ int StorageLoadValue(int position)
|
|
}
|
|
}
|
|
|
|
|
|
// Open URL with default system browser (if available)
|
|
// Open URL with default system browser (if available)
|
|
-// Note:
|
|
|
|
-// This function is onlyl safe to use if you control the URL given.
|
|
|
|
|
|
+// NOTE: This function is onlyl safe to use if you control the URL given.
|
|
// A user could craft a malicious string performing another action.
|
|
// A user could craft a malicious string performing another action.
|
|
-// Only call this function yourself not with user input or make sure to check the
|
|
|
|
-// string yourself.
|
|
|
|
-// See https://github.com/raysan5/raylib/issues/686
|
|
|
|
|
|
+// Only call this function yourself not with user input or make sure to check the string yourself.
|
|
|
|
+// CHECK: https://github.com/raysan5/raylib/issues/686
|
|
void OpenURL(const char *url)
|
|
void OpenURL(const char *url)
|
|
{
|
|
{
|
|
- char *cmd = calloc(strlen(url) + 10, sizeof(char));
|
|
|
|
|
|
+ // Small security check trying to avoid (partially) malicious code...
|
|
|
|
+ // sorry for the inconvenience when you hit this point...
|
|
|
|
+ bool validUrl = true;
|
|
|
|
+ int len = strlen(url);
|
|
|
|
+
|
|
|
|
+ for (int i = 0; i < len; i++)
|
|
|
|
+ {
|
|
|
|
+ if ((url[i] == ';') ||
|
|
|
|
+ (url[i] == '?') ||
|
|
|
|
+ (url[i] == ':') ||
|
|
|
|
+ (url[i] == '=') ||
|
|
|
|
+ (url[i] == '&'))
|
|
|
|
+ {
|
|
|
|
+ validUrl = false;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (validUrl)
|
|
|
|
+ {
|
|
|
|
+ char *cmd = calloc(strlen(url) + 10, sizeof(char));
|
|
|
|
|
|
#if defined(_WIN32)
|
|
#if defined(_WIN32)
|
|
- sprintf(cmd, "explorer '%s'", url);
|
|
|
|
|
|
+ sprintf(cmd, "explorer '%s'", url);
|
|
#elif defined(__linux__)
|
|
#elif defined(__linux__)
|
|
- sprintf(cmd, "xdg-open '%s'", url); // Alternatives: firefox, x-www-browser
|
|
|
|
|
|
+ sprintf(cmd, "xdg-open '%s'", url); // Alternatives: firefox, x-www-browser
|
|
#elif defined(__APPLE__)
|
|
#elif defined(__APPLE__)
|
|
- sprintf(cmd, "open '%s'", url);
|
|
|
|
|
|
+ sprintf(cmd, "open '%s'", url);
|
|
#endif
|
|
#endif
|
|
- system(cmd);
|
|
|
|
|
|
+ system(cmd);
|
|
|
|
|
|
- free(cmd);
|
|
|
|
|
|
+ free(cmd);
|
|
|
|
+ }
|
|
|
|
+ else TraceLog(LOG_WARNING, "Provided URL does not seem to be valid.");
|
|
}
|
|
}
|
|
|
|
|
|
//----------------------------------------------------------------------------------
|
|
//----------------------------------------------------------------------------------
|