Address review comments from https://boringssl-review.googlesource.com/#/c/11920/2

In https://boringssl-review.googlesource.com/#/c/11920/2, I addressed a
number of comments but then forgot to upload the change before
submitting it. This change contains the changes that should have been
included in that commit.

Change-Id: Ib70548e791f80abf07a734e071428de8ebedb907
Reviewed-on: https://boringssl-review.googlesource.com/12160
Commit-Queue: Adam Langley <agl@google.com>
Commit-Queue: David Benjamin <davidben@google.com>
Reviewed-by: David Benjamin <davidben@google.com>
CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org>
diff --git a/crypto/x509/x509_test.cc b/crypto/x509/x509_test.cc
index b6ba2e6..c39d98d 100644
--- a/crypto/x509/x509_test.cc
+++ b/crypto/x509/x509_test.cc
@@ -782,7 +782,7 @@
     return false;
   }
 
-  bssl::UniquePtr<X509> root(d2i_X509_from_buffer(buf.get()));
+  bssl::UniquePtr<X509> root(X509_parse_from_buffer(buf.get()));
   if (!root) {
     return false;
   }
@@ -824,7 +824,7 @@
   }
 
   bssl::UniquePtr<X509> root_trailing_data(
-      d2i_X509_from_buffer(buf_trailing_data.get()));
+      X509_parse_from_buffer(buf_trailing_data.get()));
   if (root_trailing_data) {
     fprintf(stderr, "TestFromBuffer: trailing data was not rejected.\n");
     return false;
@@ -846,7 +846,7 @@
     return false;
   }
 
-  bssl::UniquePtr<X509> root(d2i_X509_from_buffer(buf.get()));
+  bssl::UniquePtr<X509> root(X509_parse_from_buffer(buf.get()));
   if (!root) {
     return false;
   }
@@ -857,8 +857,8 @@
 
   if (i2d_X509(root.get(), nullptr) != static_cast<long>(data_len)) {
     fprintf(stderr,
-            "TestFromBuffer: i2d_X509 gives different answer before marking as "
-            "modified.\n");
+            "TestFromBufferModified: i2d_X509 gives different answer before "
+            "marking as modified.\n");
     return false;
   }
 
@@ -866,8 +866,8 @@
 
   if (i2d_X509(root.get(), nullptr) == static_cast<long>(data_len)) {
     fprintf(stderr,
-            "TestFromBuffer: i2d_X509 gives same answer after marking as "
-            "modified.\n");
+            "TestFromBufferModified: i2d_X509 gives same answer after marking "
+            "as modified.\n");
     return false;
   }
 
@@ -887,7 +887,7 @@
     return false;
   }
 
-  bssl::UniquePtr<X509> root(d2i_X509_from_buffer(buf.get()));
+  bssl::UniquePtr<X509> root(X509_parse_from_buffer(buf.get()));
   if (!root) {
     return false;
   }
@@ -903,7 +903,13 @@
   X509 *ret = d2i_X509(&x509p, &inp, data2_len);
   if (ret != root.get()) {
     fprintf(stderr,
-            "TestFromBuffer: d2i_X509 parsed into a different object.\n");
+            "TestFromBufferReused: d2i_X509 parsed into a different object.\n");
+    return false;
+  }
+
+  if (root->buf != nullptr) {
+    fprintf(stderr,
+            "TestFromBufferReused: d2i_X509 didn't clear |buf| pointer.\n");
     return false;
   }
 
@@ -911,19 +917,18 @@
   // following will trigger a use-after-free.
   data2.reset();
 
-  const long i2d_len = i2d_X509(root.get(), nullptr);
+  uint8_t *i2d = nullptr;
+  int i2d_len = i2d_X509(root.get(), &i2d);
   if (i2d_len < 0) {
     return false;
   }
-  std::unique_ptr<uint8_t[]> i2d(new uint8_t[i2d_len]);
-  uint8_t *outp = i2d.get();
-  i2d_X509(root.get(), &outp);
+  bssl::UniquePtr<uint8_t> i2d_storage(i2d);
 
   if (!PEMToDER(&data2, &data2_len, kLeafPEM)) {
     return false;
   }
   if (i2d_len != static_cast<long>(data2_len) ||
-      memcmp(data2.get(), i2d.get(), i2d_len) != 0) {
+      memcmp(data2.get(), i2d, i2d_len) != 0) {
     fprintf(stderr, "TestFromBufferReused: i2d gave wrong result.\n");
     return false;
   }