return CYCastDouble(value, strlen(value));
 }
 
-extern "C" void CydgetMemoryParse(const uint16_t **data, size_t *size) {
+extern "C" bool CydgetMemoryParse(const uint16_t **data, size_t *size) {
     CYLocalPool local;
 
     CYUTF8String utf8(CYPoolUTF8String(local, CYUTF16String(*data, *size)));
     CYDriver driver(stream);
 
     cy::parser parser(driver);
-    if (parser.parse() != 0 || !driver.errors_.empty())
-        return;
+    if (parser.parse() != 0 || !driver.errors_.empty()) {
+        *data = NULL;
+        *size = 0;
+        return false;
+    }
 
     CYOptions options;
     CYContext context(options);
 
     *data = copy;
     *size = utf16.size;
+    return true;
 }
 
 CYPool &CYGetGlobalPool() {