Do not tolerate invalid status arguments 69/58269/3
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 5 Jun 2017 16:50:10 +0000 (18:50 +0200)
committerRobert Varga <nite@hq.sk>
Wed, 7 Jun 2017 13:44:29 +0000 (13:44 +0000)
Status must be one of current, deprecated, obsolete. Make sure we
do not leak nulls when the model supplies an illegal string, but
rather flag the offender.

Change-Id: I3301eaf2f753fe74a24dfa30d8e74cbf3a571493
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/StatusStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/Utils.java

index 336abefbf14e9f2da92db274609ed0d21ab5f853..28f13c5221588005e4745b7dce31076eae84be97 100644 (file)
@@ -16,6 +16,7 @@ import org.opendaylight.yangtools.yang.parser.spi.SubstatementValidator;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.StatusEffectiveStatementImpl;
 
 public class StatusStatementImpl extends AbstractDeclaredStatement<Status>
@@ -39,7 +40,17 @@ public class StatusStatementImpl extends AbstractDeclaredStatement<Status>
 
         @Override
         public Status parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-            return Utils.parseStatus(value);
+            switch (value) {
+                case "current":
+                    return Status.CURRENT;
+                case "deprecated":
+                    return Status.DEPRECATED;
+                case "obsolete":
+                    return Status.OBSOLETE;
+                default:
+                    throw new SourceException(ctx.getStatementSourceReference(),
+                        "Invalid status '%s', must be one of 'current', 'deprecated' or 'obsolete'", value);
+            }
         }
 
         @Override
index abcce90d5d7f35460547207e16fa08ca9cab2630..13ec1ef7c19f483d4cd081b46c50167b2d5a2928 100644 (file)
@@ -44,7 +44,6 @@ import org.opendaylight.yangtools.yang.common.YangVersion;
 import org.opendaylight.yangtools.yang.model.api.DeviateKind;
 import org.opendaylight.yangtools.yang.model.api.ModuleIdentifier;
 import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
-import org.opendaylight.yangtools.yang.model.api.Status;
 import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ModuleStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.RevisionStatement;
@@ -414,20 +413,6 @@ public final class Utils {
         }
     }
 
-    public static Status parseStatus(final String value) {
-        switch (value) {
-            case "current":
-                return Status.CURRENT;
-            case "deprecated":
-                return Status.DEPRECATED;
-            case "obsolete":
-                return Status.OBSOLETE;
-            default:
-                LOG.warn("Invalid 'status' statement: {}", value);
-                return null;
-        }
-    }
-
     public static Date getLatestRevision(final Iterable<? extends StmtContext<?, ?, ?>> subStmts) {
         Date revision = null;
         for (final StmtContext<?, ?, ?> subStmt : subStmts) {