summaryrefslogtreecommitdiff
path: root/community/libfaketime/libfaketime.patch
blob: 085036c41274a8c53dcadf40b71f7faf247f1415 (plain)
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
     {