Index: /trunk/src/VBox/Runtime/common/misc/http.cpp
===================================================================
--- /trunk/src/VBox/Runtime/common/misc/http.cpp	(revision 45342)
+++ /trunk/src/VBox/Runtime/common/misc/http.cpp	(revision 45343)
@@ -92,5 +92,5 @@
         return VERR_INTERNAL_ERROR;
 
-    CURL* pCurl = curl_easy_init();
+    CURL *pCurl = curl_easy_init();
     if (!pCurl)
         return VERR_INTERNAL_ERROR;
@@ -119,5 +119,5 @@
 
     curl_easy_cleanup(pHttpInt->pCurl);
-        
+
     if (pHttpInt->pHeaders)
         curl_slist_free_all(pHttpInt->pHeaders);
@@ -188,5 +188,5 @@
     }
 
-    struct curl_slist* pHeaders = NULL;
+    struct curl_slist *pHeaders = NULL;
     for (unsigned i = 0; i < cHeaders; i++)
         pHeaders = curl_slist_append(pHeaders, pcszHeaders[i]);
@@ -204,42 +204,60 @@
                                uint8_t **pabSha512, size_t *pcbSha512)
 {
+    int rc = VINF_SUCCESS;
+
     BIO *cert = BIO_new_mem_buf(pcszCert, (int)cbCert);
-    if (!cert)
-        return VERR_INTERNAL_ERROR;
-
-    X509 *crt = NULL;
-    if (!PEM_read_bio_X509(cert, &crt, NULL, NULL))
-        return VERR_INTERNAL_ERROR;
-
-    unsigned cb;
-    unsigned char md[EVP_MAX_MD_SIZE];
-
-    const EVP_MD *digest = EVP_sha1();
-    int rc = X509_digest(crt, digest, md, &cb);
-    if (rc <= 0)
-        return VERR_INTERNAL_ERROR;
-    *pabSha1 = (uint8_t*)RTMemAlloc(cb);
-    if (!*pabSha1)
-        return VERR_NO_MEMORY;
-    memcpy(*pabSha1, md, cb);
-    *pcbSha1 = cb;
-
-    digest = EVP_sha512();
-    rc = X509_digest(crt, digest, md, &cb);
-    if (rc <= 0)
-    {
+    if (cert)
+    {
+        X509 *crt = NULL;
+        if (PEM_read_bio_X509(cert, &crt, NULL, NULL))
+        {
+            unsigned cb;
+            unsigned char md[EVP_MAX_MD_SIZE];
+
+            int rc1 = X509_digest(crt, EVP_sha1(), md, &cb);
+            if (rc1 > 0)
+            {
+                *pabSha1 = (uint8_t*)RTMemAlloc(cb);
+                if (*pabSha1)
+                {
+                    memcpy(*pabSha1, md, cb);
+                    *pcbSha1 = cb;
+
+                    rc1 = X509_digest(crt, EVP_sha512(), md, &cb);
+                    if (rc1 > 0)
+                    {
+                        *pabSha512 = (uint8_t*)RTMemAlloc(cb);
+                        if (*pabSha512)
+                        {
+                            memcpy(*pabSha512, md, cb);
+                            *pcbSha512 = cb;
+                        }
+                        else
+                            rc = VERR_NO_MEMORY;
+                    }
+                    else
+                        rc = VERR_INTERNAL_ERROR;
+                }
+                else
+                    rc = VERR_NO_MEMORY;
+            }
+            else
+                rc = VERR_INTERNAL_ERROR;
+            X509_free(crt);
+        }
+        else
+            rc = VERR_INTERNAL_ERROR;
+        BIO_free(cert);
+    }
+    else
+        rc = VERR_INTERNAL_ERROR;
+
+    if (RT_FAILURE(rc))
+    {
+        RTMemFree(*pabSha512);
         RTMemFree(*pabSha1);
-        return VERR_INTERNAL_ERROR;
-    }
-    *pabSha512 = (uint8_t*)RTMemAlloc(cb);
-    if (!*pabSha512)
-    {
-        RTMemFree(*pabSha512);
-        return VERR_NO_MEMORY;
-    }
-    memcpy(*pabSha512, md, cb);
-    *pcbSha512 = cb;
-
-    return VINF_SUCCESS;
+    }
+
+    return rc;
 }
 
@@ -320,5 +338,5 @@
             case CURLE_URL_MALFORMAT:
             case CURLE_COULDNT_RESOLVE_HOST:
-                rc = VERR_HTTP_NOT_FOUND; 
+                rc = VERR_HTTP_NOT_FOUND;
                 break;
             default:
Index: /trunk/src/VBox/Runtime/testcase/tstHttp.cpp
===================================================================
--- /trunk/src/VBox/Runtime/testcase/tstHttp.cpp	(revision 45342)
+++ /trunk/src/VBox/Runtime/testcase/tstHttp.cpp	(revision 45343)
@@ -45,10 +45,12 @@
 
     RTHTTP hHttp;
-    int rc = RTHttpCreate(&hHttp);
     char *pszBuf = NULL;
     PRTSTREAM CAFile = NULL;
 
+    int rc = RTHttpCreate(&hHttp);
+
     // create certificate file
-    rc = RTStrmOpen(CAFILE_NAME, "w+b", &CAFile);
+    if (RT_SUCCESS(rc))
+        rc = RTStrmOpen(CAFILE_NAME, "w+b", &CAFile);
 
     // fetch root CA certificate (new one, often avoided in cert chains by
