@@ -105,17 +105,42 @@ void printf_int_expr(intmax_t smuggle_format_expr, /* TODO: teach test framework
105105
106106 /* Nominal case: buffer just large enough */
107107 TEST_CALLOC(output, n + 1);
108+
109+ int retval;
108110 if ((size_t) sizeof_x <= sizeof(int)) { // Any smaller integers would be promoted to an int due to calling a vararg function
109- TEST_EQUAL(n, mbedtls_snprintf(output, n + 1, format, (int) x) );
111+ retval = mbedtls_snprintf(output, n + 1, format, (int) x);
110112 } else if (sizeof_x == sizeof(long)) {
111- TEST_EQUAL(n, mbedtls_snprintf(output, n + 1, format, (long) x) );
113+ retval = mbedtls_snprintf(output, n + 1, format, (long) x);
112114 } else if (sizeof_x == sizeof(long long)) {
113- TEST_EQUAL(n, mbedtls_snprintf(output, n + 1, format, (long long) x) );
115+ retval = mbedtls_snprintf(output, n + 1, format, (long long) x);
114116 } else {
115117 TEST_FAIL(
116118 "sizeof_x <= sizeof(int) || sizeof_x == sizeof(long) || sizeof_x == sizeof(long long)");
117119 }
118- TEST_MEMORY_COMPARE(result, n + 1, output, n + 1);
120+
121+ if (retval != (int) n || memcmp(output, result, n) != 0) {
122+ char test[MBEDTLS_TEST_LINE_LENGTH * 3];
123+ int written = mbedtls_snprintf(
124+ test, sizeof(test) - 1,
125+ "mbedtls_snprintf(buf, %lld, \"%s\", %lld) == %lld && strcmp(buf, \"%s\")\nmbedtls_snprint(...) = %d",
126+ (long long) n + 1, format, (long long) x, (long long) n, result, retval);
127+ if (retval >= 0) {
128+ written += mbedtls_snprintf(test + written, sizeof(test) - written - 1, "\nbuf = \"");
129+ if (retval <= (int) n) {
130+ written += mbedtls_snprintf(test + written, sizeof(test) - written - 1, "%s", output);
131+ } else {
132+ if ((size_t) sizeof_x <= sizeof(int)) {
133+ written += mbedtls_snprintf(test + written, sizeof(test) - written - 1, format, (int)x);
134+ } else if (sizeof_x == sizeof(long)) {
135+ written += mbedtls_snprintf(test + written, sizeof(test) - written - 1, format, (long)x);
136+ } else if (sizeof_x == sizeof(long long)) {
137+ written += mbedtls_snprintf(test + written, sizeof(test) - written - 1, format, (long long)x);
138+ }
139+ }
140+ written += mbedtls_snprintf(test + written, sizeof(test) - written - 1, "\"");
141+ }
142+ TEST_FAIL(test);
143+ }
119144
120145exit:
121146 mbedtls_free(output);
0 commit comments