[master] 27cc6ff Do not use VNUM() in varnishncsa
Martin Blix Grydeland
martin at varnish-software.com
Thu Apr 16 16:12:19 CEST 2015
commit 27cc6ff616be68407a633fb925ed661638b93b7c
Author: Martin Blix Grydeland <martin at varnish-software.com>
Date: Thu Apr 16 16:10:41 2015 +0200
Do not use VNUM() in varnishncsa
The strings in varnishncsa are not necessarily null-terminated, but
having a start and an end pointer. The VNUM() thus fails when not
seeing the end of string null character, causing parsing failures.
diff --git a/bin/varnishncsa/varnishncsa.c b/bin/varnishncsa/varnishncsa.c
index ce30191..257a39d 100644
--- a/bin/varnishncsa/varnishncsa.c
+++ b/bin/varnishncsa/varnishncsa.c
@@ -59,7 +59,6 @@
#include "vas.h"
#include "vdef.h"
#include "vcs.h"
-#include "vnum.h"
#include "vsb.h"
#include "vut.h"
#include "vqueue.h"
@@ -285,13 +284,16 @@ static int __match_proto__(format_f)
format_time(const struct format *format)
{
double t_start, t_end;
+ char *p;
char buf[64];
time_t t;
struct tm tm;
CHECK_OBJ_NOTNULL(format, FORMAT_MAGIC);
if (CTX.frag[F_tstart].gen == CTX.gen) {
- t_start = VNUM(CTX.frag[F_tstart].b);
+ t_start = strtod(CTX.frag[F_tstart].b, &p);
+ if (p != CTX.frag[F_tstart].e)
+ t_start = NAN;
} else
t_start = NAN;
if (isnan(t_start)) {
@@ -304,8 +306,8 @@ format_time(const struct format *format)
/* Missing t_end defaults to t_start */
if (CTX.frag[F_tend].gen == CTX.gen) {
- t_end = VNUM(CTX.frag[F_tend].b);
- if (isnan(t_end))
+ t_end = strtod(CTX.frag[F_tend].b, &p);
+ if (p != CTX.frag[F_tend].e)
t_end = t_start;
} else
t_end = t_start;
More information about the varnish-commit
mailing list