diff --git a/src/dump_atom.cpp b/src/dump_atom.cpp index dfacf8f2da..2238a3a81d 100644 --- a/src/dump_atom.cpp +++ b/src/dump_atom.cpp @@ -674,7 +674,9 @@ int DumpAtom::convert_image(int n, double *mybuf) memory->grow(sbuf,maxsbuf,"dump:sbuf"); } - offset += sprintf(&sbuf[offset],format, + offset += snprintf(&sbuf[offset], + maxsbuf - offset, + format, static_cast (mybuf[m]), static_cast (mybuf[m+1]), mybuf[m+2],mybuf[m+3],mybuf[m+4], @@ -700,7 +702,9 @@ int DumpAtom::convert_noimage(int n, double *mybuf) memory->grow(sbuf,maxsbuf,"dump:sbuf"); } - offset += sprintf(&sbuf[offset],format, + offset += snprintf(&sbuf[offset], + maxsbuf - offset, + format, static_cast (mybuf[m]), static_cast (mybuf[m+1]), mybuf[m+2],mybuf[m+3],mybuf[m+4]); diff --git a/src/dump_cfg.cpp b/src/dump_cfg.cpp index e5af83a3c6..0d22ece2c3 100644 --- a/src/dump_cfg.cpp +++ b/src/dump_cfg.cpp @@ -166,23 +166,24 @@ int DumpCFG::convert_string(int n, double *mybuf) } for (j = 0; j < size_one; j++) { + const auto maxsize = maxsbuf - offset; if (j == 0) { - offset += sprintf(&sbuf[offset],"%f \n",mybuf[m]); + offset += snprintf(&sbuf[offset],maxsize,"%f \n",mybuf[m]); } else if (j == 1) { - offset += sprintf(&sbuf[offset],"%s \n",typenames[(int) mybuf[m]]); + offset += snprintf(&sbuf[offset],maxsize,"%s \n",typenames[(int) mybuf[m]]); } else if (j >= 2) { if (vtype[j] == Dump::INT) - offset += sprintf(&sbuf[offset],vformat[j],static_cast (mybuf[m])); + offset += snprintf(&sbuf[offset],maxsize,vformat[j],static_cast (mybuf[m])); else if (vtype[j] == Dump::DOUBLE) - offset += sprintf(&sbuf[offset],vformat[j],mybuf[m]); + offset += snprintf(&sbuf[offset],maxsize,vformat[j],mybuf[m]); else if (vtype[j] == Dump::STRING) - offset += sprintf(&sbuf[offset],vformat[j],typenames[(int) mybuf[m]]); + offset += snprintf(&sbuf[offset],maxsize,vformat[j],typenames[(int) mybuf[m]]); else if (vtype[j] == Dump::BIGINT) - offset += sprintf(&sbuf[offset],vformat[j],static_cast (mybuf[m])); + offset += snprintf(&sbuf[offset],maxsize,vformat[j],static_cast (mybuf[m])); } m++; } - offset += sprintf(&sbuf[offset],"\n"); + offset += snprintf(&sbuf[offset],maxsbuf-offset,"\n"); } } else if (unwrapflag == 1) { @@ -195,29 +196,30 @@ int DumpCFG::convert_string(int n, double *mybuf) } for (j = 0; j < size_one; j++) { + const auto maxsize = maxsbuf - offset; if (j == 0) { - offset += sprintf(&sbuf[offset],"%f \n",mybuf[m]); + offset += snprintf(&sbuf[offset],maxsize,"%f \n",mybuf[m]); } else if (j == 1) { - offset += sprintf(&sbuf[offset],"%s \n",typenames[(int) mybuf[m]]); + offset += snprintf(&sbuf[offset],maxsize,"%s \n",typenames[(int) mybuf[m]]); } else if (j >= 2 && j <= 4) { unwrap_coord = (mybuf[m] - 0.5)/UNWRAPEXPAND + 0.5; - offset += sprintf(&sbuf[offset],vformat[j],unwrap_coord); + offset += snprintf(&sbuf[offset],maxsize,vformat[j],unwrap_coord); } else if (j >= 5) { if (vtype[j] == Dump::INT) offset += - sprintf(&sbuf[offset],vformat[j],static_cast (mybuf[m])); + snprintf(&sbuf[offset],maxsize,vformat[j],static_cast (mybuf[m])); else if (vtype[j] == Dump::DOUBLE) - offset += sprintf(&sbuf[offset],vformat[j],mybuf[m]); + offset += snprintf(&sbuf[offset],maxsize,vformat[j],mybuf[m]); else if (vtype[j] == Dump::STRING) offset += - sprintf(&sbuf[offset],vformat[j],typenames[(int) mybuf[m]]); + snprintf(&sbuf[offset],maxsize,vformat[j],typenames[(int) mybuf[m]]); else if (vtype[j] == Dump::BIGINT) offset += - sprintf(&sbuf[offset],vformat[j],static_cast (mybuf[m])); + snprintf(&sbuf[offset],maxsize,vformat[j],static_cast (mybuf[m])); } m++; } - offset += sprintf(&sbuf[offset],"\n"); + offset += snprintf(&sbuf[offset],maxsbuf - offset,"\n"); } } diff --git a/src/dump_custom.cpp b/src/dump_custom.cpp index abdc46c55a..fdba2e5477 100644 --- a/src/dump_custom.cpp +++ b/src/dump_custom.cpp @@ -1358,20 +1358,21 @@ int DumpCustom::convert_string(int n, double *mybuf) } for (j = 0; j < nfield; j++) { + const auto maxsize = maxsbuf - offset; if (vtype[j] == Dump::INT) - offset += sprintf(&sbuf[offset],vformat[j],static_cast (mybuf[m])); + offset += snprintf(&sbuf[offset],maxsize,vformat[j],static_cast (mybuf[m])); else if (vtype[j] == Dump::DOUBLE) - offset += sprintf(&sbuf[offset],vformat[j],mybuf[m]); + offset += snprintf(&sbuf[offset],maxsize,vformat[j],mybuf[m]); else if (vtype[j] == Dump::STRING) - offset += sprintf(&sbuf[offset],vformat[j],typenames[(int) mybuf[m]]); + offset += snprintf(&sbuf[offset],maxsize,vformat[j],typenames[(int) mybuf[m]]); else if (vtype[j] == Dump::STRING2) - offset += sprintf(&sbuf[offset],vformat[j],atom->lmap->typelabel[(int) mybuf[m]-1].c_str()); + offset += snprintf(&sbuf[offset],maxsize,vformat[j],atom->lmap->typelabel[(int) mybuf[m]-1].c_str()); else if (vtype[j] == Dump::BIGINT) - offset += sprintf(&sbuf[offset],vformat[j], + offset += snprintf(&sbuf[offset],maxsize,vformat[j], static_cast (mybuf[m])); m++; } - offset += sprintf(&sbuf[offset],"\n"); + offset += snprintf(&sbuf[offset],maxsbuf-offset,"\n"); } return offset; @@ -1909,9 +1910,9 @@ int DumpCustom::modify_param(int narg, char **arg) if (ptr == nullptr) error->all(FLERR,"Dump_modify int format does not contain d character"); char str[8]; - sprintf(str,"%s",BIGINT_FORMAT); + snprintf(str,8,"%s",BIGINT_FORMAT); *ptr = '\0'; - sprintf(format_bigint_user,"%s%s%s",format_int_user,&str[1],ptr+1); + snprintf(format_bigint_user,n,"%s%s%s",format_int_user,&str[1],ptr+1); *ptr = 'd'; } else if (strcmp(arg[1],"float") == 0) { diff --git a/src/dump_grid.cpp b/src/dump_grid.cpp index ac42a85b01..b052712e95 100644 --- a/src/dump_grid.cpp +++ b/src/dump_grid.cpp @@ -590,15 +590,16 @@ int DumpGrid::convert_string(int n, double *mybuf) } for (j = 0; j < nfield; j++) { + const auto maxsize = maxsbuf - offset; if (vtype[j] == Dump::INT) - offset += sprintf(&sbuf[offset],vformat[j],static_cast (mybuf[m])); + offset += snprintf(&sbuf[offset],maxsize,vformat[j],static_cast (mybuf[m])); else if (vtype[j] == Dump::DOUBLE) - offset += sprintf(&sbuf[offset],vformat[j],mybuf[m]); + offset += snprintf(&sbuf[offset],maxsize,vformat[j],mybuf[m]); else if (vtype[j] == Dump::BIGINT) - offset += sprintf(&sbuf[offset],vformat[j], static_cast (mybuf[m])); + offset += snprintf(&sbuf[offset],maxsize,vformat[j], static_cast (mybuf[m])); m++; } - offset += sprintf(&sbuf[offset],"\n"); + offset += snprintf(&sbuf[offset],maxsbuf-offset,"\n"); } return offset; @@ -776,9 +777,9 @@ int DumpGrid::modify_param(int narg, char **arg) if (ptr == nullptr) error->all(FLERR,"Dump_modify int format does not contain d character"); char str[8]; - sprintf(str,"%s",BIGINT_FORMAT); + snprintf(str,8,"%s",BIGINT_FORMAT); *ptr = '\0'; - sprintf(format_bigint_user,"%s%s%s",format_int_user,&str[1],ptr+1); + snprintf(format_bigint_user,n,"%s%s%s",format_int_user,&str[1],ptr+1); *ptr = 'd'; } else if (strcmp(arg[1],"float") == 0) { diff --git a/src/dump_local.cpp b/src/dump_local.cpp index 8d546634b6..bcf2a3a757 100644 --- a/src/dump_local.cpp +++ b/src/dump_local.cpp @@ -264,9 +264,9 @@ int DumpLocal::modify_param(int narg, char **arg) if (ptr == nullptr) error->all(FLERR, "Dump_modify int format does not contain d character"); char str[8]; - sprintf(str,"%s",BIGINT_FORMAT); + snprintf(str,8,"%s",BIGINT_FORMAT); *ptr = '\0'; - sprintf(format_bigint_user,"%s%s%s",format_int_user,&str[1],ptr+1); + snprintf(format_bigint_user,n,"%s%s%s",format_int_user,&str[1],ptr+1); *ptr = 'd'; } else if (strcmp(arg[1],"float") == 0) { @@ -387,17 +387,18 @@ int DumpLocal::convert_string(int n, double *mybuf) } for (j = 0; j < size_one; j++) { + const auto maxsize = maxsbuf - offset; if (vtype[j] == Dump::INT) - offset += sprintf(&sbuf[offset],vformat[j],static_cast (mybuf[m])); + offset += snprintf(&sbuf[offset],maxsize,vformat[j],static_cast (mybuf[m])); else if (vtype[j] == Dump::DOUBLE) - offset += sprintf(&sbuf[offset],vformat[j],mybuf[m]); + offset += snprintf(&sbuf[offset],maxsize,vformat[j],mybuf[m]); else if (vtype[j] == Dump::BIGINT) - offset += sprintf(&sbuf[offset],vformat[j],static_cast (mybuf[m])); + offset += snprintf(&sbuf[offset],maxsize,vformat[j],static_cast (mybuf[m])); else - offset += sprintf(&sbuf[offset],vformat[j],mybuf[m]); + offset += snprintf(&sbuf[offset],maxsize,vformat[j],mybuf[m]); m++; } - offset += sprintf(&sbuf[offset],"\n"); + offset += snprintf(&sbuf[offset],maxsbuf-offset,"\n"); } return offset; diff --git a/src/dump_xyz.cpp b/src/dump_xyz.cpp index 018fa754d7..84a8ead6fd 100644 --- a/src/dump_xyz.cpp +++ b/src/dump_xyz.cpp @@ -85,7 +85,7 @@ void DumpXYZ::init_style() typenames = new char*[ntypes+1]; for (int itype = 1; itype <= ntypes; itype++) { typenames[itype] = new char[12]; - sprintf(typenames[itype],"%d",itype); + snprintf(typenames[itype],12,"%d",itype); } } @@ -206,7 +206,7 @@ int DumpXYZ::convert_string(int n, double *mybuf) memory->grow(sbuf,maxsbuf,"dump:sbuf"); } - offset += sprintf(&sbuf[offset], format, typenames[static_cast (mybuf[m+1])], + offset += snprintf(&sbuf[offset], maxsbuf-offset, format, typenames[static_cast (mybuf[m+1])], mybuf[m+2], mybuf[m+3], mybuf[m+4]); m += size_one; } diff --git a/src/variable.cpp b/src/variable.cpp index 823a68a506..f308ed6efc 100644 --- a/src/variable.cpp +++ b/src/variable.cpp @@ -1025,7 +1025,7 @@ char *Variable::retrieve(const char *name) error->all(FLERR, "Variable {}: format variable {} has incompatible style", names[ivar],data[ivar][0]); double answer = compute_equal(jvar); - sprintf(data[ivar][2],data[ivar][1],answer); + snprintf(data[ivar][2],VALUELENGTH,data[ivar][1],answer); str = data[ivar][2]; } else if (style[ivar] == GETENV) { diff --git a/unittest/fortran/wrap_extract_variable.cpp b/unittest/fortran/wrap_extract_variable.cpp index b1f79e149a..cf8b3bd5c0 100644 --- a/unittest/fortran/wrap_extract_variable.cpp +++ b/unittest/fortran/wrap_extract_variable.cpp @@ -121,7 +121,7 @@ TEST_F(LAMMPS_extract_variable, loop_pad) char str[10]; char *fstr; for (i = 1; i <= 10; i++) { - std::sprintf(str, "%02d", i); + std::snprintf(str, 10, "%02d", i); fstr = f_lammps_extract_variable_loop_pad(); EXPECT_STREQ(fstr, str); std::free(fstr); @@ -170,7 +170,7 @@ TEST_F(LAMMPS_extract_variable, format) char str[16]; char *fstr; for (i = 1; i <= 10; i++) { - std::sprintf(str, "%.6G", std::exp(i)); + std::snprintf(str, 16, "%.6G", std::exp(i)); fstr = f_lammps_extract_variable_format(); EXPECT_STREQ(fstr, str); std::free(fstr); @@ -185,7 +185,7 @@ TEST_F(LAMMPS_extract_variable, format_pad) char str[16]; char *fstr; for (i = 1; i <= 10; i++) { - std::sprintf(str, "%08.6G", std::exp(i)); + std::snprintf(str, 16, "%08.6G", std::exp(i)); fstr = f_lammps_extract_variable_format_pad(); EXPECT_STREQ(fstr, str); std::free(fstr);