Author: mattip <[email protected]>
Branch: 
Changeset: r72379:f3d274416c97
Date: 2014-07-08 09:22 +1000
http://bitbucket.org/pypy/pypy/changeset/f3d274416c97/

Log:    fix unsafe FormatMessage call (windows)

diff --git a/rpython/rlib/rwin32.py b/rpython/rlib/rwin32.py
--- a/rpython/rlib/rwin32.py
+++ b/rpython/rlib/rwin32.py
@@ -79,7 +79,7 @@
             "MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT)")
 
         defines = """FORMAT_MESSAGE_ALLOCATE_BUFFER FORMAT_MESSAGE_FROM_SYSTEM
-                       MAX_PATH _MAX_ENV
+                       MAX_PATH _MAX_ENV FORMAT_MESSAGE_IGNORE_INSERTS
                        WAIT_OBJECT_0 WAIT_TIMEOUT INFINITE
                        ERROR_INVALID_HANDLE
                        DELETE READ_CONTROL SYNCHRONIZE WRITE_DAC
@@ -226,7 +226,8 @@
         buf[0] = lltype.nullptr(rffi.CCHARP.TO)
         try:
             msglen = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
-                                   FORMAT_MESSAGE_FROM_SYSTEM,
+                                   FORMAT_MESSAGE_FROM_SYSTEM | 
+                                   FORMAT_MESSAGE_IGNORE_INSERTS,
                                    None,
                                    rffi.cast(DWORD, code),
                                    DEFAULT_LANGUAGE,
diff --git a/rpython/rlib/test/test_rwin32.py b/rpython/rlib/test/test_rwin32.py
--- a/rpython/rlib/test/test_rwin32.py
+++ b/rpython/rlib/test/test_rwin32.py
@@ -58,3 +58,9 @@
     for key, value in env.iteritems():
         assert type(key) is unicode
         assert type(value) is unicode
+
+def test_formaterror():
+    # choose one with formatting characters and newlines
+    msg = rwin32.FormatError(34)
+    assert '%2' in msg
+
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to