Could you please check this?
diff --git a/atom.c b/atom.c
index bfb3370..f26ee3f 100644
--- a/atom.c
+++ b/atom.c
@@ -244,9 +244,12 @@ internAtomErrorV(int e, const char *f, va_list args)
AtomPtr atom;
char *s1, *s2;
int n, rc;
+ va_list args_copy;
if(f) {
- s1 = vsprintf_a(f, args);
+ va_copy(args_copy, args);
+ s1 = vsprintf_a(f, args_copy);
+ va_end(args_copy);
if(s1 == NULL)
return NULL;
n = strlen(s1);
diff --git a/log.c b/log.c
index dbce349..1cf2eca 100644
--- a/log.c
+++ b/log.c
@@ -402,17 +402,21 @@ really_do_log(int type, const char *f, ...)
void
really_do_log_v(int type, const char *f, va_list args)
{
+ va_list args_copy;
+
if(type & LOGGING_MAX & logLevel) {
if(logF)
{
- va_list args_copy;
va_copy(args_copy, args);
vfprintf(logF, f, args_copy);
va_end(args_copy);
}
#ifdef HAVE_SYSLOG
- if(logSyslog)
- accumulateSyslogV(type, f, args);
+ if(logSyslog) {
+ va_copy(args_copy, args);
+ accumulateSyslogV(type, f, args_copy);
+ va_end(args_copy);
+ }
#endif
}
}
@@ -430,13 +434,14 @@ really_do_log_error(int type, int e, const char *f, ...)
void
really_do_log_error_v(int type, int e, const char *f, va_list args)
{
+ va_list args_copy;
+
if((type & LOGGING_MAX & logLevel) != 0) {
char *es = pstrerror(e);
if(es == NULL)
es = "Unknown error";
if(logF) {
- va_list args_copy;
va_copy(args_copy, args);
vfprintf(logF, f, args_copy);
fprintf(logF, ": %s\n", es);
@@ -447,7 +452,9 @@ really_do_log_error_v(int type, int e, const char *f,
va_list args)
char msg[256];
int n = 0;
- n = snnvprintf(msg, n, 256, f, args);
+ va_copy(args_copy, args);
+ n = snnvprintf(msg, n, 256, f, args_copy);
+ va_end(args_copy);
n = snnprintf(msg, n, 256, ": ");
n = snnprint_n(msg, n, 256, es, strlen (es));
n = snnprintf(msg, n, 256, "\n");
diff --git a/util.c b/util.c
index 2da3550..8fc30e5 100644
--- a/util.c
+++ b/util.c
@@ -50,9 +50,14 @@ int
snnvprintf(char *restrict buf, int n, int len, const char *format, va_list
args)
{
int rc = -1;
+ va_list args_copy;
+
if(n < 0) return -2;
- if(n < len)
- rc = vsnprintf(buf + n, len - n, format, args);
+ if(n < len) {
+ va_copy(args_copy, args);
+ rc = vsnprintf(buf + n, len - n, format, args_copy);
+ va_end(args_copy);
+ }
if(rc >= 0 && n + rc <= len)
return n + rc;
else
@@ -268,8 +273,11 @@ vsprintf_a(const char *f, va_list args)
{
char *r;
int rc;
+ va_list args_copy;
- rc = vasprintf(&r, f, args);
+ va_copy(args_copy, args);
+ rc = vasprintf(&r, f, args_copy);
+ va_end(args_copy);
if(rc < 0)
return NULL;
return r;
@@ -288,6 +296,7 @@ vsprintf_a(const char *f, va_list args)
va_copy(args_copy, args);
n = vsnprintf(buf, 64, f, args_copy);
+ va_end(args_copy);
if(n >= 0 && n < 64) {
return strdup_n(buf, n);
}
@@ -302,9 +311,10 @@ vsprintf_a(const char *f, va_list args)
return NULL;
va_copy(args_copy, args);
n = vsnprintf(string, size, f, args_copy);
- if(n >= 0 && n < size)
+ va_end(args_copy);
+ if(n >= 0 && n < size) {
return string;
- else if(n >= size)
+ } else if(n >= size)
size = n + 1;
else
size = size * 3 / 2;
------------------------------------------------------------------------------
CenturyLink Cloud: The Leader in Enterprise Cloud Services.
Learn Why More Businesses Are Choosing CenturyLink Cloud For
Critical Workloads, Development Environments & Everything In Between.
Get a Quote or Start a Free Trial Today.
http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk
_______________________________________________
Polipo-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/polipo-users