]> git.saurik.com Git - ldid.git/blobdiff - ldid.cpp
PKCS12_parse returns NULL instead of empty stacks.
[ldid.git] / ldid.cpp
index 5f4c473595adc94da7bd2d9dc154e3d0c4d09951..4ad9b2f06827744da417996aacc2878db85c3560 100644 (file)
--- a/ldid.cpp
+++ b/ldid.cpp
 #define _assert__(line) \
     _assert___(line)
 
+#ifndef $
+#define $(value) value
+#endif
+
 #ifdef __EXCEPTIONS
 #define _assert_(expr, format, ...) \
     do if (!(expr)) { \
-        fprintf(stderr, "%s(%u): _assert(): " format "\n", __FILE__, __LINE__, ## __VA_ARGS__); \
-        throw __FILE__ "(" _assert__(__LINE__) "): _assert(" #expr ")"; \
+        fprintf(stderr, $("%s(%u): _assert(): " format "\n"), __FILE__, __LINE__, ## __VA_ARGS__); \
+        throw $(__FILE__ "(" _assert__(__LINE__) "): _assert(" #expr ")"); \
     } while (false)
 #else
 // XXX: this is not acceptable
 #define _assert_(expr, format, ...) \
     do if (!(expr)) { \
-        fprintf(stderr, "%s(%u): _assert(): " format "\n", __FILE__, __LINE__, ## __VA_ARGS__); \
+        fprintf(stderr, $("%s(%u): _assert(): " format "\n"), __FILE__, __LINE__, ## __VA_ARGS__); \
         exit(-1); \
     } while (false)
 #endif
 
 #define _assert(expr) \
-    _assert_(expr, "%s", #expr)
+    _assert_(expr, "%s", $(#expr))
 
 #define _syscall(expr, ...) [&] { for (;;) { \
     auto _value(expr); \
 } }()
 
 #define _trace() \
-    fprintf(stderr, "_trace(%s:%u): %s\n", __FILE__, __LINE__, __FUNCTION__)
+    fprintf(stderr, $("_trace(%s:%u): %s\n"), __FILE__, __LINE__, $(__FUNCTION__))
 
 #define _not(type) \
     ((type) ~ (type) 0)
@@ -1450,8 +1454,13 @@ class Stuff {
     {
         _assert(value_ != NULL);
         _assert(PKCS12_parse(value_, "", &key_, &cert_, &ca_) != 0);
+
         _assert(key_ != NULL);
         _assert(cert_ != NULL);
+
+        if (ca_ == NULL)
+            ca_ = sk_X509_new_null();
+        _assert(ca_ != NULL);
     }
 
     Stuff(const std::string &data) :