Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-pylsqpack for 
openSUSE:Factory checked in at 2026-04-28 11:53:22
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pylsqpack (Old)
 and      /work/SRC/openSUSE:Factory/.python-pylsqpack.new.11940 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-pylsqpack"

Tue Apr 28 11:53:22 2026 rev:8 rq:1349273 version:0.3.24

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pylsqpack/python-pylsqpack.changes        
2026-01-28 15:05:54.042888707 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-pylsqpack.new.11940/python-pylsqpack.changes 
    2026-04-28 11:53:32.618467056 +0200
@@ -1,0 +2,7 @@
+Sat Apr 25 19:56:19 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 0.3.24:
+  * Do not crash if decoding an empty header name
+  * Ensure encoder validates all input before starting encoding
+
+-------------------------------------------------------------------

Old:
----
  pylsqpack-0.3.23.tar.gz

New:
----
  pylsqpack-0.3.24.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-pylsqpack.spec ++++++
--- /var/tmp/diff_new_pack.MQGNOX/_old  2026-04-28 11:53:33.446501247 +0200
+++ /var/tmp/diff_new_pack.MQGNOX/_new  2026-04-28 11:53:33.450501413 +0200
@@ -18,7 +18,7 @@
 
 %{?sle15_python_module_pythons}
 Name:           python-pylsqpack
-Version:        0.3.23
+Version:        0.3.24
 Release:        0
 Summary:        Python ls-qpack QPACK library
 License:        BSD-3-Clause

++++++ pylsqpack-0.3.23.tar.gz -> pylsqpack-0.3.24.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pylsqpack-0.3.23/PKG-INFO 
new/pylsqpack-0.3.24/PKG-INFO
--- old/pylsqpack-0.3.23/PKG-INFO       2025-10-10 19:06:52.422104800 +0200
+++ new/pylsqpack-0.3.24/PKG-INFO       2026-03-29 17:37:19.968556600 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: pylsqpack
-Version: 0.3.23
+Version: 0.3.24
 Summary: Python wrapper for the ls-qpack QPACK library
 Author-email: Jeremy Lainé <[email protected]>
 License-Expression: BSD-3-Clause
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pylsqpack-0.3.23/src/pylsqpack/__init__.py 
new/pylsqpack-0.3.24/src/pylsqpack/__init__.py
--- old/pylsqpack-0.3.23/src/pylsqpack/__init__.py      2025-10-10 
19:06:42.000000000 +0200
+++ new/pylsqpack-0.3.24/src/pylsqpack/__init__.py      2026-03-29 
17:37:12.000000000 +0200
@@ -9,4 +9,4 @@
     StreamBlocked,
 )
 
