Kaynağa Gözat

pv: use static buffer for ctime_r() output and check its return

- fixed $TF output, regression introduced when switching to thread safe
time function
Daniel-Constantin Mierla 4 yıl önce
ebeveyn
işleme
02fc919e4f
1 değiştirilmiş dosya ile 10 ekleme ve 2 silme
  1. 10 2
      src/modules/pv/pv_time.c

+ 10 - 2
src/modules/pv/pv_time.c

@@ -246,12 +246,16 @@ int pv_get_timenowf(struct sip_msg *msg, pv_param_t *param,
 		pv_value_t *res)
 {
 	str s;
-	char t_buf[26] = {0};
+	static char t_buf[26] = {0};
 	time_t t;
 
 	t = time(NULL);
 
 	s.s = ctime_r(&t, t_buf);
+	if(s.s == NULL) {
+		return pv_get_null(msg, param, res);
+	}
+	s.s = t_buf;
 	s.len = strlen(s.s)-1;
 	return pv_get_strintval(msg, param, res, &s, (int)t);
 }
@@ -271,7 +275,7 @@ int pv_get_timef(struct sip_msg *msg, pv_param_t *param,
 		pv_value_t *res)
 {
 	str s;
-	char t_buf[26] = {0};
+	static char t_buf[26] = {0};
 
 	if(msg==NULL)
 		return -1;
@@ -279,6 +283,10 @@ int pv_get_timef(struct sip_msg *msg, pv_param_t *param,
 	msg_set_time(msg);
 
 	s.s = ctime_r(&msg->tval.tv_sec, t_buf);
+	if(s.s == NULL) {
+		return pv_get_null(msg, param, res);
+	}
+	s.s = t_buf;
 	s.len = strlen(s.s)-1;
 	return pv_get_strintval(msg, param, res, &s, (int)msg->tval.tv_sec);
 }