gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-exchange] branch master updated: update to mustach 1.2.7


From: gnunet
Subject: [taler-exchange] branch master updated: update to mustach 1.2.7
Date: Sun, 24 Mar 2024 14:27:25 +0100

This is an automated email from the git hooks/post-receive script.

grothoff pushed a commit to branch master
in repository exchange.

The following commit(s) were added to refs/heads/master by this push:
     new c9bdd97a update to mustach 1.2.7
c9bdd97a is described below

commit c9bdd97a294cc273480f8324dbfcba8ce3c485d1
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Sat Mar 23 14:27:23 2024 +0100

    update to mustach 1.2.7
---
 src/templating/AUTHORS                           |  1 +
 src/templating/CHANGELOG.md                      | 15 +++++++++++--
 src/templating/Makefile.am                       |  8 +++++--
 src/templating/README.md                         |  9 ++++----
 src/templating/mustach-original-Makefile         |  2 +-
 src/templating/mustach-tool.c                    |  3 ++-
 src/templating/mustach-wrap.c                    | 28 ++++++++++++++++++++++--
 src/templating/mustach-wrap.h                    |  3 ++-
 src/templating/mustach.c                         | 18 ++++++++++-----
 src/templating/mustach.h                         |  8 ++++++-
 src/templating/test-specs/test-specs-cjson.ref   |  2 +-
 src/templating/test-specs/test-specs-jansson.ref |  2 +-
 src/templating/test-specs/test-specs-json-c.ref  |  2 +-
 13 files changed, 78 insertions(+), 23 deletions(-)

diff --git a/src/templating/AUTHORS b/src/templating/AUTHORS
index b2042848..fbe9e100 100644
--- a/src/templating/AUTHORS
+++ b/src/templating/AUTHORS
@@ -27,6 +27,7 @@ Packagers:
 Thanks to issue submitters:
  Dante Torres
  @fabbe
+ Felix von Leitner
  Johann Oskarsson
  Mark Bucciarelli
  Nigel Hathaway
