From d74ad73009dd8ff4149a06904bb543f03a13f52e Mon Sep 17 00:00:00 2001 From: Marco Paland Date: Thu, 19 Apr 2018 13:20:46 +0200 Subject: fix(printf): fix snprintf buffer termination Fixes #7 (partly) --- test/test_suite.cpp | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) (limited to 'test') diff --git a/test/test_suite.cpp b/test/test_suite.cpp index a8de789..e152ac7 100644 --- a/test/test_suite.cpp +++ b/test/test_suite.cpp @@ -1017,6 +1017,59 @@ TEST_CASE("unknown flag", "[]" ) { } +TEST_CASE("buffer length", "[]" ) { + char buffer[100]; + int ret; + + // formatted length, this should return '4', + // but this feature is not implemented, returning 0 + ret = test::snprintf(nullptr, 10, "%s", "Test"); + REQUIRE(ret == 0); + ret = test::snprintf(nullptr, 0, "%s", "Test"); + REQUIRE(ret == 0); + + buffer[0] = (char)0xA5; + ret = test::snprintf(buffer, 0, "%s", "Test"); + REQUIRE(buffer[0] == (char)0xA5); + REQUIRE(ret == 0); + + buffer[0] = 0xCC; + test::snprintf(buffer, 1, "%s", "Test"); + REQUIRE(buffer[0] == '\0'); + + test::snprintf(buffer, 2, "%s", "Hello"); + REQUIRE(!strcmp(buffer, "H")); +} + + +TEST_CASE("ret value", "[]" ) { + char buffer[100] ; + int ret; + + ret = test::snprintf(buffer, 6, "0%s", "1234"); + REQUIRE(!strcmp(buffer, "01234")); + REQUIRE(ret == 5); + + ret = test::snprintf(buffer, 6, "0%s", "12345"); + REQUIRE(!strcmp(buffer, "01234")); + REQUIRE(ret == 6); // '5' is truncated + + ret = test::snprintf(buffer, 6, "0%s", "1234567"); + REQUIRE(!strcmp(buffer, "01234")); + REQUIRE(ret == 6); // '567' are truncated + + ret = test::snprintf(buffer, 10, "hello, world"); + REQUIRE(ret == 10); + + ret = test::snprintf(buffer, 3, "%d", 10000); + REQUIRE(ret == 3); // '000' are truncated + REQUIRE(strlen(buffer) == 2U); + REQUIRE(buffer[0] == '1'); + REQUIRE(buffer[1] == '0'); + REQUIRE(buffer[2] == '\0'); +} + + TEST_CASE("misc", "[]" ) { char buffer[100]; -- cgit v1.2.3