Source: stringencoders
Version: 3.10.3+git20180306-1.1
Severity: serious
Tags: ftbfs patch upstream
Justification: fails to build from source (but built successfully in the past)
X-Debbugs-Cc: [email protected]
User: [email protected]
Usertags: riscv64

Dear maintainer,

stringencoders fails to build on riscv64:

| =================================================
|    stringencoders v3.10.3: test/test-suite.log
| =================================================
| 
| # TOTAL: 16
| # PASS:  15
| # SKIP:  0
| # XFAIL: 0
| # FAIL:  1
| # XPASS: 0
| # ERROR: 0
| 
| .. contents:: :depth: 2
| 
| FAIL: modp_numtoa_test
| ======================
| 
| modp_numtoa_test.c ........ASSERTION FAILED: modp_numtoa_test.c:408 
-2147483648 != -0./,),(-*,(
| FAIL modp_numtoa_test (exit status: 1)
| 
| ============================================================================
| Testsuite summary for stringencoders v3.10.3
| ============================================================================
| # TOTAL: 16
| # PASS:  15
| # SKIP:  0
| # XFAIL: 0
| # FAIL:  1
| # XPASS: 0
| # ERROR: 0
| ============================================================================
| See test/test-suite.log
| Please report to nickg -at- client9 -dot- com
| ============================================================================
| make[4]: *** [Makefile:1246: test-suite.log] Error 1
| make[4]: Leaving directory '/<<PKGBUILDDIR>>/test'
| make[3]: *** [Makefile:1354: check-TESTS] Error 2
| make[3]: Leaving directory '/<<PKGBUILDDIR>>/test'
| make[2]: *** [Makefile:1532: check-am] Error 2
| make[2]: Leaving directory '/<<PKGBUILDDIR>>/test'
| make[1]: *** [Makefile:403: check-recursive] Error 1
| make[1]: Leaving directory '/<<PKGBUILDDIR>>'
| dh_auto_test: error: make -j4 check "TESTSUITEFLAGS=-j4 --verbose" VERBOSE=1 
returned exit code 2
| make: *** [debian/rules:8: build-arch] Error 25
| dpkg-buildpackage: error: debian/rules build-arch subprocess returned exit 
status 2

The full build log is available there:
https://buildd.debian.org/status/fetch.php?pkg=stringencoders&arch=riscv64&ver=3.10.3%2Bgit20180306-1.1%2Bb2&stamp=1730377520&raw=0

The issue happens to be due to an undefined behaviour due to signed
integer overflow, triggered by the switch from GCC 13 to GCC 14. This
can be reproduced on amd64 by compiling the library with
-fsanitize=signed-integer-overflow and then running the test by hand.

The patch belows fixes the issue:

--- stringencoders-3.10.3+git20180306.orig/src/modp_numtoa.c
+++ stringencoders-3.10.3+git20180306/src/modp_numtoa.c
@@ -35,7 +35,7 @@ size_t modp_itoa10(int32_t value, char*
 {
     char* wstr = str;
     /* Take care of sign */
-    uint32_t uvalue = (value < 0) ? (uint32_t)(-value) : (uint32_t)(value);
+    uint32_t uvalue = (value < 0) ? -((uint32_t)value) : (uint32_t)(value);
     /* Conversion. Number is reversed. */
     do
         *wstr++ = (char)(48 + (uvalue % 10));
@@ -65,7 +65,7 @@ size_t modp_uitoa10(uint32_t value, char
 size_t modp_litoa10(int64_t value, char* str)
 {
     char* wstr = str;
-    uint64_t uvalue = (value < 0) ? (uint64_t)(-value) : (uint64_t)(value);
+    uint64_t uvalue = (value < 0) ? -((uint64_t)value) : (uint64_t)(value);
 
     /* Conversion. Number is reversed. */
     do

Regards
Aurelien

Reply via email to