diff --git a/src/encode.c b/src/encode.c
index 3296f70523e5cb33494be3fd2e1c4d254123e372..b581b83cf54b9778b363bdd65ecacb95ca45cff6 100644
--- a/src/encode.c
+++ b/src/encode.c
@@ -437,7 +437,11 @@ static void decode_value2(struct decode_data *data)
     
     case T_MAPPING:
     {
-      struct mapping *m=allocate_mapping(num);
+      struct mapping *m;
+      if(num<0)
+	error("Failed to decode string. (mapping size is negative)\n");
+
+      m=allocate_mapping(num);
       tmp.type=T_MAPPING;
       tmp.u.mapping=m;
       mapping_insert(data->decoded, & data->counter, &tmp);