]> git.saurik.com Git - cycript.git/commitdiff
Fix quote when stringifying C/Objective-C strings.
authorJay Freeman (saurik) <saurik@saurik.com>
Sun, 20 Dec 2015 10:19:11 +0000 (02:19 -0800)
committerJay Freeman (saurik) <saurik@saurik.com>
Sun, 20 Dec 2015 10:19:11 +0000 (02:19 -0800)
Execute.cpp
Library.cpp
ObjectiveC/Library.mm
cycript.hpp

index 2e02b28f818026ae123e2ceada161cbdae2157e7..1a3a2df9a2fabcdfd917de91c0904eff6a30c8b8 100644 (file)
@@ -1611,7 +1611,7 @@ static JSValueRef CString_callAsFunction_toCYON(JSContextRef context, JSObjectRe
     const char *string(static_cast<const char *>(internal->value_));
     std::ostringstream str;
     str << "&";
-    CYStringify(str, string, strlen(string));
+    CYStringify(str, string, strlen(string), true);
     std::string value(str.str());
     return CYCastJSValue(context, CYJSString(CYUTF8String(value.c_str(), value.size())));
 } CYCatch(NULL) }
index aa85e81cc595da8fa04ebebb1c8b90ce10b760a4..ac9d8b08db673d9ef5b1596d1b27601298aaa371 100644 (file)
@@ -103,15 +103,20 @@ bool CYGetOffset(const char *value, ssize_t &index) {
 }
 /* }}} */
 /* JavaScript *ify {{{ */
-void CYStringify(std::ostringstream &str, const char *data, size_t size) {
-    unsigned quot(0), apos(0);
-    for (const char *value(data), *end(data + size); value != end; ++value)
-        if (*value == '"')
-            ++quot;
-        else if (*value == '\'')
-            ++apos;
-
-    bool single(quot > apos);
+void CYStringify(std::ostringstream &str, const char *data, size_t size, bool c) {
+    bool single;
+    if (c)
+        single = false;
+    else {
+        unsigned quot(0), apos(0);
+        for (const char *value(data), *end(data + size); value != end; ++value)
+            if (*value == '"')
+                ++quot;
+            else if (*value == '\'')
+                ++apos;
+
+        single = quot > apos;
+    }
 
     str << (single ? '\'' : '"');
 
index 1147dccc1a6c3db87f37c7290d40280fe17dbccc..ec806658f9d983d86e61d66ba7e83d65d674dd4b 100644 (file)
@@ -1149,7 +1149,7 @@ NSObject *CYCopyNSObject(CYPool &pool, JSContextRef context, JSValueRef value) {
     if (!objective)
         str << '@';
     CYUTF8String string(CYCastUTF8String(self));
-    CYStringify(str, string.data, string.size);
+    CYStringify(str, string.data, string.size, true);
     std::string value(str.str());
     return CYCastNSString(NULL, CYUTF8String(value.c_str(), value.size()));
 }
index a70cd9496e604ef850ed2dd65e361323b2bbef51..30010f4e447503fae14882b61e9c477827d5690f 100644 (file)
@@ -33,7 +33,7 @@ bool CYRecvAll_(int socket, uint8_t *data, size_t size);
 bool CYSendAll_(int socket, const uint8_t *data, size_t size);
 
 void CYNumerify(std::ostringstream &str, double value);
-void CYStringify(std::ostringstream &str, const char *data, size_t size);
+void CYStringify(std::ostringstream &str, const char *data, size_t size, bool c = false);
 
 double CYCastDouble(const char *value, size_t size);
 double CYCastDouble(const char *value);