diff --git a/docs/x509.rst b/docs/x509.rst
index 473efc3..099d3f8 100644
--- a/docs/x509.rst
+++ b/docs/x509.rst
@@ -195,12 +195,13 @@
 
     .. doctest::
 
-        >>> assert len(cert.subject) == 3
-        >>> attributes = []
-        >>> for attribute in cert.subject:
-        ...     attributes.append(attribute)
-        >>> len(attributes)
+        >>> len(cert.subject)
         3
+        >>> for attribute in cert.subject:
+        ...     print(attribute)
+        <NameAttribute(oid=<ObjectIdentifier(oid=2.5.4.6, name=countryName)>, value=u'US')>
+        <NameAttribute(oid=<ObjectIdentifier(oid=2.5.4.10, name=organizationName)>, value=u'Test Certificates 2011')>
+        <NameAttribute(oid=<ObjectIdentifier(oid=2.5.4.3, name=commonName)>, value=u'Good CA')>
 
     .. method:: get_attributes_for_oid(oid)
 
diff --git a/src/cryptography/hazmat/backends/openssl/x509.py b/src/cryptography/hazmat/backends/openssl/x509.py
index ebfbf33..76dcf32 100644
--- a/src/cryptography/hazmat/backends/openssl/x509.py
+++ b/src/cryptography/hazmat/backends/openssl/x509.py
@@ -115,6 +115,7 @@
             assert data != self._backend._ffi.NULL
             buf = self._backend._ffi.new("unsigned char **")
             res = self._backend._lib.ASN1_STRING_to_UTF8(buf, data)
+            assert res >= 0
             assert buf[0] != self._backend._ffi.NULL
             buf = self._backend._ffi.gc(
                 buf, lambda buf: self._backend._lib.OPENSSL_free(buf[0])
diff --git a/src/cryptography/x509.py b/src/cryptography/x509.py
index 21693ed..8a888d2 100644
--- a/src/cryptography/x509.py
+++ b/src/cryptography/x509.py
@@ -121,7 +121,7 @@
         return not self == other
 
     def __iter__(self):
-        return iter(self._attributes[:])
+        return iter(self._attributes)
 
     def __len__(self):
         return len(self._attributes)
diff --git a/tests/test_x509.py b/tests/test_x509.py
index 0e95b25..55a9408 100644
--- a/tests/test_x509.py
+++ b/tests/test_x509.py
@@ -68,10 +68,7 @@
         )
         issuer = cert.issuer
         assert isinstance(issuer, x509.Name)
-        attributes = []
-        for attrs in issuer:
-            attributes.append(attrs)
-        assert attributes == [
+        assert list(issuer) == [
             x509.NameAttribute(x509.OID_COUNTRY_NAME, 'US'),
             x509.NameAttribute(
                 x509.OID_ORGANIZATION_NAME, 'Test Certificates 2011'
@@ -94,10 +91,7 @@
         issuer = cert.issuer
 
         assert isinstance(issuer, x509.Name)
-        attributes = []
-        for attrs in issuer:
-            attributes.append(attrs)
-        assert attributes == [
+        assert list(issuer) == [
             x509.NameAttribute(x509.OID_COUNTRY_NAME, 'US'),
             x509.NameAttribute(x509.OID_COUNTRY_NAME, 'CA'),
             x509.NameAttribute(x509.OID_STATE_OR_PROVINCE_NAME, 'Texas'),
@@ -141,10 +135,7 @@
         )
         subject = cert.subject
         assert isinstance(subject, x509.Name)
-        attributes = []
-        for attrs in subject:
-            attributes.append(attrs)
-        assert attributes == [
+        assert list(subject) == [
             x509.NameAttribute(x509.OID_COUNTRY_NAME, 'US'),
             x509.NameAttribute(
                 x509.OID_ORGANIZATION_NAME, 'Test Certificates 2011'
@@ -194,10 +185,7 @@
         )
         subject = cert.subject
         assert isinstance(subject, x509.Name)
-        attributes = []
-        for attrs in subject:
-            attributes.append(attrs)
-        assert attributes == [
+        assert list(subject) == [
             x509.NameAttribute(x509.OID_COUNTRY_NAME, 'AU'),
             x509.NameAttribute(x509.OID_COUNTRY_NAME, 'DE'),
             x509.NameAttribute(x509.OID_STATE_OR_PROVINCE_NAME, 'California'),
