@@ -74,8 +74,8 @@ namespace number_tests {
7474 uint64_t maxulp = 0 ;
7575 for (int i = -1075 ; i < 1024 ; ++i) {// large negative values should be zero.
7676 double expected = pow (2 , i);
77- auto n = sprintf (buf, " %.*e" , std::numeric_limits<double >::max_digits10 - 1 , expected);
78- buf[n] = ' \0 ' ;
77+ size_t n = snprintf (buf, sizeof (buf) , " %.*e" , std::numeric_limits<double >::max_digits10 - 1 , expected);
78+ if (n >= sizeof (buf)) { abort (); }
7979 fflush (NULL );
8080 auto [actual, error] = parser.parse (buf, n).get <double >();
8181 if (error) { std::cerr << error << std::endl; return false ; }
@@ -167,8 +167,8 @@ namespace number_tests {
167167 char buf[1024 ];
168168 simdjson::dom::parser parser;
169169 for (int i = -1000000 ; i <= 308 ; ++i) {// large negative values should be zero.
170- auto n = sprintf (buf," 1e%d" , i);
171- buf[n] = ' \0 ' ;
170+ size_t n = snprintf (buf, sizeof (buf), " 1e%d" , i);
171+ if (n >= sizeof (buf)) { abort (); }
172172 fflush (NULL );
173173
174174 auto [actual, error] = parser.parse (buf, n).get <double >();
@@ -275,19 +275,22 @@ namespace document_tests {
275275 std::vector<std::string> data;
276276 char buf[1024 ];
277277 for (size_t i = 0 ; i < n_records; ++i) {
278- auto n = sprintf (buf,
278+ size_t n = snprintf (buf, sizeof (buf) ,
279279 " {\" id\" : %zu, \" name\" : \" name%zu\" , \" gender\" : \" %s\" , "
280280 " \" school\" : {\" id\" : %zu, \" name\" : \" school%zu\" }}" ,
281281 i, i, (i % 2 ) ? " male" : " female" , i % 10 , i % 10 );
282+ if (n >= sizeof (buf)) { abort (); }
282283 data.emplace_back (std::string (buf, n));
283284 }
284285 for (size_t i = 0 ; i < n_records; ++i) {
285- auto n = sprintf (buf, " {\" counter\" : %f, \" array\" : [%s]}" , static_cast <double >(i) * 3.1416 ,
286- (i % 2 ) ? " true" : " false" );
286+ size_t n = snprintf (buf, sizeof (buf), " {\" counter\" : %f, \" array\" : [%s]}" , static_cast <double >(i) * 3.1416 ,
287+ (i % 2 ) ? " true" : " false" );
288+ if (n >= sizeof (buf)) { abort (); }
287289 data.emplace_back (std::string (buf, n));
288290 }
289291 for (size_t i = 0 ; i < n_records; ++i) {
290- auto n = sprintf (buf, " {\" number\" : %e}" , static_cast <double >(i) * 10000.31321321 );
292+ size_t n = snprintf (buf, sizeof (buf), " {\" number\" : %e}" , static_cast <double >(i) * 10000.31321321 );
293+ if (n >= sizeof (buf)) { abort (); }
291294 data.emplace_back (std::string (buf, n));
292295 }
293296 data.emplace_back (std::string (" true" ));
@@ -396,10 +399,12 @@ namespace document_stream_tests {
396399 std::string data;
397400 char buf[1024 ];
398401 for (size_t i = 0 ; i < n_records; ++i) {
399- auto n = sprintf (buf,
402+ size_t n = snprintf (buf,
403+ sizeof (buf),
400404 " {\" id\" : %zu, \" name\" : \" name%zu\" , \" gender\" : \" %s\" , "
401405 " \" ete\" : {\" id\" : %zu, \" name\" : \" eventail%zu\" }}" ,
402406 i, i, (i % 2 ) ? " homme" : " femme" , i % 10 , i % 10 );
407+ if (n >= sizeof (buf)) { abort (); }
403408 data += std::string (buf, n);
404409 }
405410 for (size_t batch_size = 1000 ; batch_size < 2000 ; batch_size += (batch_size>1050 ?10 :1 )) {
@@ -444,10 +449,12 @@ namespace document_stream_tests {
444449 std::string data;
445450 char buf[1024 ];
446451 for (size_t i = 0 ; i < n_records; ++i) {
447- auto n = sprintf (buf,
452+ size_t n = snprintf (buf,
453+ sizeof (buf),
448454 " {\" id\" : %zu, \" name\" : \" name%zu\" , \" gender\" : \" %s\" , "
449455 " \" été\" : {\" id\" : %zu, \" name\" : \" éventail%zu\" }}" ,
450456 i, i, (i % 2 ) ? " ⺃" : " ⺕" , i % 10 , i % 10 );
457+ if (n >= sizeof (buf)) { abort (); }
451458 data += std::string (buf, n);
452459 }
453460 for (size_t batch_size = 1000 ; batch_size < 2000 ; batch_size += (batch_size>1050 ?10 :1 )) {
0 commit comments