|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
a669008 |
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
a669008 |
From: Charalampos Stratakis <cstratak@redhat.com>
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
a669008 |
Date: Mon, 30 Oct 2017 17:36:25 +0100
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
a669008 |
Subject: [PATCH] 00264: Fix test failing on aarch64
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
a669008 |
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
a669008 |
test_pass_by_value was added in Python 3.5.4 and on aarch64
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
a669008 |
it is catching an error that was there, but wasn't tested before.
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
a669008 |
Since the Python 3.5 branch is on security bug fix mode only
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
a669008 |
we backport the fix from the master branch.
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
a669008 |
Fixed upstream: http://bugs.python.org/issue29804
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
a669008 |
---
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
a669008 |
Lib/ctypes/test/test_as_parameter.py | 4 ++++
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
a669008 |
Lib/ctypes/test/test_structures.py | 22 ++++++++++++++++++++++
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
a669008 |
Modules/_ctypes/_ctypes_test.c | 18 ++++++++++++++++++
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
a669008 |
Modules/_ctypes/callproc.c | 23 +++++++++++++++++++++--
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
a669008 |
4 files changed, 65 insertions(+), 2 deletions(-)
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
a669008 |
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
diff --git a/Lib/ctypes/test/test_as_parameter.py b/Lib/ctypes/test/test_as_parameter.py
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
a669008 |
index 2a3484bec0..a2640575a0 100644
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
--- a/Lib/ctypes/test/test_as_parameter.py
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+++ b/Lib/ctypes/test/test_as_parameter.py
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
a669008 |
@@ -169,6 +169,10 @@ class BasicWrapTestCase(unittest.TestCase):
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
s2h = dll.ret_2h_func(self.wrap(inp))
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
self.assertEqual((s2h.x, s2h.y), (99*2, 88*3))
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ # Test also that the original struct was unmodified (i.e. was passed by
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ # value)
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ self.assertEqual((inp.x, inp.y), (99, 88))
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
def test_struct_return_8H(self):
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
class S8I(Structure):
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
_fields_ = [("a", c_int),
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
diff --git a/Lib/ctypes/test/test_structures.py b/Lib/ctypes/test/test_structures.py
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
a669008 |
index 2e9fc7c49c..fa7e86fa89 100644
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
--- a/Lib/ctypes/test/test_structures.py
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+++ b/Lib/ctypes/test/test_structures.py
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
a669008 |
@@ -420,6 +420,28 @@ class StructureTestCase(unittest.TestCase):
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
self.assertEqual(s.second, 0xcafebabe)
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
self.assertEqual(s.third, 0x0bad1dea)
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ def test_pass_by_value_in_register(self):
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ class X(Structure):
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ _fields_ = [
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ ('first', c_uint),
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ ('second', c_uint)
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ ]
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ s = X()
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ s.first = 0xdeadbeef
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ s.second = 0xcafebabe
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ dll = CDLL(_ctypes_test.__file__)
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ func = dll._testfunc_reg_struct_update_value
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ func.argtypes = (X,)
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ func.restype = None
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ func(s)
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ self.assertEqual(s.first, 0xdeadbeef)
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ self.assertEqual(s.second, 0xcafebabe)
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ got = X.in_dll(dll, "last_tfrsuv_arg")
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ self.assertEqual(s.first, got.first)
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ self.assertEqual(s.second, got.second)
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
class PointerMemberTestCase(unittest.TestCase):
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
def test(self):
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
diff --git a/Modules/_ctypes/_ctypes_test.c b/Modules/_ctypes/_ctypes_test.c
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
a669008 |
index e3240c526f..ed2cb6c823 100644
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
--- a/Modules/_ctypes/_ctypes_test.c
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+++ b/Modules/_ctypes/_ctypes_test.c
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
@@ -57,6 +57,24 @@ _testfunc_large_struct_update_value(Test in)
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
((volatile Test *)&in)->third = 0x0badf00d;
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
}
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+typedef struct {
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ unsigned int first;
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ unsigned int second;
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+} TestReg;
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+EXPORT(TestReg) last_tfrsuv_arg;
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+EXPORT(void)
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+_testfunc_reg_struct_update_value(TestReg in)
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+{
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ last_tfrsuv_arg = in;
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ ((volatile TestReg *)&in)->first = 0x0badf00d;
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ ((volatile TestReg *)&in)->second = 0x0badf00d;
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+}
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
EXPORT(void)testfunc_array(int values[4])
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
{
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
printf("testfunc_array %d %d %d %d\n",
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
a669008 |
index 70e416b950..8a20e6ae13 100644
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
--- a/Modules/_ctypes/callproc.c
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+++ b/Modules/_ctypes/callproc.c
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
a669008 |
@@ -1044,6 +1044,13 @@ GetComError(HRESULT errcode, GUID *riid, IUnknown *pIunk)
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
}
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
#endif
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+#if (defined(__x86_64__) && (defined(__MINGW64__) || defined(__CYGWIN__))) || \
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ defined(__aarch64__)
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+#define CTYPES_PASS_BY_REF_HACK
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+#define POW2(x) (((x & ~(x - 1)) == x) ? x : 0)
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+#define IS_PASS_BY_REF(x) (x > 8 || !POW2(x))
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+#endif
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
/*
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
* Requirements, must be ensured by the caller:
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
* - argtuple is tuple of arguments
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
a669008 |
@@ -1141,8 +1148,20 @@ PyObject *_ctypes_callproc(PPROC pProc,
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
}
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
for (i = 0; i < argcount; ++i) {
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
atypes[i] = args[i].ffi_type;
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
- if (atypes[i]->type == FFI_TYPE_STRUCT
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
- )
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+#ifdef CTYPES_PASS_BY_REF_HACK
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ size_t size = atypes[i]->size;
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ if (IS_PASS_BY_REF(size)) {
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ void *tmp = alloca(size);
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ if (atypes[i]->type == FFI_TYPE_STRUCT)
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ memcpy(tmp, args[i].value.p, size);
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ else
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ memcpy(tmp, (void*)&args[i].value, size);
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ avalues[i] = tmp;
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ else
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+#endif
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
+ if (atypes[i]->type == FFI_TYPE_STRUCT)
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
avalues[i] = (void *)args[i].value.p;
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
else
|
|
![](https://seccdn.libravatar.org/avatar/da3993ad9cc468876a3870c7acb6152e9f41e03b5593d3714f9c291cf99ce8c4?s=16&d=retro) |
ff4d630 |
avalues[i] = (void *)&args[i].value;
|