Page MenuHomeFreeBSD

D56529.id175908.diff
No OneTemporary

D56529.id175908.diff

diff --git a/lib/libsbuf/tests/sbuf_string_test.c b/lib/libsbuf/tests/sbuf_string_test.c
--- a/lib/libsbuf/tests/sbuf_string_test.c
+++ b/lib/libsbuf/tests/sbuf_string_test.c
@@ -275,6 +275,43 @@
sbuf_delete(sb);
}
+
+
+ATF_TC_WITHOUT_HEAD(sbuf_printf_overflow);
+ATF_TC_BODY(sbuf_printf_overflow, tc)
+{
+ struct sbuf sb;
+ char buf[10];
+
+ sbuf_new(&sb, buf, sizeof(buf), SBUF_FIXEDLEN);
+ sbuf_printf(&sb, "this_string_is_too_long");
+ sbuf_finish(&sb);
+
+ /* Validates that the data was safely truncated */
+ ATF_CHECK_STREQ(buf, "this_stri");
+ ATF_CHECK_EQ_MSG(-1, sbuf_len(&sb), "SBUF should be in error state (-1) after overflow");
+ ATF_CHECK_EQ(ENOMEM, sbuf_error(&sb));
+ sbuf_delete(&sb);
+}
+ATF_TC_WITHOUT_HEAD(sbuf_printf_test);
+ATF_TC_BODY(sbuf_printf_test, tc)
+{
+ struct sbuf *sb;
+ char buffer[10];
+ int result;
+
+ sb = sbuf_new(NULL, buffer, sizeof(buffer), SBUF_FIXEDLEN);
+ ATF_REQUIRE(sb != NULL);
+
+ result = sbuf_printf(sb, "exactly_15_chars");
+
+ /* Validates that the function reported the error correctly */
+ ATF_REQUIRE_EQ_MSG(result, -1, "sbuf_printf failed to report overflow!");
+ ATF_REQUIRE_MSG(sbuf_len(sb) < (int)sizeof(buffer), "Buffer overflow detected!");
+
+ sbuf_delete(sb);
+}
+
ATF_TP_ADD_TCS(tp)
{
@@ -284,6 +321,9 @@
ATF_TP_ADD_TC(tp, sbuf_cpy_test);
ATF_TP_ADD_TC(tp, sbuf_putc_test);
ATF_TP_ADD_TC(tp, sbuf_trim_test);
+ ATF_TP_ADD_TC(tp, sbuf_printf_test);
+ ATF_TP_ADD_TC(tp, sbuf_printf_overflow);
+
return (atf_no_error());
}

File Metadata

Mime Type
text/plain
Expires
Thu, Aug 13, 3:31 PM (2 h, 21 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
36649050
Default Alt Text
D56529.id175908.diff (1 KB)

Event Timeline