-__version__ = "0.3.23"
+__version__ = "0.3.24"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pylsqpack-0.3.23/src/pylsqpack/binding.c 
new/pylsqpack-0.3.24/src/pylsqpack/binding.c
--- old/pylsqpack-0.3.23/src/pylsqpack/binding.c        2025-10-10 
19:06:42.000000000 +0200
+++ new/pylsqpack-0.3.24/src/pylsqpack/binding.c        2026-03-29 
17:37:12.000000000 +0200
@@ -68,8 +68,17 @@
  */
 static struct lsxpack_header *header_block_prepare_decode(void *opaque, struct 
lsxpack_header *xhdr, size_t space) {
     struct header_block *hblock = opaque;
-    char *buf = realloc(hblock->header_buffer, space);
-    if (!buf) return NULL;
+    char *buf;
+
+    // The behaviour of realloc(ptr, 0) is implementation specific,
+    // so if asked for a zero size we explicitly free the memory.
+    if (space) {
+        buf = realloc(hblock->header_buffer, space);
+        if (!buf) return NULL;
+    } else {
+        free(hblock->header_buffer);
+        buf = 0;
+    }
     hblock->header_buffer = buf;
 
     if (xhdr) {
@@ -426,16 +435,12 @@
     if (!PyArg_ParseTupleAndKeywords(args, kwargs, "KO", kwlist, &stream_id, 
&list))
         return NULL;
 
+    // Validate all the input headers.
     if (!PyList_Check(list)) {
         PyErr_SetString(PyExc_ValueError, "headers must be a list");
         return NULL;
     }
 
-    if (lsqpack_enc_start_header(&self->enc, stream_id, seqno) != 0) {
-        PyErr_SetString(PyExc_RuntimeError, "lsqpack_enc_start_header failed");
-        return NULL;
-    }
-
     for (Py_ssize_t i = 0; i < PyList_Size(list); ++i) {
         tuple = PyList_GetItem(list, i);
         if (!PyTuple_Check(tuple) || PyTuple_Size(tuple) != 2) {
@@ -450,10 +455,28 @@
         }
         name_len = PyBytes_Size(name);
         value_len = PyBytes_Size(value);
+        if (name_len == 0) {
+            PyErr_SetString(PyExc_ValueError, "the header's name must not be 
empty");
+            return NULL;
+        }
         if (name_len + value_len > XHDR_BUF_SZ) {
             PyErr_SetString(PyExc_ValueError, "the header's name and value are 
too long");
             return NULL;
         }
+    }
+
+    // Start the encoding transaction.
+    if (lsqpack_enc_start_header(&self->enc, stream_id, seqno) != 0) {
+        PyErr_SetString(PyExc_RuntimeError, "lsqpack_enc_start_header failed");
+        return NULL;
+    }
+
+    for (Py_ssize_t i = 0; i < PyList_Size(list); ++i) {
+        tuple = PyList_GetItem(list, i);
+        name = PyTuple_GetItem(tuple, 0);
+        value = PyTuple_GetItem(tuple, 1);
+        name_len = PyBytes_Size(name);
+        value_len = PyBytes_Size(value);
 
         // Copy the header name and value into the xhdr buffer.
         memcpy(self->xhdr_buf, PyBytes_AsString(name), name_len);
@@ -468,6 +491,7 @@
                                &xhdr,
                                0) != LQES_OK) {
             PyErr_SetString(PyExc_RuntimeError, "lsqpack_enc_encode failed");
+            lsqpack_enc_end_header(&self->enc, self->pfx_buf, PREFIX_MAX_SIZE, 
NULL);
             return NULL;
         }
         enc_off += enc_len;
@@ -476,7 +500,7 @@
 
     pfx_len = lsqpack_enc_end_header(&self->enc, self->pfx_buf, 
PREFIX_MAX_SIZE, NULL);
     if (pfx_len <= 0) {
-        PyErr_SetString(PyExc_RuntimeError, "lsqpack_enc_start_header failed");
+        PyErr_SetString(PyExc_RuntimeError, "lsqpack_enc_end_header failed");
         return NULL;
     }
     pfx_off = PREFIX_MAX_SIZE - pfx_len;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pylsqpack-0.3.23/src/pylsqpack.egg-info/PKG-INFO 
new/pylsqpack-0.3.24/src/pylsqpack.egg-info/PKG-INFO
--- old/pylsqpack-0.3.23/src/pylsqpack.egg-info/PKG-INFO        2025-10-10 
19:06:52.000000000 +0200
+++ new/pylsqpack-0.3.24/src/pylsqpack.egg-info/PKG-INFO        2026-03-29 
17:37:19.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: pylsqpack
-Version: 0.3.23
+Version: 0.3.24
 Summary: Python wrapper for the ls-qpack QPACK library
 Author-email: Jeremy Lainé <[email protected]>
 License-Expression: BSD-3-Clause
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pylsqpack-0.3.23/tests/test_decoder.py 
new/pylsqpack-0.3.24/tests/test_decoder.py
--- old/pylsqpack-0.3.23/tests/test_decoder.py  2025-10-10 19:06:42.000000000 
+0200
+++ new/pylsqpack-0.3.24/tests/test_decoder.py  2026-03-29 17:37:12.000000000 
+0200
@@ -63,6 +63,19 @@
         # free the decoder with pending block
         del decoder
 
+    def test_decompress_failed_empty_header_name(self):
+        """
+        Decoding a header with an empty name should fail but not crash.
+
+        The input was generated by passing the following to the encoder:
+
+        [(b"one", b"foo"), (b"", b"bar")]
+        """
+        decoder = Decoder(0x100, 0x10)
+        with self.assertRaises(DecompressionFailed) as cm:
+            decoder.feed_header(0, 
binascii.unhexlify("00002a3d458294e72003626172"))
+        self.assertEqual(str(cm.exception), "lsqpack_dec_header_in for stream 
0 failed")
+
     def test_decompression_failed_too_short(self):
         decoder = Decoder(0x100, 0x10)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pylsqpack-0.3.23/tests/test_encoder.py 
new/pylsqpack-0.3.24/tests/test_encoder.py
--- old/pylsqpack-0.3.23/tests/test_encoder.py  2025-10-10 19:06:42.000000000 
+0200
+++ new/pylsqpack-0.3.24/tests/test_encoder.py  2026-03-29 17:37:12.000000000 
+0200
@@ -17,6 +17,13 @@
             encoder.encode(stream_id, ["hello"])
         self.assertEqual(str(cm.exception), "the header must be a two-tuple")
 
+    def test_encode_name_empty(self):
+        encoder = Encoder()
+        stream_id = 0
+        with self.assertRaises(ValueError) as cm:
+            encoder.encode(stream_id, [(b"", b"bar")])
+        self.assertEqual(str(cm.exception), "the header's name must not be 
empty")
+
     def test_encode_name_not_bytes(self):
         encoder = Encoder()
         stream_id = 0

Reply via email to