[nft PATCH] json: Work around segfault when encountering xt stmt

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

 



When trying to convert an xt stmt into JSON, print() callback was
called. Though the code in src/xt.c does not respect output_fp,
therefore buffer wasn't filled as expected making libjansson to puke:

| # nft -j list ruleset
| warning: stmt ops xt have no json callback
| nft: json.c:169: stmt_print_json: Assertion `__out' failed.
| Aborted (core dumped)

Avoid this by detecting xt stmt ops and returning a stub.

Signed-off-by: Phil Sutter <phil@xxxxxx>
---
 doc/libnftables-json.adoc | 7 +++++++
 src/json.c                | 5 +++++
 2 files changed, 12 insertions(+)

diff --git a/doc/libnftables-json.adoc b/doc/libnftables-json.adoc
index ea5fbe818302f..414702c7b88a4 100644
--- a/doc/libnftables-json.adoc
+++ b/doc/libnftables-json.adoc
@@ -998,6 +998,13 @@ Assign connection tracking timeout policy.
 *ct timeout*::
 	CT timeout reference.
 
+=== XT
+[verse]
+*{ "xt": null }*
+
+This represents an xt statement from xtables compat interface. Sadly, at this
+point it is not possible to provide any further information about its content.
+
 == EXPRESSIONS
 Expressions are the building blocks of (most) statements. In their most basic
 form, they are just immediate values represented as JSON string, integer or
diff --git a/src/json.c b/src/json.c
index 431d38afc24ba..64735ebce4902 100644
--- a/src/json.c
+++ b/src/json.c
@@ -166,6 +166,11 @@ static json_t *stmt_print_json(const struct stmt *stmt, struct output_ctx *octx)
 	char buf[1024];
 	FILE *fp;
 
+	/* XXX: Can't be supported at this point:
+	 * xt_stmt_xlate() ignores output_fp. */
+	if (stmt->ops->type == STMT_XT)
+		return json_pack("{s:n}", "xt");
+
 	if (stmt->ops->json)
 		return stmt->ops->json(stmt, octx);
 
-- 
2.19.0




[Index of Archives]     [Netfitler Users]     [LARTC]     [Bugtraq]     [Yosemite Forum]

  Powered by Linux