diff --git a/examples/rsa-decrypt.c b/examples/rsa-decrypt.c
index 8dfd38f9594b1649fc979befebc1e274f3f46b12..52b8b4c7b5b51fbadccb339cc89d1a10cacd3ad9 100644
--- a/examples/rsa-decrypt.c
+++ b/examples/rsa-decrypt.c
@@ -86,11 +86,16 @@ read_bignum(FILE *f, mpz_t x)
   if (read_uint32(f, &size)
       && size < 1000)
     {
-      uint8_t *p = alloca(size);
+      uint8_t *p = xalloc(size);
       if (fread(p, 1, size, f) != size)
-	return 0;
+	{
+	  free(p);
+	  return 0;
+	}
 
       nettle_mpz_set_str_256_u(x, size, p);
+      free(p);
+
       return 1;
     }
   return 0;
diff --git a/examples/rsa-encrypt.c b/examples/rsa-encrypt.c
index 919a756336d7a585314e15677d18b7f9cbdc13b8..cb0e82095349f5d8c333e685285632e0d92adb6e 100644
--- a/examples/rsa-encrypt.c
+++ b/examples/rsa-encrypt.c
@@ -78,14 +78,17 @@ write_bignum(FILE *f, mpz_t x)
 {
   unsigned size = nettle_mpz_sizeinbase_256_u(x);
   uint8_t *p;
+  int res;
   
   if (!write_uint32(f, size))
     return 0;
   
-  p = alloca(size);
+  p = xalloc(size);
   nettle_mpz_get_str_256(size, p, x);
 
-  return write_string(f, size, p);
+  res = write_string(f, size, p);
+  free(p);
+  return res;
 }
 
 static int
diff --git a/examples/rsa-keygen.c b/examples/rsa-keygen.c
index c5022cf39d89b1b416ffcefaa0050b97c71f30c8..675f13f4b5d1b4294deb40e7124076f93f82b565 100644
--- a/examples/rsa-keygen.c
+++ b/examples/rsa-keygen.c
@@ -96,15 +96,8 @@ main(int argc, char **argv)
       return EXIT_FAILURE;
     }
 
-  pub_name = malloc(strlen(priv_name) + 5);  
-
-  if (pub_name)
-    sprintf(pub_name, "%s.pub", priv_name);
-  else
-    {
-      werror("Memory exhausted.\n");
-      return EXIT_FAILURE;
-    }
+  pub_name = xalloc(strlen(priv_name) + 5);  
+  sprintf(pub_name, "%s.pub", priv_name);
 
   /* NOTE: No sources */
   yarrow256_init(&yarrow, 0, NULL);