]> granicus.if.org Git - python/commitdiff
Issue #20142: Py_buffer variables generated by Argument Clinic are now
authorLarry Hastings <larry@hastings.org>
Mon, 6 Jan 2014 18:34:00 +0000 (10:34 -0800)
committerLarry Hastings <larry@hastings.org>
Mon, 6 Jan 2014 18:34:00 +0000 (10:34 -0800)
initialized with a default value.

Misc/NEWS
Modules/zlibmodule.c
Tools/clinic/clinic.py

index 4da7c4f0dd5d5b8b7eb58066c3cea8290936923c..607a3d2c7f5471907fb45f8f36b674ce5ec08414 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -13,6 +13,11 @@ Core and Builtins
 Library
 -------
 
+Tools/Demos
+-----------
+
+- Issue #20142: Py_buffer variables generated by Argument Clinic are now
+  initialized with a default value.
 
 What's New in Python 3.4.0 Beta 2?
 ==================================
index d197d882df0a32a011b0e182b6f79c470960681b..7f44c4ab361852b3c4206c7744adf80afdff14f4 100644 (file)
@@ -198,7 +198,7 @@ static PyObject *
 zlib_compress(PyModuleDef *module, PyObject *args)
 {
     PyObject *return_value = NULL;
-    Py_buffer bytes;
+    Py_buffer bytes = {NULL, NULL, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL};
     int group_right_1 = 0;
     int level = 0;
 
@@ -227,7 +227,7 @@ zlib_compress(PyModuleDef *module, PyObject *args)
 
 static PyObject *
 zlib_compress_impl(PyModuleDef *module, Py_buffer *bytes, int group_right_1, int level)
-/*[clinic checksum: f490708eff84be652b5ebe7fe622ab73ac12c888]*/
+/*[clinic checksum: 9f055a396620bc1a8a13d74c3496249528b32b0d]*/
 {
     PyObject *ReturnVal = NULL;
     Byte *input, *output = NULL;
@@ -789,7 +789,7 @@ static PyObject *
 zlib_Decompress_decompress(PyObject *self, PyObject *args)
 {
     PyObject *return_value = NULL;
-    Py_buffer data;
+    Py_buffer data = {NULL, NULL, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL};
     unsigned int max_length = 0;
 
     if (!PyArg_ParseTuple(args,
@@ -808,7 +808,7 @@ exit:
 
 static PyObject *
 zlib_Decompress_decompress_impl(compobject *self, Py_buffer *data, unsigned int max_length)
-/*[clinic checksum: 3599698948f5a712f5a8309491671cc2ce969d2c]*/
+/*[clinic checksum: 5b1e4f9f1ef8eca55fff78356f9df0c81232ed3b]*/
 {
     int err;
     unsigned int old_length, length = DEFAULTALLOC;
index 44456a7cdb984c5bad9951cd6b4d0a89b34f5699..023a034e09761f13dbf6ccb793b7bad7948b49b9 100755 (executable)
@@ -1488,7 +1488,12 @@ class CConverter(metaclass=CConverterAutoRegister):
             declaration.append('\nPy_ssize_clean_t ')
             declaration.append(self.length_name())
             declaration.append(';')
-        return "".join(declaration)
+        s = "".join(declaration)
+        # double up curly-braces, this string will be used
+        # as part of a format_map() template later
+        s = s.replace("{", "{{")
+        s = s.replace("}", "}}")
+        return s
 
     def initialize(self):
         """
@@ -1742,6 +1747,9 @@ class Py_buffer_converter(CConverter):
     c_ignored_default = "{NULL, NULL, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL}"
 
     def converter_init(self, *, types='bytes bytearray buffer', nullable=False):
+        if self.default != unspecified:
+            fail("There is no legal default value for Py_buffer ")
+        self.c_default = self.c_ignored_default
         types = set(types.strip().split())
         bytes_type = set(('bytes',))
         bytearray_type = set(('bytearray',))