]> git.saurik.com Git - apple/security.git/blobdiff - OSX/libsecurity_utilities/lib/cfmunge.cpp
Security-57337.50.23.tar.gz
[apple/security.git] / OSX / libsecurity_utilities / lib / cfmunge.cpp
index d2c6a4dc8ac4b4675176549b0d1215c30a789071..b3776ed5356c99362fbb6b9601a29978195602d2 100644 (file)
@@ -289,7 +289,18 @@ CFTypeRef CFMake::makearray()
 {
        ++format;       // next '['
        next('!');      // indicates mutable (currently always)
-       CFMutableArrayRef array = makeCFMutableArray(0);
+       CFMutableArrayRef array = NULL;
+       if (next('+')) { // {+%O, => copy array argument, then proceed
+               if (next('%') && next('O')) {
+                       CFArrayRef source = va_arg(args, CFArrayRef);
+                       array = CFArrayCreateMutableCopy(allocator, 0, source);
+                       if (next('}'))
+                               return array;
+               } else
+                       return NULL;    // bad syntax
+       } else {
+               array = makeCFMutableArray(0);
+       }
        while (next() != ']') {
                CFTypeRef value = make();
                if (value == NULL) {