Author: mattip <[email protected]>
Branch: stdlib-2.7.9
Changeset: r75818:92a7192649f6
Date: 2015-02-10 23:27 +0200
http://bitbucket.org/pypy/pypy/changeset/92a7192649f6/

Log:    translation fixes

diff --git a/pypy/module/_ssl/interp_ssl.py b/pypy/module/_ssl/interp_ssl.py
--- a/pypy/module/_ssl/interp_ssl.py
+++ b/pypy/module/_ssl/interp_ssl.py
@@ -552,6 +552,9 @@
                 return _decode_certificate(space, self.peer_cert)
 
     def selected_npn_protocol(self, space):
+        if not HAS_NPN:
+            raise oefmt(space.w_NotImplementedError,
+                        "The NPN extension requires OpenSSL 1.0.1 or later.")
         with lltype.scoped_alloc(rffi.CCHARPP.TO, 1) as out_ptr:
             with lltype.scoped_alloc(rffi.UINTP.TO, 1) as len_ptr:
                 libssl_SSL_get0_next_proto_negotiated(self.ssl,
diff --git a/pypy/module/_ssl/interp_win32.py b/pypy/module/_ssl/interp_win32.py
--- a/pypy/module/_ssl/interp_win32.py
+++ b/pypy/module/_ssl/interp_win32.py
@@ -4,7 +4,7 @@
 from rpython.translator.tool.cbuild import ExternalCompilationInfo
 from pypy.interpreter.gateway import unwrap_spec
 from pypy.interpreter.error import wrap_windowserror
-
+from rpython.rlib.rarithmetic import intmask, widen
 eci = ExternalCompilationInfo(
     includes = ['windows.h', 'wincrypt.h'],
     libraries = ['crypt32'],
@@ -15,6 +15,9 @@
 
     X509_ASN_ENCODING = rffi_platform.ConstantInteger('X509_ASN_ENCODING')
     PKCS_7_ASN_ENCODING = rffi_platform.ConstantInteger('PKCS_7_ASN_ENCODING')
+    CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG = 
rffi_platform.ConstantInteger('CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG')
+    CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG = 
rffi_platform.ConstantInteger('CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG')
+    CRYPT_E_NOT_FOUND = rffi_platform.ConstantInteger('CRYPT_E_NOT_FOUND')
 
     CERT_ENHKEY_USAGE = rffi_platform.Struct(
         'CERT_ENHKEY_USAGE', [('cUsageIdentifier', rwin32.DWORD),
@@ -38,6 +41,7 @@
 def external(name, argtypes, restype, **kw):
     kw['compilation_info'] = eci
     kw['calling_conv'] = 'win'
+    kw['save_err'] = rffi.RFFI_SAVE_LASTERROR
     return rffi.llexternal(
         name, argtypes, restype, **kw)
 
@@ -69,22 +73,22 @@
         return space.wrap(encodingType)
 
 def w_parseKeyUsage(space, pCertCtx, flags):
-    with rffi.scoped_alloc(rwin32.LPDWORD.TO, 1) as size_ptr:
+    with lltype.scoped_alloc(rwin32.LPDWORD.TO, 1) as size_ptr:
         if not CertGetEnhancedKeyUsage(pCertCtx, flags, None, size_ptr):
             last_error = rwin32.lastSavedWindowsError()
-            if last_error == CRYPT_E_NOT_FOUND:
+            if last_error.errno == CRYPT_E_NOT_FOUND:
                 return space.w_True
-            raise wrap_windowserror(WindowsError(last_error))
+            raise wrap_windowserror(space, last_error)
 
-        size = rffi.widen(size_ptr[0])
-        with rffi.scoped_alloc(rffi.CCHARP.TO, size) as buf:
+        size = widen(size_ptr[0])
+        with lltype.scoped_alloc(rffi.CCHARP.TO, size) as buf:
             usage = rffi.cast(PCERT_ENHKEY_USAGE, buf)
             # Now get the actual enhanced usage property
             if not CertGetEnhancedKeyUsage(pCertCtx, flags, usage, size_ptr):
-                last_error = rwin32.lastSavedWindowsError()
-                if last_error == CRYPT_E_NOT_FOUND:
+                last_error= rwin32.lastSavedWindowsError()
+                if last_error.errno == CRYPT_E_NOT_FOUND:
                     return space.w_True
-                raise wrap_windowserror(WindowsError(last_error))
+                raise wrap_windowserror(space, last_error)
 
             result_w = []
             for i in range(usage.c_cUsageIdentifier):
@@ -93,7 +97,7 @@
                 result_w.append(
                     space.wrap(rffi.charp2str(
                         usage.c_rgpszUsageIdentifier[i])))
-            return space.newset(result_w)
+            return space.newlist(result_w) #space.newset(result_w)
 
 @unwrap_spec(store_name=str)
 def enum_certificates_w(space, store_name):
@@ -107,10 +111,10 @@
     boolean True."""
 
     result_w = []
-    pCertCtx = lltype.nullptr(PCCERT_CONTEXT)
+    pCertCtx = lltype.nullptr(CERT_CONTEXT)
     hStore = CertOpenSystemStore(None, store_name)
     if not hStore:
-        raise wrap_windowserror(rwin32.lastSavedWindowsError())
+        raise wrap_windowserror(space, rwin32.lastSavedWindowsError())
     try:
         while True:
             pCertCtx = CertEnumCertificatesInStore(hStore, pCertCtx)
@@ -118,7 +122,7 @@
                 break
             w_cert = space.wrapbytes(
                 rffi.charpsize2str(pCertCtx.c_pbCertEncoded,
-                                   pCertCtx.c_cbCertEncoded))
+                                   intmask(pCertCtx.c_cbCertEncoded)))
             w_enc = w_certEncodingType(space, pCertCtx.c_dwCertEncodingType)
             w_keyusage = w_parseKeyUsage(
                 space, pCertCtx, CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG)
@@ -126,13 +130,15 @@
                 w_keyusage = w_parseKeyUsage(
                     space, pCertCtx, CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG)
             result_w.append(space.newtuple([w_cert, w_enc, w_keyusage]))
+    except:
+        raise
     finally:
         if pCertCtx:
             # loop ended with an error, need to clean up context manually
             CertFreeCertificateContext(pCertCtx)
         if not CertCloseStore(hStore, 0):
             # This error case might shadow another exception.
-            raise wrap_windowserror(rwin32.lastSavedWindowsError())
+            raise wrap_windowserror(space, rwin32.lastSavedWindowsError())
 
     return space.newlist(result_w)
 
@@ -146,10 +152,11 @@
     encoding_type flag can be interpreted with X509_ASN_ENCODING or
     PKCS_7_ASN_ENCODING."""
     result_w = []
-    pCrlCtx = lltype.nullptr(PCCRL_CONTEXT)
+
+    pCrlCtx = lltype.nullptr(CRL_CONTEXT)
     hStore = CertOpenSystemStore(None, store_name)
     if not hStore:
-        raise wrap_windowserror(rwin32.lastSavedWindowsError())
+        raise wrap_windowserror(space, rwin32.lastSavedWindowsError())
     try:
         while True:
             pCrlCtx = CertEnumCRLsInStore(hStore, pCrlCtx)
@@ -157,13 +164,15 @@
                 break
             w_crl = space.wrapbytes(
                 rffi.charpsize2str(pCrlCtx.c_pbCrlEncoded,
-                                   pCrlCtx.c_cbCrlEncoded))
+                                   intmask(pCrlCtx.c_cbCrlEncoded)))
             w_enc = w_certEncodingType(space, pCrlCtx.c_dwCertEncodingType)
             result_w.append(space.newtuple([w_crl, w_enc]))
+    except:
+        raise
     finally:
         if pCrlCtx:
             # loop ended with an error, need to clean up context manually
             CertFreeCRLContext(pCrlCtx)
         if not CertCloseStore(hStore, 0):
             # This error case might shadow another exception.
-            raise wrap_windowserror(rwin32.lastSavedWindowsError())
+            raise wrap_windowserror(space, rwin32.lastSavedWindowsError())
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to