@@ -414,27 +414,31 @@ static inline int
414414quad_to_string_same_value_check (const quad_value *in_val, const char *str_buf, npy_intp str_len,
415415 QuadBackendType backend)
416416{
417- char *truncated_str = (char *)malloc (str_len + 1 );
418- if (truncated_str == NULL ) {
419- PyErr_NoMemory ();
420- return -1 ;
417+ // str_len will never exceed QUAD_STR_WIDTH (50).
418+ char stack_buf[QUAD_STR_WIDTH + 1 ];
419+ const char *parse_str;
420+
421+ if (str_buf[str_len] == ' \0 ' ) {
422+ // String already properly terminated at str_len, use directly
423+ parse_str = str_buf;
424+ }
425+ else {
426+ // truncated string check
427+ memcpy (stack_buf, str_buf, str_len);
428+ stack_buf[str_len] = ' \0 ' ;
429+ parse_str = stack_buf;
421430 }
422- memcpy (truncated_str, str_buf, str_len);
423- truncated_str[str_len] = ' \0 ' ;
424431
425- // Parse the truncated string back to quad
426432 quad_value roundtrip;
427433 char *endptr;
428434
429- int err = NumPyOS_ascii_strtoq (truncated_str , backend, &roundtrip, &endptr);
435+ int err = NumPyOS_ascii_strtoq (parse_str , backend, &roundtrip, &endptr);
430436 if (err < 0 ) {
431437 PyErr_Format (PyExc_ValueError,
432438 " QuadPrecision value cannot be represented exactly: string '%s' failed to parse back" ,
433- truncated_str);
434- free (truncated_str);
439+ parse_str);
435440 return -1 ;
436441 }
437- free (truncated_str);
438442
439443 // Compare original and roundtripped values along with signbit
440444 if (backend == BACKEND_SLEEF) {
0 commit comments