From ee417e92f74b5a99d82ed993fbc64f80b418ce87 Mon Sep 17 00:00:00 2001 From: Erich Eckner Date: Tue, 6 Nov 2018 08:34:16 +0100 Subject: community/libfaketime: add hotfix --- community/libfaketime/PKGBUILD | 7 +++ community/libfaketime/libfaketime.patch | 80 +++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 community/libfaketime/PKGBUILD create mode 100644 community/libfaketime/libfaketime.patch diff --git a/community/libfaketime/PKGBUILD b/community/libfaketime/PKGBUILD new file mode 100644 index 00000000..6073b8fb --- /dev/null +++ b/community/libfaketime/PKGBUILD @@ -0,0 +1,7 @@ +# hotfix for FS#60456 +source+=('libfaketime.patch') +md5sums+=('cdec9bde3e4093310225cf458059a321') +prepare() { + cd "${pkgname}-${pkgver}" + patch -p1 -i ../libfaketime.patch +} diff --git a/community/libfaketime/libfaketime.patch b/community/libfaketime/libfaketime.patch new file mode 100644 index 00000000..085036c4 --- /dev/null +++ b/community/libfaketime/libfaketime.patch @@ -0,0 +1,80 @@ +diff --git a/src/faketime.c b/src/faketime.c +index 138ebbd..037d749 100644 +--- a/src/faketime.c ++++ b/src/faketime.c +@@ -209,7 +209,7 @@ int main (int argc, char **argv) + int shm_fd; + sem_t *sem; + struct ft_shared_s *ft_shared; +- char shared_objs[PATH_BUFSIZE]; ++ char shared_objs[PATH_BUFSIZE * 2 + 1]; + + /* + * Casting of getpid() return value to long needed to make GCC on SmartOS +@@ -286,7 +286,7 @@ int main (int argc, char **argv) + exit(EXIT_FAILURE); + } + +- snprintf(shared_objs, PATH_BUFSIZE, "%s %s", sem_name, shm_name); ++ snprintf(shared_objs, sizeof(shared_objs), "%s %s", sem_name, shm_name); + setenv("FAKETIME_SHARED", shared_objs, true); + sem_close(sem); + } +diff --git a/src/libfaketime.c b/src/libfaketime.c +index eb2d01b..0002619 100644 +--- a/src/libfaketime.c ++++ b/src/libfaketime.c +@@ -1828,7 +1828,8 @@ void ftpl_init(void) + if ((tmp_env = getenv("FAKETIME_SPAWN_TARGET")) != NULL) + { + spawnsupport = true; +- (void) strncpy(ft_spawn_target, getenv("FAKETIME_SPAWN_TARGET"), 1024); ++ (void) strncpy(ft_spawn_target, getenv("FAKETIME_SPAWN_TARGET"), sizeof(ft_spawn_target) - 1); ++ ft_spawn_target[sizeof(ft_spawn_target) - 1] = 0; + if ((tmp_env = getenv("FAKETIME_SPAWN_SECONDS")) != NULL) + { + ft_spawn_secs = atol(tmp_env); +@@ -1889,7 +1890,8 @@ void ftpl_init(void) + } + else + { +- strncpy(user_faked_time_fmt, tmp_env, BUFSIZ); ++ strncpy(user_faked_time_fmt, tmp_env, BUFSIZ - 1); ++ user_faked_time_fmt[BUFSIZ - 1] = 0; + } + + if (shared_sem != 0) +@@ -1960,6 +1962,14 @@ static void remove_trailing_eols(char *line) + * ======================================================================= + */ + ++#ifdef PTHREAD_SINGLETHREADED_TIME ++static void pthread_cleanup_mutex_lock(void *data) ++{ ++ pthread_mutex_t *mutex = data; ++ pthread_mutex_unlock(mutex); ++} ++#endif ++ + int fake_clock_gettime(clockid_t clk_id, struct timespec *tp) + { + /* variables used for caching, introduced in version 0.6 */ +@@ -1983,7 +1993,7 @@ int fake_clock_gettime(clockid_t clk_id, struct timespec *tp) + #ifdef PTHREAD_SINGLETHREADED_TIME + static pthread_mutex_t time_mutex=PTHREAD_MUTEX_INITIALIZER; + pthread_mutex_lock(&time_mutex); +- pthread_cleanup_push((void (*)(void *))pthread_mutex_unlock, (void *)&time_mutex); ++ pthread_cleanup_push(pthread_cleanup_mutex_lock, &time_mutex); + #endif + + if ((limited_faking && +@@ -2078,7 +2088,8 @@ int fake_clock_gettime(clockid_t clk_id, struct timespec *tp) + + if (NULL != (tmp_env = getenv("FAKETIME"))) + { +- strncpy(user_faked_time, tmp_env, BUFFERLEN); ++ strncpy(user_faked_time, tmp_env, BUFFERLEN - 1); ++ user_faked_time[BUFFERLEN - 1] = 0; + } + else + { -- cgit v1.2.3