1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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
{
|