Fix crash on signature handling

Since we only call NSS_Init once, we should only call NSS_Shutdown once.

Do it via atexit

Fixes issue #766
diff --git a/poppler/SignatureHandler.cc b/poppler/SignatureHandler.cc
index c825840..0afc159 100644
--- a/poppler/SignatureHandler.cc
+++ b/poppler/SignatureHandler.cc
@@ -26,6 +26,13 @@
 #include <dirent.h>
 #include <Error.h>
 
+static void shutdownNss()
+{
+  if (NSS_Shutdown() != SECSuccess) {
+    fprintf(stderr, "NSS_Shutdown failed: %s\n", PR_ErrorToString(PORT_GetError(), PR_LANGUAGE_I_DEFAULT));
+  }
+}
+
 unsigned int SignatureHandler::digestLength(SECOidTag digestAlgId)
 {
   switch(digestAlgId){
@@ -232,6 +239,8 @@
 
   setNssDirCalled = true;
 
+  atexit(shutdownNss);
+
   bool initSuccess = false;
   if (nssDir.getLength() > 0) {
     initSuccess = (NSS_Init(nssDir.c_str()) == SECSuccess);
@@ -305,9 +314,6 @@
     HASH_Destroy(hash_context);
 
   free(temp_certs);
-
-  if (NSS_Shutdown()!=SECSuccess)
-    fprintf(stderr, "Detail: %s\n", PR_ErrorToString(PORT_GetError(), PR_LANGUAGE_I_DEFAULT));
 }
 
 NSSCMSMessage *SignatureHandler::CMS_MessageCreate(SECItem * cms_item)