actually store length in CZString
diff --git a/include/json/value.h b/include/json/value.h
index 439f05d..51bcdbb 100644
--- a/include/json/value.h
+++ b/include/json/value.h
@@ -164,7 +164,7 @@
       duplicateOnCopy
     };
     CZString(ArrayIndex index);
-    CZString(const char* cstr, DuplicationPolicy allocate);
+    CZString(char const* cstr, unsigned length, DuplicationPolicy allocate);
     CZString(const CZString& other);
     ~CZString();
     CZString& operator=(CZString other);
diff --git a/src/lib_json/json_value.cpp b/src/lib_json/json_value.cpp
index 05f2c87..f88ea60 100644
--- a/src/lib_json/json_value.cpp
+++ b/src/lib_json/json_value.cpp
@@ -163,9 +163,9 @@
 
 Value::CZString::CZString(ArrayIndex index) : cstr_(0), index_(index) {}
 
-Value::CZString::CZString(const char* cstr, DuplicationPolicy allocate)
-    : cstr_(allocate == duplicate ? duplicateStringValue(cstr) : cstr),
-      storage_({allocate, 0})
+Value::CZString::CZString(char const* str, unsigned length, DuplicationPolicy allocate)
+    : cstr_(allocate == duplicate ? duplicateStringValue(str) : str),
+      storage_({allocate, length})
 {}
 
 Value::CZString::CZString(const CZString& other)
@@ -175,7 +175,7 @@
       storage_({(other.cstr_
                  ? (other.storage_.policy_ == noDuplication
                      ? noDuplication : duplicate)
-                 : other.storage_.policy_), 0})
+                 : other.storage_.policy_), other.storage_.length_})
 {}
 
 Value::CZString::~CZString() {
@@ -849,7 +849,7 @@
   if (type_ == nullValue)
     *this = Value(objectValue);
   CZString actualKey(
-      key, isStatic ? CZString::noDuplication : CZString::duplicateOnCopy);
+      key, strlen(key), isStatic ? CZString::noDuplication : CZString::duplicateOnCopy);
   ObjectValues::iterator it = value_.map_->lower_bound(actualKey);
   if (it != value_.map_->end() && (*it).first == actualKey)
     return (*it).second;
@@ -873,7 +873,7 @@
       "in Json::Value::operator[](char const*)const: requires objectValue");
   if (type_ == nullValue)
     return null;
-  CZString actualKey(key, CZString::noDuplication);
+  CZString actualKey(key, strlen(key), CZString::noDuplication);
   ObjectValues::const_iterator it = value_.map_->find(actualKey);
   if (it == value_.map_->end())
     return null;
@@ -918,7 +918,7 @@
   if (type_ != objectValue) {
     return false;
   }
-  CZString actualKey(key, CZString::noDuplication);
+  CZString actualKey(key, strlen(key), CZString::noDuplication);
   ObjectValues::iterator it = value_.map_->find(actualKey);
   if (it == value_.map_->end())
     return false;