From 2f20e78e43aa6218b4efdc8ffb0cd576b92cdadf Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Tue, 12 May 2026 18:33:22 -0700 Subject: [PATCH] epicsStrPrintEscaped() operate on unterminated string see 3a2d225682d79f79c84852dbcb98d54cb250d62f see f488765631998c9d0b27a14c13aa412ec81a5fe9 --- modules/libcom/src/misc/epicsString.c | 2 +- modules/libcom/src/misc/epicsString.h | 3 +++ modules/libcom/test/epicsStringTest.c | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/modules/libcom/src/misc/epicsString.c b/modules/libcom/src/misc/epicsString.c index bcd10a504..2c56eeec1 100644 --- a/modules/libcom/src/misc/epicsString.c +++ b/modules/libcom/src/misc/epicsString.c @@ -234,7 +234,7 @@ int epicsStrPrintEscaped(FILE *fp, const char *s, size_t len) if (fp == NULL) return -1; - if (s == NULL || strlen(s) == 0 || len == 0) + if (s == NULL || len == 0) return 0; // No work to do while (len--) { diff --git a/modules/libcom/src/misc/epicsString.h b/modules/libcom/src/misc/epicsString.h index 5b36ebb94..573efa692 100644 --- a/modules/libcom/src/misc/epicsString.h +++ b/modules/libcom/src/misc/epicsString.h @@ -119,6 +119,9 @@ LIBCOM_API char * epicsStrnDup(const char *s, size_t len); * \param fp File descriptor to print to * \param s String to print * \param n Length of string + * \return Number of characters printed, or negative on error. + * + * \since 7.0.8 until UNRELEASED, @code strlen(s) @endcode must be valid. */ LIBCOM_API int epicsStrPrintEscaped(FILE *fp, const char *s, size_t n); diff --git a/modules/libcom/test/epicsStringTest.c b/modules/libcom/test/epicsStringTest.c index 77c53f041..6fe45dd99 100644 --- a/modules/libcom/test/epicsStringTest.c +++ b/modules/libcom/test/epicsStringTest.c @@ -220,6 +220,7 @@ void testEpicsStrPrintEscaped(void) // Passing cases testOk1(epicsStrPrintEscaped(testFile, "1234", 4) == 4); + testOk1(epicsStrPrintEscaped(testFile, "1234extra", 4) == 4); testOk1(epicsStrPrintEscaped(testFile, "\a\b\f\n\r\t\v\\\'\"", 10) == 20); // Failing cases @@ -236,7 +237,6 @@ void testEpicsStrPrintEscaped(void) testSkip(1, "fprintf is broken on this system"); } testOk1(epicsStrPrintEscaped(testFile, NULL, 4) == 0); - testOk1(epicsStrPrintEscaped(testFile, "", 4) == 0); testOk1(epicsStrPrintEscaped(testFile, "1234", 0) == 0); fclose(testFile);