diff --git a/programs/test/selftest.c b/programs/test/selftest.c
index 3adf2e5..be97a58 100644
--- a/programs/test/selftest.c
+++ b/programs/test/selftest.c
@@ -77,23 +77,49 @@
     void *empty2 = mbedtls_calloc(0, 1);
     void *buffer1 = mbedtls_calloc(1, 1);
     void *buffer2 = mbedtls_calloc(1, 1);
+    unsigned int buf_size = 256;
+    unsigned char *buffer3 = mbedtls_calloc(buf_size, sizeof(unsigned char));
 
     if (empty1 == NULL && empty2 == NULL) {
         if (verbose) {
-            mbedtls_printf("  CALLOC(0): passed (NULL)\n");
+            mbedtls_printf("  CALLOC(0,1): passed (NULL)\n");
         }
     } else if (empty1 == NULL || empty2 == NULL) {
         if (verbose) {
-            mbedtls_printf("  CALLOC(0): failed (mix of NULL and non-NULL)\n");
+            mbedtls_printf("  CALLOC(0,1): failed (mix of NULL and non-NULL)\n");
         }
         ++failures;
     } else if (empty1 == empty2) {
         if (verbose) {
-            mbedtls_printf("  CALLOC(0): passed (same non-null)\n");
+            mbedtls_printf("  CALLOC(0,1): passed (same non-null)\n");
         }
     } else {
         if (verbose) {
-            mbedtls_printf("  CALLOC(0): passed (distinct non-null)\n");
+            mbedtls_printf("  CALLOC(0,1): passed (distinct non-null)\n");
+        }
+    }
+
+    mbedtls_free(empty1);
+    mbedtls_free(empty2);
+
+    empty1 = mbedtls_calloc(1, 0);
+    empty2 = mbedtls_calloc(1, 0);
+    if (empty1 == NULL && empty2 == NULL) {
+        if (verbose) {
+            mbedtls_printf("  CALLOC(1,0): passed (NULL)\n");
+        }
+    } else if (empty1 == NULL || empty2 == NULL) {
+        if (verbose) {
+            mbedtls_printf("  CALLOC(1,0): failed (mix of NULL and non-NULL)\n");
+        }
+        ++failures;
+    } else if (empty1 == empty2) {
+        if (verbose) {
+            mbedtls_printf("  CALLOC(1,0): passed (same non-null)\n");
+        }
+    } else {
+        if (verbose) {
+            mbedtls_printf("  CALLOC(1,0): passed (distinct non-null)\n");
         }
     }
 
@@ -126,6 +152,16 @@
         }
     }
 
+    for (unsigned int i = 0; i < buf_size; i++) {
+        if (buffer3[i] != 0) {
+            ++failures;
+            if (verbose) {
+                mbedtls_printf("  CALLOC(%u): failed (memory not initialized to 0)\n", buf_size);
+            }
+            break;
+        }
+    }
+
     if (verbose) {
         mbedtls_printf("\n");
     }
@@ -133,6 +169,7 @@
     mbedtls_free(empty2);
     mbedtls_free(buffer1);
     mbedtls_free(buffer2);
+    mbedtls_free(buffer3);
     return failures;
 }
 #endif /* MBEDTLS_SELF_TEST */
@@ -167,23 +204,6 @@
            test_snprintf(5, "123",         3) != 0;
 }
 
-static int run_test_mbedtls_calloc(void)
-{
-    unsigned int buf_size = 256;
-    unsigned char *buf;
-    int ret = -1;
-    buf = mbedtls_calloc(buf_size, sizeof(unsigned char));
-    for (unsigned int i = 0; i < buf_size; i++) {
-        if (buf[i] != 0) {
-            ret = -1;
-            goto exit;
-        }
-    }
-    ret = 0;
-exit:
-    mbedtls_free(buf);
-    return ret;
-}
 /*
  * Check if a seed file is present, and if not create one for the entropy
  * self-test. If this fails, we attempt the test anyway, so no error is passed
@@ -393,12 +413,6 @@
         mbedtls_exit(MBEDTLS_EXIT_FAILURE);
     }
 
-    /* Make sure that mbedtls_calloc zeroizes the buffer */
-    if (run_test_mbedtls_calloc() != 0) {
-        mbedtls_printf("the calloc implementation does not zeroize the buffer\n");
-        mbedtls_exit(MBEDTLS_EXIT_FAILURE);
-    }
-
     for (argp = argv + (argc >= 1 ? 1 : argc); *argp != NULL; ++argp) {
         if (strcmp(*argp, "--quiet") == 0 ||
             strcmp(*argp, "-q") == 0) {
