]> err.no Git - varnish/commitdiff
Never release more bytes than there is room for.
authorphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Tue, 24 Jun 2008 18:09:38 +0000 (18:09 +0000)
committerphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Tue, 24 Jun 2008 18:09:38 +0000 (18:09 +0000)
git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@2791 d4fa192b-c00b-0410-8231-f00ffab90ce4

varnish-cache/bin/varnishd/cache.h
varnish-cache/bin/varnishd/cache_vrt_re.c
varnish-cache/bin/varnishd/cache_ws.c

index be10e374513cc2b21640be4067cf5c1b36257134..5b2b3a6e55493958506ea0b7bfaf80da582759da 100644 (file)
@@ -691,6 +691,8 @@ Tlen(const txt t)
 static inline void
 Tadd(txt *t, const char *p, int l)
 {
+       Tcheck(*t);
+
        if (l <= 0) {
        } if (t->b + l < t->e) {
                memcpy(t->b, p, l);
index 38e4e167b9b99853b57621ebba0277dc6ab7b403..a6884d39954c60d1d626ea449a576afcf8fd3a38 100644 (file)
@@ -110,7 +110,7 @@ VRT_regsub(const struct sess *sp, int all, const char *str, void *re, const char
        regex_t *t;
        int i, l;
        txt res;
-       char *p;
+       char *b0;
        const char *s;
        unsigned u, x;
 
@@ -124,8 +124,9 @@ VRT_regsub(const struct sess *sp, int all, const char *str, void *re, const char
        if (i == REG_NOMATCH)
                return(str);
 
+VSL(SLT_Debug, sp->fd, "REGSUB {");
        u = WS_Reserve(sp->http->ws, 0);
-       res.e = res.b = p = sp->http->ws->f;
+       res.e = res.b = b0 = sp->http->ws->f;
        res.e += u;
 
        do {
@@ -163,6 +164,7 @@ VRT_regsub(const struct sess *sp, int all, const char *str, void *re, const char
                return (str);
        } 
        Tcheck(res);
-       WS_Release(sp->http->ws, p - res.b);
-       return (p);
+       WS_Release(sp->http->ws, b0 - res.b);
+VSL(SLT_Debug, sp->fd, "REGSUB }");
+       return (b0);
 }
index 2ccfac2cf1a0852bd78f13d41b61c8f4c14f4fbc..431596c0170674a2a7489b5dc74244bfc23e92ad 100644 (file)
@@ -167,6 +167,7 @@ void
 WS_Release(struct ws *ws, unsigned bytes)
 {
        WS_Assert(ws);
+       assert(bytes <= ws->e - ws->f);
        DSL(0x02, SLT_Debug, 0, "WS_Release(%p, %u)", ws, bytes);
        assert(ws->r != NULL);
        assert(ws->f + bytes <= ws->r);