From bf46cb084b6c4b2a0d5ccc8f849db6603938633d Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Mon, 5 Jun 2017 18:55:50 +0200 Subject: [PATCH] Be strict about boolean arguments RFC6020 and RFC7950 mandate the argument to be either 'true' or 'false', which is different from Boolean.valueOf(String), which accepts any string. Fix this by providing our own parse method. Change-Id: I87d39d5a9238f79cb34c66efa08ed67c2a02eb82 Signed-off-by: Robert Varga --- .../parser/stmt/rfc6020/ConfigStatementImpl.java | 2 +- .../parser/stmt/rfc6020/MandatoryStatementImpl.java | 2 +- .../stmt/rfc6020/RequireInstanceStatementImpl.java | 2 +- .../yangtools/yang/parser/stmt/rfc6020/Utils.java | 13 +++++++++++++ .../stmt/rfc6020/YinElementStatementImpl.java | 4 ++-- 5 files changed, 18 insertions(+), 5 deletions(-) diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ConfigStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ConfigStatementImpl.java index bf898379bb..af404a26a4 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ConfigStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ConfigStatementImpl.java @@ -34,7 +34,7 @@ public class ConfigStatementImpl extends AbstractDeclaredStatement impl @Override public Boolean parseArgumentValue(final StmtContext ctx, final String value) { - return Boolean.valueOf(value); + return Utils.parseBoolean(ctx, value); } @Override diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/MandatoryStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/MandatoryStatementImpl.java index 5096e904f5..6155c18575 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/MandatoryStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/MandatoryStatementImpl.java @@ -35,7 +35,7 @@ public class MandatoryStatementImpl extends AbstractDeclaredStatement i @Override public Boolean parseArgumentValue(final StmtContext ctx, final String value) { - return Boolean.valueOf(value); + return Utils.parseBoolean(ctx, value); } @Override diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RequireInstanceStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RequireInstanceStatementImpl.java index 49cd93fe87..47ab493ece 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RequireInstanceStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RequireInstanceStatementImpl.java @@ -34,7 +34,7 @@ public class RequireInstanceStatementImpl extends @Override public Boolean parseArgumentValue(final StmtContext ctx, final String value) { - return Boolean.valueOf(value); + return Utils.parseBoolean(ctx, value); } @Override diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/Utils.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/Utils.java index bce189b6df..677b9b3456 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/Utils.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/Utils.java @@ -22,6 +22,7 @@ import java.util.List; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; +import javax.annotation.Nonnull; import javax.annotation.Nullable; import javax.annotation.RegEx; import javax.xml.xpath.XPath; @@ -272,6 +273,18 @@ public final class Utils { return (StatementContextBase) rootStmtCtx.getFromNamespace(SchemaNodeIdentifierBuildNamespace.class, node); } + static @Nonnull Boolean parseBoolean(final StmtContext ctx, final String input) { + if ("true".equals(input)) { + return Boolean.TRUE; + } else if ("false".equals(input)) { + return Boolean.FALSE; + } else { + throw new SourceException(ctx.getStatementSourceReference(), + "Invalid '%s' statement %s '%s', it can be either 'true' or 'false'", + ctx.getPublicDefinition().getStatementName(), ctx.getPublicDefinition().getArgumentName(), input); + } + } + static String internBoolean(final String input) { if ("true".equals(input)) { return "true"; diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/YinElementStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/YinElementStatementImpl.java index 2d309291c1..64cdc2da4b 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/YinElementStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/YinElementStatementImpl.java @@ -34,7 +34,7 @@ public class YinElementStatementImpl extends AbstractDeclaredStatement @Override public Boolean parseArgumentValue(final StmtContext ctx, final String value) { - return Boolean.valueOf(value); + return Utils.parseBoolean(ctx, value); } @Override @@ -61,6 +61,6 @@ public class YinElementStatementImpl extends AbstractDeclaredStatement @Override public boolean getValue() { - return argument(); + return argument().booleanValue(); } } -- 2.36.6