aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan200101 <sentrycraft123@gmail.com>2022-06-12 22:28:21 +0200
committerJan200101 <sentrycraft123@gmail.com>2022-06-12 22:28:21 +0200
commit4e4db5b28319c51a8621cec49ea1aaf8ff78ac2a (patch)
tree94c11e6165a5675516e92b41f181422b73c7148f
parentf7aa1e4b8d433252e1d30436277dfbdd3555feeb (diff)
downloadpolecat-4e4db5b28319c51a8621cec49ea1aaf8ff78ac2a.tar.gz
polecat-4e4db5b28319c51a8621cec49ea1aaf8ff78ac2a.zip
make net init explicit, fix lutris URL escape invalid read
-rw-r--r--cmake/FindJsonC.cmake92
-rw-r--r--cmake/FindLibarchive.cmake84
-rw-r--r--cmake/FindLibcurl.cmake82
-rw-r--r--src/dxvk.c5
-rw-r--r--src/lutris.c19
-rw-r--r--src/net.c13
-rw-r--r--src/net.h4
-rw-r--r--src/wine.c15
8 files changed, 171 insertions, 143 deletions
diff --git a/cmake/FindJsonC.cmake b/cmake/FindJsonC.cmake
index 59cf00a..1d4386b 100644
--- a/cmake/FindJsonC.cmake
+++ b/cmake/FindJsonC.cmake
@@ -5,59 +5,59 @@
find_package(PkgConfig QUIET)
if (PKG_CONFIG_FOUND)
- pkg_check_modules(_JSONC json-c)
+ pkg_check_modules(_JSONC json-c)
- if (BUILD_STATIC AND NOT _JSONC_FOUND)
- message(FATAL_ERROR "Cannot find static build information")
- endif()
+ if (BUILD_STATIC AND NOT _JSONC_FOUND)
+ message(FATAL_ERROR "Cannot find static build information")
+ endif()
endif()
if (_JSONC_FOUND) # we can rely on pkg-config
- if (NOT BUILD_STATIC)
- set(JSONC_LIBRARIES ${_JSONC_LIBRARIES})
- set(JSONC_INCLUDE_DIRS ${_JSONC_INCLUDE_DIRS})
- set(JSONC_CFLAGS ${_JSONC_CFLAGS_OTHER})
- else()
- set(JSONC_LIBRARIES ${_JSONC_STATIC_LIBRARIES})
- set(JSONC_INCLUDE_DIRS ${_JSONC_STATIC_INCLUDE_DIRS})
- set(JSONC_CFLAGS ${_JSONC_STATIC_CFLAGS_OTHER})
- endif()
+ if (NOT BUILD_STATIC)
+ set(JSONC_LIBRARIES ${_JSONC_LIBRARIES})
+ set(JSONC_INCLUDE_DIRS ${_JSONC_INCLUDE_DIRS})
+ set(JSONC_CFLAGS ${_JSONC_CFLAGS_OTHER})
+ else()
+ set(JSONC_LIBRARIES ${_JSONC_STATIC_LIBRARIES})
+ set(JSONC_INCLUDE_DIRS ${_JSONC_STATIC_INCLUDE_DIRS})
+ set(JSONC_CFLAGS ${_JSONC_STATIC_CFLAGS_OTHER})
+ endif()
else()
- if(CMAKE_SIZEOF_VOID_P EQUAL 8)
- set(_lib_suffix 64)
- else()
- set(_lib_suffix 32)
- endif()
+ if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+ set(_lib_suffix 64)
+ else()
+ set(_lib_suffix 32)
+ endif()
- find_path(JSONC_INC
- NAMES json.h
- HINTS
- ENV jsoncPath${_lib_suffix}
- ENV jsoncPath
- ${_JSONC_INCLUDE_DIRS}
- PATHS
- /usr/include/json-c /usr/local/include/json-c)
+ find_path(JSONC_INC
+ NAMES json.h
+ HINTS
+ ENV jsoncPath${_lib_suffix}
+ ENV jsoncPath
+ ${_JSONC_INCLUDE_DIRS}
+ PATHS
+ /usr/include/json-c /usr/local/include/json-c)
- find_library(JSONC_LIB
- NAMES ${_JSONC_LIBRARIES} jsonc json-c
- HINTS
- ENV jsoncPath${_lib_suffix}
- ENV jsoncPath
- ${_JSONC_LIBRARY_DIRS}
- ${_JSONC_STATIC_LIBRARY_DIRS}
- PATHS
- /usr/lib{_lib_suffix} /usr/local/lib{_lib_suffix}
- /usr/lib /usr/local/lib)
+ find_library(JSONC_LIB
+ NAMES ${_JSONC_LIBRARIES} jsonc json-c
+ HINTS
+ ENV jsoncPath${_lib_suffix}
+ ENV jsoncPath
+ ${_JSONC_LIBRARY_DIRS}
+ ${_JSONC_STATIC_LIBRARY_DIRS}
+ PATHS
+ /usr/lib{_lib_suffix} /usr/local/lib{_lib_suffix}
+ /usr/lib /usr/local/lib)
- include(FindPackageHandleStandardArgs)
- find_package_handle_standard_args(JsonC DEFAULT_MSG JSONC_LIB JSONC_INC)
- mark_as_advanced(JSONC_INC JSONC_LIB)
+ include(FindPackageHandleStandardArgs)
+ find_package_handle_standard_args(JsonC DEFAULT_MSG JSONC_LIB JSONC_INC)
+ mark_as_advanced(JSONC_INC JSONC_LIB)
- if(JSONC_FOUND)
- set(JSONC_INCLUDE_DIRS ${JSONC_INC})
- set(JSONC_LIBRARIES ${JSONC_LIB})
- if (BUILD_STATIC)
- set(JSONC_LIBRARIES ${JSONC_LIBRARIES} ${_JSONC_STATIC_LIBRARIES})
- endif()
- endif()
+ if(JSONC_FOUND)
+ set(JSONC_INCLUDE_DIRS ${JSONC_INC})
+ set(JSONC_LIBRARIES ${JSONC_LIB})
+ if (BUILD_STATIC)
+ set(JSONC_LIBRARIES ${JSONC_LIBRARIES} ${_JSONC_STATIC_LIBRARIES})
+ endif()
+ endif()
endif() \ No newline at end of file
diff --git a/cmake/FindLibarchive.cmake b/cmake/FindLibarchive.cmake
index e34e991..02009aa 100644
--- a/cmake/FindLibarchive.cmake
+++ b/cmake/FindLibarchive.cmake
@@ -5,55 +5,55 @@
find_package(PkgConfig QUIET)
if (PKG_CONFIG_FOUND)
- pkg_check_modules(_LIBARCHIVE libarchive)
+ pkg_check_modules(_LIBARCHIVE libarchive)
- if (BUILD_STATIC AND NOT _LIBARCHIVE_FOUND)
- message(FATAL_ERROR "Cannot find static build information")
- endif()
+ if (BUILD_STATIC AND NOT _LIBARCHIVE_FOUND)
+ message(FATAL_ERROR "Cannot find static build information")
+ endif()
endif()
if (_LIBARCHIVE_FOUND) # we can rely on pkg-config
- if (NOT BUILD_STATIC)
- set(LIBARCHIVE_LIBRARIES ${_LIBARCHIVE_LIBRARIES})
- set(LIBARCHIVE_INCLUDE_DIRS ${_LIBARCHIVE_INCLUDE_DIRS})
- set(LIBARCHIVE_CFLAGS ${_LIBARCHIVE_CFLAGS_OTHER})
- else()
- set(LIBARCHIVE_LIBRARIES ${_LIBARCHIVE_STATIC_LIBRARIES})
- set(LIBARCHIVE_INCLUDE_DIRS ${_LIBARCHIVE_STATIC_INCLUDE_DIRS})
- set(LIBARCHIVE_CFLAGS ${_LIBARCHIVE_STATIC_CFLAGS_OTHER})
- endif()
+ if (NOT BUILD_STATIC)
+ set(LIBARCHIVE_LIBRARIES ${_LIBARCHIVE_LIBRARIES})
+ set(LIBARCHIVE_INCLUDE_DIRS ${_LIBARCHIVE_INCLUDE_DIRS})
+ set(LIBARCHIVE_CFLAGS ${_LIBARCHIVE_CFLAGS_OTHER})
+ else()
+ set(LIBARCHIVE_LIBRARIES ${_LIBARCHIVE_STATIC_LIBRARIES})
+ set(LIBARCHIVE_INCLUDE_DIRS ${_LIBARCHIVE_STATIC_INCLUDE_DIRS})
+ set(LIBARCHIVE_CFLAGS ${_LIBARCHIVE_STATIC_CFLAGS_OTHER})
+ endif()
else()
- if(CMAKE_SIZEOF_VOID_P EQUAL 8)
- set(_lib_suffix 64)
- else()
- set(_lib_suffix 32)
- endif()
+ if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+ set(_lib_suffix 64)
+ else()
+ set(_lib_suffix 32)
+ endif()
- find_path(LIBARCHIVE_INC
- NAMES archive.h archive_entry.h
- HINTS
- ENV libarchivePath${_lib_suffix}
- ENV libarchivePath
- ${_LIBARCHIVE_INCLUDE_DIRS}
- PATHS
- /usr/include /usr/local/include)
+ find_path(LIBARCHIVE_INC
+ NAMES archive.h archive_entry.h
+ HINTS
+ ENV libarchivePath${_lib_suffix}
+ ENV libarchivePath
+ ${_LIBARCHIVE_INCLUDE_DIRS}
+ PATHS
+ /usr/include /usr/local/include)
- find_library(LIBARCHIVE_LIB
- NAMES archive
- HINTS
- ENV libarchivePath${_lib_suffix}
- ENV libarchivePath
- PATHS
- /usr/lib{_lib_suffix} /usr/local/lib{_lib_suffix}
- /usr/lib /usr/local/lib)
+ find_library(LIBARCHIVE_LIB
+ NAMES archive
+ HINTS
+ ENV libarchivePath${_lib_suffix}
+ ENV libarchivePath
+ PATHS
+ /usr/lib{_lib_suffix} /usr/local/lib{_lib_suffix}
+ /usr/lib /usr/local/lib)
- include(FindPackageHandleStandardArgs)
- find_package_handle_standard_args(Libarchive DEFAULT_MSG LIBARCHIVE_LIB LIBARCHIVE_INC)
- mark_as_advanced(LIBARCHIVE_INC LIBARCHIVE_LIB)
+ include(FindPackageHandleStandardArgs)
+ find_package_handle_standard_args(Libarchive DEFAULT_MSG LIBARCHIVE_LIB LIBARCHIVE_INC)
+ mark_as_advanced(LIBARCHIVE_INC LIBARCHIVE_LIB)
- if(LIBARCHIVE_FOUND)
- set(LIBARCHIVE_INCLUDE_DIRS ${LIBARCHIVE_INC})
- set(LIBARCHIVE_LIBRARIES ${LIBARCHIVE_LIB})
- set(LIBARCHIVE_CFLAGS "")
- endif()
+ if(LIBARCHIVE_FOUND)
+ set(LIBARCHIVE_INCLUDE_DIRS ${LIBARCHIVE_INC})
+ set(LIBARCHIVE_LIBRARIES ${LIBARCHIVE_LIB})
+ set(LIBARCHIVE_CFLAGS "")
+ endif()
endif() \ No newline at end of file
diff --git a/cmake/FindLibcurl.cmake b/cmake/FindLibcurl.cmake
index aa89105..a940c6e 100644
--- a/cmake/FindLibcurl.cmake
+++ b/cmake/FindLibcurl.cmake
@@ -5,54 +5,54 @@
find_package(PkgConfig QUIET)
if (PKG_CONFIG_FOUND)
- pkg_check_modules(_CURL libcurl)
+ pkg_check_modules(_CURL libcurl)
- if (BUILD_STATIC AND NOT _CURL_FOUND)
- message(FATAL_ERROR "Cannot find static build information")
- endif()
+ if (BUILD_STATIC AND NOT _CURL_FOUND)
+ message(FATAL_ERROR "Cannot find static build information")
+ endif()
endif()
if (_CURL_FOUND) # we can rely on pkg-config
- if (NOT BUILD_STATIC)
- set(LIBCURL_LIBRARIES ${_CURL_LIBRARIES})
- set(LIBCURL_INCLUDE_DIRS ${_CURL_INCLUDE_DIRS})
- set(LIBCURL_CFLAGS ${_CURL_CFLAGS_OTHER})
- else()
- set(LIBCURL_LIBRARIES ${_CURL_STATIC_LIBRARIES})
- set(LIBCURL_INCLUDE_DIRS ${_CURL_STATIC_INCLUDE_DIRS})
- set(LIBCURL_CFLAGS ${_CURL_STATIC_CFLAGS_OTHER})
- endif()
+ if (NOT BUILD_STATIC)
+ set(LIBCURL_LIBRARIES ${_CURL_LIBRARIES})
+ set(LIBCURL_INCLUDE_DIRS ${_CURL_INCLUDE_DIRS})
+ set(LIBCURL_CFLAGS ${_CURL_CFLAGS_OTHER})
+ else()
+ set(LIBCURL_LIBRARIES ${_CURL_STATIC_LIBRARIES})
+ set(LIBCURL_INCLUDE_DIRS ${_CURL_STATIC_INCLUDE_DIRS})
+ set(LIBCURL_CFLAGS ${_CURL_STATIC_CFLAGS_OTHER})
+ endif()
else()
- if(CMAKE_SIZEOF_VOID_P EQUAL 8)
- set(_lib_suffix 64)
- else()
- set(_lib_suffix 32)
- endif()
+ if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+ set(_lib_suffix 64)
+ else()
+ set(_lib_suffix 32)
+ endif()
- find_path(CURL_INC
- NAMES curl/curl.h
- HINTS
- ENV curlPath${_lib_suffix}
- ENV curlPath
- PATHS
- /usr/include /usr/local/include)
+ find_path(CURL_INC
+ NAMES curl/curl.h
+ HINTS
+ ENV curlPath${_lib_suffix}
+ ENV curlPath
+ PATHS
+ /usr/include /usr/local/include)
- find_library(CURL_LIB
- NAMES curl
- HINTS
- ENV curlPath${_lib_suffix}
- ENV curlPath
- PATHS
- /usr/lib{_lib_suffix} /usr/local/lib{_lib_suffix}
- /usr/lib /usr/local/lib)
+ find_library(CURL_LIB
+ NAMES curl
+ HINTS
+ ENV curlPath${_lib_suffix}
+ ENV curlPath
+ PATHS
+ /usr/lib{_lib_suffix} /usr/local/lib{_lib_suffix}
+ /usr/lib /usr/local/lib)
- include(FindPackageHandleStandardArgs)
- find_package_handle_standard_args(Libcurl DEFAULT_MSG CURL_LIB CURL_INC)
- mark_as_advanced(CURL_INC CURL_LIB)
+ include(FindPackageHandleStandardArgs)
+ find_package_handle_standard_args(Libcurl DEFAULT_MSG CURL_LIB CURL_INC)
+ mark_as_advanced(CURL_INC CURL_LIB)
- if(LIBCURL_FOUND)
- set(LIBCURL_INCLUDE_DIRS ${CURL_INC})
- set(LIBCURL_LIBRARIES ${CURL_LIB})
- set(LIBCURL_CFLAGS "")
- endif()
+ if(LIBCURL_FOUND)
+ set(LIBCURL_INCLUDE_DIRS ${CURL_INC})
+ set(LIBCURL_LIBRARIES ${CURL_LIB})
+ set(LIBCURL_CFLAGS "")
+ endif()
endif() \ No newline at end of file
diff --git a/src/dxvk.c b/src/dxvk.c
index 4a1295a..d52fbbf 100644
--- a/src/dxvk.c
+++ b/src/dxvk.c
@@ -30,11 +30,11 @@ COMMAND(dxvk, download)
{
if (argc == 2)
{
+ net_init();
struct json_object* runner = fetchJSON(DXVK_API);
if (runner)
{
-
struct json_object* value, *temp, *temp2;
uint8_t found = 0;
@@ -91,6 +91,7 @@ COMMAND(dxvk, download)
json_object_put(runner);
}
+ net_deinit();
}
else
{
@@ -138,6 +139,7 @@ COMMAND(dxvk, remove)
COMMAND(dxvk, list)
{
+ net_init();
struct json_object* runner = fetchJSON(DXVK_API);
if (runner)
@@ -158,6 +160,7 @@ COMMAND(dxvk, list)
json_object_put(runner);
}
+ net_deinit();
return EXIT_SUCCESS;
}
diff --git a/src/lutris.c b/src/lutris.c
index 7e94c21..fdf470c 100644
--- a/src/lutris.c
+++ b/src/lutris.c
@@ -36,6 +36,8 @@ COMMAND(lutris, search)
{
if (argc > 1 && argv[1][0] != '\0')
{
+ net_init();
+
size_t str_size = 0;
for (int i = 1; i < argc; ++i)
{
@@ -49,7 +51,7 @@ COMMAND(lutris, search)
// escapeString can return is strlen*3
str_size *= 3;
- char* str = malloc(str_size);
+ char* str = malloc(str_size+1);
if (!str) return 1;
str[0] = '\0';
@@ -58,7 +60,7 @@ COMMAND(lutris, search)
if (i != 1) strncat(str, " ", str_size);
strncat(str, argv[i], str_size);
}
- str[str_size-1] = '\0';
+ str[str_size] = '\0';
lutris_escapeString(str, str_size);
char* url = malloc(strlen(LUTRIS_GAME_SEARCH_API) + strlen(str));
@@ -89,6 +91,7 @@ COMMAND(lutris, search)
json_object_put(queryresult);
}
+ net_deinit();
}
else
{
@@ -102,6 +105,8 @@ COMMAND(lutris, list)
{
if (argc == 2)
{
+ net_init();
+
// argv being modifyable is not always a given so lets
// lets make a mutable copy
char* str = strdup(argv[1]);
@@ -145,6 +150,7 @@ COMMAND(lutris, list)
json_object_put(queryresult);
}
+ net_deinit();
}
else
{
@@ -158,6 +164,7 @@ COMMAND(lutris, install)
{
if (argc == 2)
{
+ net_init();
struct script_t installer = lutris_getInstaller(argv[1]);
if (installer.error == NONE)
@@ -310,6 +317,7 @@ COMMAND(lutris, install)
}
lutris_freeInstaller(&installer);
+ net_deinit();
}
return EXIT_SUCCESS;
}
@@ -318,6 +326,7 @@ COMMAND(lutris, info)
{
if (argc == 2)
{
+ net_init();
struct script_t installer = lutris_getInstaller(argv[1]);
if (installer.error > NO_SLUG || installer.error == NONE)
@@ -389,6 +398,7 @@ COMMAND(lutris, info)
}
lutris_freeInstaller(&installer);
+ net_deinit();
}
else
{
@@ -401,9 +411,12 @@ COMMAND_HELP(lutris, " lutris")
void lutris_escapeString(char* str, size_t size)
{
+ if (!str || !*str)
+ return;
+
char* tail = str + size;
- while (str != tail)
+ while (*str && str < tail)
{
switch (*str)
{
diff --git a/src/net.c b/src/net.c
index 0996d79..a9ec9dd 100644
--- a/src/net.c
+++ b/src/net.c
@@ -9,6 +9,16 @@
#include "net.h"
#include "common.h"
+void net_init()
+{
+ curl_global_init(CURL_GLOBAL_ALL);
+}
+
+void net_deinit()
+{
+ curl_global_cleanup();
+}
+
static inline size_t memoryCallback(const void* contents, size_t size, size_t nmemb, void* userp)
{
size_t realsize = size * nmemb;
@@ -65,8 +75,6 @@ struct MemoryStruct* downloadToRam(const char* URL, int progress)
chunk->memory[0] = 0;
chunk->size = 0;
- curl_global_init(CURL_GLOBAL_ALL);
-
curl_handle = curl_easy_init();
curl_easy_setopt(curl_handle, CURLOPT_URL, URL);
@@ -99,7 +107,6 @@ struct MemoryStruct* downloadToRam(const char* URL, int progress)
}
curl_easy_cleanup(curl_handle);
- curl_global_cleanup();
}
else
{
diff --git a/src/net.h b/src/net.h
index 34b7519..69ada36 100644
--- a/src/net.h
+++ b/src/net.h
@@ -4,9 +4,9 @@
#include <curl/curl.h>
#include <json.h>
-#define TIMEOPT CURLINFO_TOTAL_TIME_T
+void net_init();
+void net_deinit();
-size_t WriteMemoryCallback(void*, size_t, size_t, void*);
struct MemoryStruct* downloadToRam(const char* URL, int);
void downloadToFile(const char*, const char*, int);
struct json_object* fetchJSON(const char*);
diff --git a/src/wine.c b/src/wine.c
index a88c874..a495b37 100644
--- a/src/wine.c
+++ b/src/wine.c
@@ -35,6 +35,7 @@ COMMAND(winecmd, download)
{
if (argc >= 2)
{
+ net_init();
struct json_object* runner = fetchJSON(WINE_API);
if (runner)
@@ -98,11 +99,13 @@ COMMAND(winecmd, download)
json_object_put(runner);
}
+ net_deinit();
}
else
{
fprintf(stderr, USAGE_STR " wine download [versions]\n\nversions are obtained via '" NAME " wine list'\n");
}
+
return EXIT_SUCCESS;
}
@@ -160,6 +163,7 @@ COMMAND(winecmd, remove)
COMMAND(winecmd, list)
{
+ net_init();
struct json_object* runner = fetchJSON(WINE_API);
if (runner)
@@ -182,6 +186,7 @@ COMMAND(winecmd, list)
json_object_put(runner);
}
+ net_deinit();
return EXIT_SUCCESS;
}
@@ -346,7 +351,7 @@ COMMAND(winecmd, env)
printf("To add a wine installation to your PATH\n"
"you have to eval the output.\n\n");
if (!fish_env)
- printf("$ eval 'polecat wine env %s'\n", winever);
+ printf("$ eval `polecat wine env %s`\n", winever);
else
printf("$ eval (polecat wine fish-env %s)\n", winever);
}
@@ -385,8 +390,8 @@ enum wine_type_t check_wine_ver(char* winepath, size_t size)
winepathcopy = malloc(size);
if (winepathcopy)
{
- strncpy(winepathcopy, winepath, size);
- strncat(winepathcopy, WINEBIN, size - strlen(winepathcopy));
+ strncpy(winepathcopy, winepath, size - 1);
+ strncat(winepathcopy, WINEBIN, size - strlen(winepathcopy) - 1);
if (isFile(winepathcopy))
{
@@ -394,8 +399,8 @@ enum wine_type_t check_wine_ver(char* winepath, size_t size)
return WINE_NORMAL;
}
- strncpy(winepathcopy, winepath, size);
- strncat(winepathcopy, PROTONBIN, size - strlen(winepathcopy));
+ strncpy(winepathcopy, winepath, size - 1);
+ strncat(winepathcopy, PROTONBIN, size - strlen(winepathcopy) - 1);
if (isFile(winepathcopy))
{