]> err.no Git - varnish/commitdiff
Always NUL terminate shmlog entries.
authorphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Mon, 31 Jul 2006 22:09:42 +0000 (22:09 +0000)
committerphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Mon, 31 Jul 2006 22:09:42 +0000 (22:09 +0000)
git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@581 d4fa192b-c00b-0410-8231-f00ffab90ce4

varnish-cache/bin/varnishd/shmlog.c
varnish-cache/bin/varnishlog/varnishlog.c
varnish-cache/lib/libvarnishapi/shmlog.c

index 05a18c48bafbb29126f4fe07b0b3e10fa141d700..6bd3c27846214b2f6c51494b991e20e9bbaf1f00 100644 (file)
@@ -66,17 +66,18 @@ VSLR(enum shmlogtag tag, unsigned id, const char *b, const char *e)
        assert(loghead->ptr < loghead->size);
 
        /* Wrap if necessary */
-       if (loghead->ptr + 4 + l + 1 > loghead->size)
+       if (loghead->ptr + 5 + l + 1 > loghead->size)
                vsl_wrap();
        p = logstart + loghead->ptr;
        p[1] = l & 0xff;
        p[2] = (id >> 8) & 0xff;
        p[3] = id & 0xff;
        memcpy(p + 4, b, l);
-       p[4 + l] = SLT_ENDMARKER;
+       p[4 + l] = '\0';
+       p[5 + l] = SLT_ENDMARKER;
        p[0] = tag;
 
-       loghead->ptr += 4 + l;
+       loghead->ptr += 5 + l;
        assert(loghead->ptr < loghead->size);
        AZ(pthread_mutex_unlock(&vsl_mutex));
 }
@@ -95,7 +96,7 @@ VSL(enum shmlogtag tag, unsigned id, const char *fmt, ...)
        assert(loghead->ptr < loghead->size);
 
        /* Wrap if we cannot fit a full size record */
-       if (loghead->ptr + 4 + 255 + 1 > loghead->size) 
+       if (loghead->ptr + 5 + 255 + 1 > loghead->size) 
                vsl_wrap();
 
        p = logstart + loghead->ptr;
@@ -108,10 +109,11 @@ VSL(enum shmlogtag tag, unsigned id, const char *fmt, ...)
        p[1] = n & 0xff;
        p[2] = (id >> 8) & 0xff;
        p[3] = id & 0xff;
-       p[4 + n] = SLT_ENDMARKER;
+       p[4 + n] = '\0';;
+       p[5 + n] = SLT_ENDMARKER;
        p[0] = tag;
 
-       loghead->ptr += 4 + n;
+       loghead->ptr += 5 + n;
        assert(loghead->ptr < loghead->size);
        
        AZ(pthread_mutex_unlock(&vsl_mutex));
index b59337405d175302fe23cd01a5c6486b8f40d5ac..73834c3978c0ec17b8362846a9e6fd4079736df4 100644 (file)
@@ -259,7 +259,7 @@ main(int argc, char **argv)
                }
                v = 0;
                if (wfile != NULL) {
-                       i = fwrite(p, 4 + p[1], 1, wfile);
+                       i = fwrite(p, 5 + p[1], 1, wfile);
                        if (i != 1)
                                perror(w_opt);
                        u++;
index a2927152ab73a6bbb416a7bc9c058071ab107a83..f162718d2fa62108a6f00b89793eccbee876c531 100644 (file)
@@ -22,7 +22,7 @@ struct VSL_data {
        unsigned char           *ptr;
 
        FILE                    *fi;
-       unsigned char           rbuf[4 + 255 + 1];
+       unsigned char           rbuf[5 + 255 + 1];
 
        int                     b_opt;
        int                     c_opt;
@@ -140,11 +140,9 @@ vsl_nextlog(struct VSL_data *vd, unsigned char **pp)
                i = fread(vd->rbuf, 4, 1, vd->fi);
                if (i != 1)
                        return (-1);
-               if (vd->rbuf[1] > 0) {
-                       i = fread(vd->rbuf + 4, vd->rbuf[1], 1, vd->fi);
-                       if (i != 1)
-                               return (-1);
-               }
+               i = fread(vd->rbuf + 4, vd->rbuf[1] + 1, 1, vd->fi);
+               if (i != 1)
+                       return (-1);
                *pp = vd->rbuf;
                return (1);
        }
@@ -159,7 +157,7 @@ vsl_nextlog(struct VSL_data *vd, unsigned char **pp)
                        vd->ptr = p;
                        return (0);
                }
-               vd->ptr = p + p[1] + 4;
+               vd->ptr = p + p[1] + 5;
                *pp = p;
                return (1);
        }