[master] 6f587a30b Add """ ... """ as a long string format in VCL
Dridi Boukelmoune
dridi.boukelmoune at gmail.com
Tue Nov 24 14:26:10 UTC 2020
commit 6f587a30b5098417a54497bf42ede03314287e64
Author: Andrew Wiik <andrew at varnish-software.com>
Date: Mon Oct 26 16:06:56 2020 -0400
Add """ ... """ as a long string format in VCL
diff --git a/bin/varnishtest/tests/v00019.vtc b/bin/varnishtest/tests/v00019.vtc
index fc98616a6..d53a5aeb2 100644
--- a/bin/varnishtest/tests/v00019.vtc
+++ b/bin/varnishtest/tests/v00019.vtc
@@ -18,6 +18,11 @@ varnish v1 -errvcl {Unterminated long-string, starting at} {
{" }
}
+varnish v1 -errvcl {Unterminated long-string, starting at} {
+ backend b { .host = "127.0.0.1"; }
+ """ ""
+}
+
varnish v1 -errvcl {Unterminated string at} {
backend b { .host = "127.0.0.1"; }
"
diff --git a/bin/varnishtest/tests/v00066.vtc b/bin/varnishtest/tests/v00066.vtc
new file mode 100644
index 000000000..3fd9d5deb
--- /dev/null
+++ b/bin/varnishtest/tests/v00066.vtc
@@ -0,0 +1,22 @@
+varnishtest "long string coverage"
+
+varnish v1 -vcl {
+ backend default none;
+
+ sub vcl_recv {
+ return (synth(200));
+ }
+
+ sub vcl_synth {
+ set resp.body = """{"key":"value"}""";
+ return (deliver);
+ }
+} -start
+
+client c1 {
+ txreq
+ rxresp
+ expect resp.status == 200
+ expect resp.bodylen == 15
+ expect resp.body == {{"key":"value"}}
+} -run
diff --git a/lib/libvcc/vcc_token.c b/lib/libvcc/vcc_token.c
index 00e21b414..d8d80491d 100644
--- a/lib/libvcc/vcc_token.c
+++ b/lib/libvcc/vcc_token.c
@@ -462,7 +462,7 @@ vcc_Lexer(struct vcc *tl, const struct source *sp, int eoi)
return;
}
- /* Recognize long-strings */
+ /* Recognize long-strings {" "} */
if (*p == '{' && p[1] == '"') {
for (q = p + 2; q < sp->e; q++) {
if (*q == '"' && q[1] == '}') {
@@ -487,6 +487,31 @@ vcc_Lexer(struct vcc *tl, const struct source *sp, int eoi)
return;
}
+ /* Recognize long-strings """ """ */
+ if (*p == '"' && p[1] == '"' && p[2] == '"') {
+ for (q = p + 3; q < sp->e; q++) {
+ if (*q == '"' && q[1] == '"' && q[2] == '"') {
+ vcc_addtoken(tl, CSTR, sp, p, q + 3);
+ break;
+ }
+ }
+ if (q < sp->e) {
+ p = q + 3;
+ u = tl->t->e - tl->t->b;
+ u -= 6; /* """ ... """ */
+ tl->t->dec = TlAlloc(tl, u + 1 );
+ AN(tl->t->dec);
+ memcpy(tl->t->dec, tl->t->b + 3, u);
+ tl->t->dec[u] = '\0';
+ continue;
+ }
+ vcc_addtoken(tl, EOI, sp, p, p + 3);
+ VSB_cat(tl->sb,
+ "Unterminated long-string, starting at\n");
+ vcc_ErrWhere(tl, tl->t);
+ return;
+ }
+
/* Recognize BLOB (= SF-binary) */
if (*p == ':') {
vsb = VSB_new_auto();
More information about the varnish-commit
mailing list