[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