Do not tolerate invalid status arguments 29/58729/1
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 5 Jun 2017 16:50:10 +0000 (18:50 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 12 Jun 2017 11:24:58 +0000 (13:24 +0200)
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>
(cherry picked from commit d25e1c05a0af0930ad1fa469d2edbd30b24a43dc)

yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/StatusStatementImpl.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