Limit string field lengths for network/configuration objects

Change-Id: Ic375854bb697ee21a8fd7b15fccd0b0878212869
diff --git a/core/api/src/main/java/org/onosproject/net/config/basics/PortAnnotationConfig.java b/core/api/src/main/java/org/onosproject/net/config/basics/PortAnnotationConfig.java
index 7c4b3be..a08b057 100644
--- a/core/api/src/main/java/org/onosproject/net/config/basics/PortAnnotationConfig.java
+++ b/core/api/src/main/java/org/onosproject/net/config/basics/PortAnnotationConfig.java
@@ -21,6 +21,7 @@
 import java.util.Map;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.config.BaseConfig;
+import org.onosproject.net.config.InvalidFieldException;
 import org.slf4j.Logger;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
@@ -47,8 +48,24 @@
 
     private final Logger log = getLogger(getClass());
 
+    private static final int KEY_MAX_LENGTH = 1024;
+    private static final int VALUE_MAX_LENGTH = 1024;
+
     @Override
     public boolean isValid() {
+        JsonNode jsonNode = object.path(ENTRIES);
+        if (jsonNode.isObject()) {
+            jsonNode.fields().forEachRemaining(entry -> {
+                if (entry.getKey().length() > KEY_MAX_LENGTH) {
+                    throw new InvalidFieldException(entry.getKey(),
+                            entry.getKey() + " exceeds maximum length " + KEY_MAX_LENGTH);
+                }
+                if (entry.getValue().asText("").length() > VALUE_MAX_LENGTH) {
+                    throw new InvalidFieldException(entry.getKey(),
+                            entry.getKey() + " exceeds maximum length " + VALUE_MAX_LENGTH);
+                }
+            });
+        }
         return hasField(ENTRIES) && object.get(ENTRIES).isObject();
     }