Inherit ptest and include tests for pyppmd. Add a patch to fix SIGABRT OutputBuffer_Grow() from src/ext/_ppmdmodule.c which was detected with the tests.
This work was sponsored by GOVCERT.LU. Signed-off-by: Leon Anavi <[email protected]> --- ...md8-Fix-SIGABRT-in-OutputBuffer_Grow.patch | 70 +++++++++++++++++++ .../python/python3-pyppmd/run-ptest | 3 + .../python/python3-pyppmd_1.3.1.bb | 23 +++++- 3 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 meta-python/recipes-devtools/python/python3-pyppmd/0001-Ppmd7-Ppmd8-Fix-SIGABRT-in-OutputBuffer_Grow.patch create mode 100644 meta-python/recipes-devtools/python/python3-pyppmd/run-ptest diff --git a/meta-python/recipes-devtools/python/python3-pyppmd/0001-Ppmd7-Ppmd8-Fix-SIGABRT-in-OutputBuffer_Grow.patch b/meta-python/recipes-devtools/python/python3-pyppmd/0001-Ppmd7-Ppmd8-Fix-SIGABRT-in-OutputBuffer_Grow.patch new file mode 100644 index 0000000000..a31ac621d6 --- /dev/null +++ b/meta-python/recipes-devtools/python/python3-pyppmd/0001-Ppmd7-Ppmd8-Fix-SIGABRT-in-OutputBuffer_Grow.patch @@ -0,0 +1,70 @@ +From f9c6a0549503f00a1ab0ad58a98a30ee99b96770 Mon Sep 17 00:00:00 2001 +From: Leon Anavi <[email protected]> +Date: Thu, 9 Jul 2026 11:37:04 +0000 +Subject: [PATCH] Ppmd7/Ppmd8: Fix SIGABRT in OutputBuffer_Grow + +The decode loop could abort in OutputBuffer_Grow() when a resumed +decode thread wrote past the current call's max_length. Stop early +once that limit is reached instead of trying to grow the buffer +further. + +Also fix Ppmd8Decoder_decode because it never updated needs_input +when input was fully consumed, unlike Ppmd7. + +Fixes test_ppmd7_decode_chunks and the equivalent Ppmd8 case, +which previously aborted deterministically partway through decoding +testdata2.ppmd in small chunks. + +This work was sponsored by GOVCERT.LU. + +Upstream-Status: Pending [https://github.com/miurahr/pyppmd/pull/131/] + +Signed-off-by: Leon Anavi <[email protected]> +--- + src/ext/_ppmdmodule.c | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +diff --git a/src/ext/_ppmdmodule.c b/src/ext/_ppmdmodule.c +index dafa1c5..94f7f18 100644 +--- a/src/ext/_ppmdmodule.c ++++ b/src/ext/_ppmdmodule.c +@@ -531,6 +531,12 @@ Ppmd7Decoder_decode(Ppmd7Decoder *self, PyObject *args, PyObject *kwargs) { + break; + } + if (out->pos == out->size) { ++ /* Already reached max_length for this call; stop instead of ++ growing (avoids rest<=0 assert in OutputBuffer_Grow) */ ++ if (self->blocksOutputBuffer->max_length >= 0 && ++ self->blocksOutputBuffer->allocated >= self->blocksOutputBuffer->max_length) { ++ break; ++ } + if (OutputBuffer_Grow(self->blocksOutputBuffer, out) < 0) { + PyErr_SetString(PyExc_ValueError, "No Memory."); + goto error; +@@ -1276,6 +1282,11 @@ Ppmd8Decoder_decode(Ppmd8Decoder *self, PyObject *args, PyObject *kwargs) { + break; // filled expected + } + if (out->pos == out->size) { ++ /* Same guard as for Ppmd7Decoder_decode() above */ ++ if (self->blocksOutputBuffer->max_length >= 0 && ++ self->blocksOutputBuffer->allocated >= self->blocksOutputBuffer->max_length) { ++ break; ++ } + if (OutputBuffer_Grow(self->blocksOutputBuffer, out) < 0) { + PyErr_SetString(PyExc_ValueError, "L1586: Unknown status"); + goto error; +@@ -1303,6 +1314,11 @@ Ppmd8Decoder_decode(Ppmd8Decoder *self, PyObject *args, PyObject *kwargs) { + self->in_begin = 0; + self->in_end = 0; + } ++ if (self->eof) { ++ self->needs_input = False; ++ } else { ++ self->needs_input = True; ++ } + } else { + const size_t data_size = in->size - in->pos; + self->needs_input = False; +-- +2.47.3 + diff --git a/meta-python/recipes-devtools/python/python3-pyppmd/run-ptest b/meta-python/recipes-devtools/python/python3-pyppmd/run-ptest new file mode 100644 index 0000000000..8d2017d39c --- /dev/null +++ b/meta-python/recipes-devtools/python/python3-pyppmd/run-ptest @@ -0,0 +1,3 @@ +#!/bin/sh + +pytest --automake diff --git a/meta-python/recipes-devtools/python/python3-pyppmd_1.3.1.bb b/meta-python/recipes-devtools/python/python3-pyppmd_1.3.1.bb index 4a06c9f01b..5af79d0453 100644 --- a/meta-python/recipes-devtools/python/python3-pyppmd_1.3.1.bb +++ b/meta-python/recipes-devtools/python/python3-pyppmd_1.3.1.bb @@ -4,10 +4,15 @@ LICENSE = "LGPL-2.1-or-later" SECTION = "devel/python" LIC_FILES_CHKSUM = "file://LICENSE;md5=4fbd65380cdd255951079008b364516c" -inherit pypi python_setuptools_build_meta +inherit pypi python_setuptools_build_meta ptest SRC_URI[sha256sum] = "ced527f08ade4408c1bfc5264e9f97ffac8d221c9d13eca4f35ec1ec0c7b6b2e" +SRC_URI += " \ + file://0001-Ppmd7-Ppmd8-Fix-SIGABRT-in-OutputBuffer_Grow.patch \ + file://run-ptest \ +" + DEPENDS += " \ python3-setuptools-scm-native \ python3-toml-native \ @@ -18,3 +23,19 @@ RDEPENDS:${PN} += "\ python3-email \ python3-importlib-metadata \ " + +RDEPENDS:${PN}-ptest += " \ + python3-pytest \ + python3-pytest-benchmark \ + python3-core \ + python3-crypt \ + python3-datetime \ + python3-hypothesis \ + python3-unittest \ + python3-unittest-automake-output \ +" + +do_install_ptest() { + install -d ${D}${PTEST_PATH}/tests + cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/ +} -- 2.47.3
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#128125): https://lists.openembedded.org/g/openembedded-devel/message/128125 Mute This Topic: https://lists.openembedded.org/mt/120189512/21656 Group Owner: [email protected] Unsubscribe: https://lists.openembedded.org/g/openembedded-devel/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