diff --git a/src/templating/CHANGELOG.md b/src/templating/CHANGELOG.md
index 6024189e..003652eb 100644
--- a/src/templating/CHANGELOG.md
+++ b/src/templating/CHANGELOG.md
@@ -1,10 +1,19 @@
-next
-----
+1.2.7 (2024-03-21)
+------------------
+
+New:
+ - fallback to default when mustach_wrap_get_partial
+   returns MUSTACH_ERROR_PARTIAL_NOT_FOUND
+ - remove at compile time the load of files for templates
+   if MUSTACH_LOAD_TEMPLATE is defined as 0
+ - add compile time flag MUSTACH_SAFE for enforcing
+   safety behaviours
 
 Fix:
  - selection of subitem by index (#47)
  - get latest iterated key when getting key name (#52)
  - allow tests without valgrind
+ - avoid recursive template expansion (#55)
 
 1.2.6 (2024-01-08)
 ------------------
@@ -20,6 +29,7 @@ Minor:
 
 1.2.5 (2023-02-18)
 ------------------
+
 Fix:
  - Don't override CFLAGS in Makefile
  - Use of $(INSTALL) in Makefile for setting options
@@ -29,6 +39,7 @@ Minor:
 
 1.2.4 (2023-01-02)
 ------------------
+
 Fix:
  - Latent SIGSEGV using cJSON
 
diff --git a/src/templating/Makefile.am b/src/templating/Makefile.am
index f7432298..c55f2964 100644
--- a/src/templating/Makefile.am
+++ b/src/templating/Makefile.am
@@ -16,7 +16,9 @@ taler_mustach_tool_LDADD = \
   libmustach.la \
   -ljansson
 taler_mustach_tool_CFLAGS = \
-  -DTOOL=MUSTACH_TOOL_JANSSON
+  -DTOOL=MUSTACH_TOOL_JANSSON \
+  -DMUSTACH_SAFE=1 \
+  -DMUSTACH_LOAD_TEMPLATE=0
 
 lib_LTLIBRARIES = \
   libtalertemplating.la
@@ -40,7 +42,9 @@ libtalertemplating_la_LIBADD = \
 libtalertemplating_la_LDFLAGS = \
   -version-info 0:0:0 \
   -no-undefined
-
+libtalertemplating_la_CFLAGS = \
+  -DMUSTACH_SAFE=1 \
+  -DMUSTACH_LOAD_TEMPLATE=0
 
 libmustach_la_SOURCES = \
   mustach.c mustach.h \
diff --git a/src/templating/README.md b/src/templating/README.md
index 324c9a86..6e7a6c95 100644
--- a/src/templating/README.md
+++ b/src/templating/README.md
@@ -5,7 +5,7 @@ template specification.
 
 The main site for `mustach` is on [gitlab](https://gitlab.com/jobol/mustach).
 
-The simpliest way to use mustach is to copy the files **mustach.h** and 
**mustach.c**
+The simplest way to use mustach is to copy the files **mustach.h** and 
**mustach.c**
 directly into your project and use it.
 
 If you are using one of the JSON libraries listed below, you can get extended 
feature
@@ -85,7 +85,7 @@ It then outputs the result of applying the templates files to 
the JSON file.
 ### Portability
 
 Some system does not provide *open_memstream*. In that case, tell your
-prefered compiler to declare the preprocessor symbol **NO_OPEN_MEMSTREAM**.
+preferred compiler to declare the preprocessor symbol **NO_OPEN_MEMSTREAM**.
 Example:
 
        CFLAGS=-DNO_OPEN_MEMSTREAM make
@@ -170,7 +170,7 @@ Here is the summary.
 
      Flag name                     | Description
     
-------------------------------+------------------------------------------------
-     Mustach_With_Colon            | Explicit tag substition with colon
+     Mustach_With_Colon            | Explicit tag substitution with colon
      Mustach_With_EmptyTag         | Empty Tag Allowed
     
-------------------------------+------------------------------------------------
      Mustach_With_Equal            | Value Testing Equality
@@ -187,7 +187,7 @@ For the details, see below.
 
 ### Explicit Tag Substitution With Colon (Mustach_With_Colon)
 
-In somecases the name of the key used for substition begins with a
+In somecases the name of the key used for substitution begins with a
 character reserved for mustach: one of `#`, `^`, `/`, `&`, `{`, `>` and `=`.
 
 This extension introduces the special character `:` to explicitly
@@ -318,4 +318,3 @@ The table below summarize the changes.
      fdmustach_json_c | mustach_json_c_fd
      mustach_json_c   | mustach_json_c_mem
      mustach_json_c   | mustach_json_c_write
-
diff --git a/src/templating/mustach-original-Makefile 
b/src/templating/mustach-original-Makefile
index 6d90f33d..c1ddbe63 100644
--- a/src/templating/mustach-original-Makefile
+++ b/src/templating/mustach-original-Makefile
@@ -1,7 +1,7 @@
 # version
 MAJOR := 1
 MINOR := 2
-REVIS := 6
+REVIS := 7
 
 # installation settings
 DESTDIR ?=
diff --git a/src/templating/mustach-tool.c b/src/templating/mustach-tool.c
index e2a5c1f4..5f28c1f5 100644
--- a/src/templating/mustach-tool.c
+++ b/src/templating/mustach-tool.c
@@ -35,7 +35,8 @@ static const char *errors[] = {
        "invalid interface",
        "item not found",
        "partial not found",
-       "undefined tag"
+       "undefined tag",
+       "too much template nesting"
 };
 
 static const char *errmsg = 0;
diff --git a/src/templating/mustach-wrap.c b/src/templating/mustach-wrap.c
index 869713c8..2cd00db1 100644
--- a/src/templating/mustach-wrap.c
+++ b/src/templating/mustach-wrap.c
@@ -20,6 +20,18 @@
 #include "mustach.h"
 #include "mustach-wrap.h"
 
+/*
+* It was stated that allowing to include files
+* through template is not safe when the mustache
+* template is open to any value because it could
+* create leaks (example: {{>/etc/passwd}}).
+*/
+#if MUSTACH_SAFE
+# undef MUSTACH_LOAD_TEMPLATE
+#elif !defined(MUSTACH_LOAD_TEMPLATE)
+# define MUSTACH_LOAD_TEMPLATE 1
+#endif
+
 #if !defined(INCLUDE_PARTIAL_EXTENSION)
 # define INCLUDE_PARTIAL_EXTENSION ".mustache"
 #endif
@@ -325,6 +337,7 @@ static int get_callback(void *closure, const char *name, 
struct mustach_sbuf *sb
        return MUSTACH_OK;
 }
 
+#if MUSTACH_LOAD_TEMPLATE
 static int get_partial_from_file(const char *name, struct mustach_sbuf *sbuf)
 {
        static char extension[] = INCLUDE_PARTIAL_EXTENSION;
@@ -375,14 +388,22 @@ static int get_partial_from_file(const char *name, struct 
mustach_sbuf *sbuf)
        fclose(file);
        return MUSTACH_ERROR_SYSTEM;
 }
+#endif
 
 static int partial_callback(void *closure, const char *name, struct 
mustach_sbuf *sbuf)
 {
        struct wrap *w = closure;
        int rc;
-       if (mustach_wrap_get_partial != NULL)
+       if (mustach_wrap_get_partial != NULL) {
                rc = mustach_wrap_get_partial(name, sbuf);
-       else if (w->flags & Mustach_With_PartialDataFirst) {
+               if (rc != MUSTACH_ERROR_PARTIAL_NOT_FOUND) {
+                       if (rc != MUSTACH_OK)
+                               sbuf->value = "";
+                       return rc;
+               }
+       }
+#if MUSTACH_LOAD_TEMPLATE
+       if (w->flags & Mustach_With_PartialDataFirst) {
                if (getoptional(w, name, sbuf) > 0)
                        rc = MUSTACH_OK;
                else
@@ -393,6 +414,9 @@ static int partial_callback(void *closure, const char 
*name, struct mustach_sbuf
                if (rc != MUSTACH_OK &&  getoptional(w, name, sbuf) > 0)
                        rc = MUSTACH_OK;
        }
+#else
+       rc = getoptional(w, name, sbuf) > 0 ?  MUSTACH_OK : 
MUSTACH_ERROR_PARTIAL_NOT_FOUND;
+#endif
        if (rc != MUSTACH_OK)
                sbuf->value = "";
        return MUSTACH_OK;
diff --git a/src/templating/mustach-wrap.h b/src/templating/mustach-wrap.h
index 37e6ff6c..fedcb919 100644
--- a/src/templating/mustach-wrap.h
+++ b/src/templating/mustach-wrap.h
@@ -146,7 +146,8 @@ extern const struct mustach_itf mustach_wrap_itf;
  * function replaces the default behaviour and is called to provide the partial
  * of the given 'name' in 'sbuf'.
  * The function must return MUSTACH_OK when it filled 'sbuf' with value of 
partial
- * or must return an error code if it failed.
+ * or must return an error code if it failed. But if 
MUSTACH_ERROR_PARTIAL_NOT_FOUND
+ * is returned, the default behavior is evaluated.
  */
 extern int (*mustach_wrap_get_partial)(const char *name, struct mustach_sbuf 
*sbuf);
 
diff --git a/src/templating/mustach.c b/src/templating/mustach.c
index 9f992c73..1bf482bc 100644
--- a/src/templating/mustach.c
+++ b/src/templating/mustach.c
@@ -33,6 +33,7 @@ struct iwrap {
        int (*partial)(void *closure, const char *name, struct mustach_sbuf 
*sbuf);
        void *closure_partial; /* closure for partial */
        int flags;
+       int nesting;
 };
 
 struct prefix {
@@ -430,11 +431,17 @@ get_name:
                case '>':
                        /* partials */
                        if (enabled) {
-                               sbuf_reset(&sbuf);
-                               rc = iwrap->partial(iwrap->closure_partial, 
name, &sbuf);
-                               if (rc >= 0) {
-                                       rc = process(sbuf.value, 
sbuf_length(&sbuf), iwrap, file, &pref);
-                                       sbuf_release(&sbuf);
+                               if (iwrap->nesting >= MUSTACH_MAX_NESTING)
+                                       rc = MUSTACH_ERROR_TOO_MUCH_NESTING;
+                               else {
+                                       sbuf_reset(&sbuf);
+                                       rc = 
iwrap->partial(iwrap->closure_partial, name, &sbuf);
+                                       if (rc >= 0) {
+                                               iwrap->nesting++;
+                                               rc = process(sbuf.value, 
sbuf_length(&sbuf), iwrap, file, &pref);
+                                               sbuf_release(&sbuf);
+                                               iwrap->nesting--;
+                                       }
                                }
                                if (rc < 0)
                                        return rc;
@@ -486,6 +493,7 @@ int mustach_file(const char *template, size_t length, const 
struct mustach_itf *
        iwrap.leave = itf->leave;
        iwrap.get = itf->get;
        iwrap.flags = flags;
+       iwrap.nesting = 0;
 
        /* process */
        rc = itf->start ? itf->start(closure) : 0;
diff --git a/src/templating/mustach.h b/src/templating/mustach.h
index 8c4a43f1..1b44582d 100644
--- a/src/templating/mustach.h
+++ b/src/templating/mustach.h
@@ -19,10 +19,15 @@ struct mustach_sbuf; /* see below */
 #define MUSTACH_VERSION_MINOR (MUSTACH_VERSION % 100)
 
 /**
- * Maximum nested imbrications supported
+ * Maximum nested section supported
  */
 #define MUSTACH_MAX_DEPTH  256
 
+/**
+ * Maximum nested template supported
+ */
+#define MUSTACH_MAX_NESTING  64
+
 /**
  * Maximum length of tags in mustaches {{...}}
  */
@@ -57,6 +62,7 @@ struct mustach_sbuf; /* see below */
 #define MUSTACH_ERROR_ITEM_NOT_FOUND    -10
 #define MUSTACH_ERROR_PARTIAL_NOT_FOUND -11
 #define MUSTACH_ERROR_UNDEFINED_TAG     -12
+#define MUSTACH_ERROR_TOO_MUCH_NESTING  -13
 
 /*
  * You can use definition below for user specific error
diff --git a/src/templating/test-specs/test-specs-cjson.ref 
b/src/templating/test-specs/test-specs-cjson.ref
index 8897c66c..41e1c8de 100644
--- a/src/templating/test-specs/test-specs-cjson.ref
+++ b/src/templating/test-specs/test-specs-cjson.ref
@@ -52,7 +52,7 @@ processing file test-specs/spec/specs/delimiters.json
 [3] Inverted Sections
        Delimiters set outside inverted sections should persist.
        => SUCCESS
-[4] Partial Inheritence
+[4] Partial Inheritance
        Delimiters set in a parent template should not affect a partial.
        => SUCCESS
 [5] Post-Partial Behavior
diff --git a/src/templating/test-specs/test-specs-jansson.ref 
b/src/templating/test-specs/test-specs-jansson.ref
index a1cef19c..2e1e9185 100644
--- a/src/templating/test-specs/test-specs-jansson.ref
+++ b/src/templating/test-specs/test-specs-jansson.ref
@@ -52,7 +52,7 @@ processing file test-specs/spec/specs/delimiters.json
 [3] Inverted Sections
        Delimiters set outside inverted sections should persist.
        => SUCCESS
-[4] Partial Inheritence
+[4] Partial Inheritance
        Delimiters set in a parent template should not affect a partial.
        => SUCCESS
 [5] Post-Partial Behavior
diff --git a/src/templating/test-specs/test-specs-json-c.ref 
b/src/templating/test-specs/test-specs-json-c.ref
index 8897c66c..41e1c8de 100644
--- a/src/templating/test-specs/test-specs-json-c.ref
+++ b/src/templating/test-specs/test-specs-json-c.ref
@@ -52,7 +52,7 @@ processing file test-specs/spec/specs/delimiters.json
 [3] Inverted Sections
        Delimiters set outside inverted sections should persist.
        => SUCCESS
-[4] Partial Inheritence
+[4] Partial Inheritance
        Delimiters set in a parent template should not affect a partial.
        => SUCCESS
 [5] Post-Partial Behavior

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]