diff --git a/met/src/basic/vx_log/concat_string.cc b/met/src/basic/vx_log/concat_string.cc index 36ea8b17a1..03669e9e28 100644 --- a/met/src/basic/vx_log/concat_string.cc +++ b/met/src/basic/vx_log/concat_string.cc @@ -231,7 +231,10 @@ void ConcatString::assign(const ConcatString & c) if (c.text()) s->assign(c.text()); else s->clear(); - memcpy(FloatFormat, c.FloatFormat, sizeof(FloatFormat)); + int buf_size = sizeof(c.FloatFormat); + if (buf_size > concat_string_buf_size) buf_size = concat_string_buf_size; + + memcpy(FloatFormat, c.FloatFormat, buf_size); Precision = c.Precision; } @@ -337,9 +340,12 @@ if ( (k < 0) || (k > concat_string_max_precision) ) { if (Precision != k) { Precision = k; - memset(FloatFormat, 0, sizeof(FloatFormat)); + int buf_size = sizeof(FloatFormat); + if (buf_size > concat_string_buf_size) buf_size = concat_string_buf_size; + + memset(FloatFormat, 0, buf_size); - snprintf(FloatFormat, sizeof(FloatFormat), "%%.%df", Precision); + snprintf(FloatFormat, buf_size, "%%.%df", Precision); } return; diff --git a/met/src/basic/vx_log/concat_string.h b/met/src/basic/vx_log/concat_string.h index df41cbf78e..59dec5f4f6 100644 --- a/met/src/basic/vx_log/concat_string.h +++ b/met/src/basic/vx_log/concat_string.h @@ -47,6 +47,7 @@ static const int max_str_len = 512; static const int concat_string_default_precision = 5; static const int concat_string_max_precision = 12; +static const int concat_string_buf_size = concat_string_max_precision + 4; //////////////////////////////////////////////////////////////////////// @@ -73,7 +74,7 @@ class ConcatString { int Precision; - char FloatFormat[16]; + char FloatFormat[concat_string_buf_size]; std::string *s; diff --git a/met/src/basic/vx_util/ascii_table.cc b/met/src/basic/vx_util/ascii_table.cc index fccfede13b..343a5aad23 100644 --- a/met/src/basic/vx_util/ascii_table.cc +++ b/met/src/basic/vx_util/ascii_table.cc @@ -271,8 +271,12 @@ BadDataValue = a.BadDataValue; set_bad_data_str(a.BadDataStr); -memcpy(f_FloatFormat, a.f_FloatFormat, sizeof(f_FloatFormat)); -memcpy(g_FloatFormat, a.g_FloatFormat, sizeof(g_FloatFormat)); +int f_buf_size = sizeof(a.f_FloatFormat); +int g_buf_size = sizeof(a.g_FloatFormat); +if (f_buf_size > ascii_table_buf_size) f_buf_size = ascii_table_buf_size; +if (g_buf_size > ascii_table_buf_size) g_buf_size = ascii_table_buf_size; +memcpy(f_FloatFormat, a.f_FloatFormat, f_buf_size); +memcpy(g_FloatFormat, a.g_FloatFormat, g_buf_size); DoCommaString = a.DoCommaString; @@ -697,11 +701,15 @@ if ( (k < 0) || (k > ascii_table_max_precision) ) { Precision = k; -memset(f_FloatFormat, 0, sizeof(f_FloatFormat)); -memset(g_FloatFormat, 0, sizeof(g_FloatFormat)); +int f_buf_size = sizeof(f_FloatFormat); +int g_buf_size = sizeof(g_FloatFormat); +if (f_buf_size > ascii_table_buf_size) f_buf_size = ascii_table_buf_size; +if (g_buf_size > ascii_table_buf_size) g_buf_size = ascii_table_buf_size; +memset(f_FloatFormat, 0, f_buf_size); +memset(g_FloatFormat, 0, g_buf_size); -snprintf(f_FloatFormat, sizeof(f_FloatFormat), "%%.%df", Precision); -snprintf(g_FloatFormat, sizeof(g_FloatFormat), "%%.%dg", Precision); +snprintf(f_FloatFormat, f_buf_size, "%%.%df", Precision); +snprintf(g_FloatFormat, g_buf_size, "%%.%dg", Precision); return; diff --git a/met/src/basic/vx_util/ascii_table.h b/met/src/basic/vx_util/ascii_table.h index a0f32056fd..c13c67c904 100644 --- a/met/src/basic/vx_util/ascii_table.h +++ b/met/src/basic/vx_util/ascii_table.h @@ -112,6 +112,7 @@ static const bool default_fill_blank = false; static const int ascii_table_default_precision = 2; static const int ascii_table_max_precision = 12; +static const int ascii_table_buf_size = ascii_table_max_precision + 4; static const double ascii_table_default_bad_data_value = -9999.0; @@ -163,8 +164,8 @@ class AsciiTable { std::string BadDataStr; - char f_FloatFormat[16]; - char g_FloatFormat[16]; + char f_FloatFormat[ascii_table_buf_size]; + char g_FloatFormat[ascii_table_buf_size]; bool DoCommaString; // do comma string? diff --git a/met/src/basic/vx_util/observation.h b/met/src/basic/vx_util/observation.h index f9230e2dfe..58d9e29285 100644 --- a/met/src/basic/vx_util/observation.h +++ b/met/src/basic/vx_util/observation.h @@ -22,6 +22,7 @@ #include #include "config.h" +#include "util_constants.h" #ifdef ENABLE_PYTHON #include "vx_python3_utils.h" @@ -223,7 +224,7 @@ class Observation { struct tm *time_struct = gmtime(&unix_time); - char time_string[80]; + char time_string[tmp_buf_size]; snprintf(time_string, sizeof(time_string), "%04d%02d%02d_%02d%02d%02d", @@ -240,7 +241,7 @@ class Observation string start_time_string = _getTimeString(start_time); string end_time_string = _getTimeString(end_time); - char time_string[80]; + char time_string[tmp_buf_size]; snprintf(time_string, sizeof(time_string), "%s-%s", diff --git a/met/src/basic/vx_util/util_constants.h b/met/src/basic/vx_util/util_constants.h index 4a40628fa3..b59e7dc46a 100644 --- a/met/src/basic/vx_util/util_constants.h +++ b/met/src/basic/vx_util/util_constants.h @@ -93,6 +93,7 @@ static const int boot_perc_flag = 1; //////////////////////////////////////////////////////////////////////// static const int max_line_len = 2048; +static const int tmp_buf_size = 512; static const double grib_earth_radius_km = 6371.20; static const int default_nc_compression = 0; static const int default_precision = 5; diff --git a/met/src/libcode/vx_afm/afm_keywords.h b/met/src/libcode/vx_afm/afm_keywords.h index 026f0ca0c5..70c141bdef 100644 --- a/met/src/libcode/vx_afm/afm_keywords.h +++ b/met/src/libcode/vx_afm/afm_keywords.h @@ -83,7 +83,13 @@ struct AfmKeywordInfo { //////////////////////////////////////////////////////////////////////// -static const AfmKeywordInfo kw_info[42] = { +static const int n_kw_infos = 42; + + +//////////////////////////////////////////////////////////////////////// + + +static const AfmKeywordInfo kw_info[n_kw_infos] = { { "StartFontMetrics", afm_keyword_StartFontMetrics }, { "EndFontMetrics", afm_keyword_EndFontMetrics }, @@ -134,12 +140,6 @@ static const AfmKeywordInfo kw_info[42] = { //////////////////////////////////////////////////////////////////////// -static const int n_kw_infos = 42; - - -//////////////////////////////////////////////////////////////////////// - - extern int is_afm_keyword (ConcatString text, AfmKeyword &); diff --git a/met/src/libcode/vx_color/color.h b/met/src/libcode/vx_color/color.h index 746b3610bb..986287aa6c 100644 --- a/met/src/libcode/vx_color/color.h +++ b/met/src/libcode/vx_color/color.h @@ -200,6 +200,7 @@ extern ostream & operator<<(ostream &, const CtableEntry &); static const int ctable_alloc_inc = 30; +static const int fudge_size = 256; //////////////////////////////////////////////////////////////////////// @@ -226,7 +227,7 @@ class ColorTable { double Gamma; - unsigned char fudge[256]; + unsigned char fudge[fudge_size]; public: diff --git a/met/src/libcode/vx_color/color_table.cc b/met/src/libcode/vx_color/color_table.cc index ed6f66843b..46157de13f 100644 --- a/met/src/libcode/vx_color/color_table.cc +++ b/met/src/libcode/vx_color/color_table.cc @@ -332,7 +332,7 @@ Nalloc = 0; int j; -for (j=0; j<256; ++j) { +for (j=0; j max_decimal_places) ) { DecimalPlaces = k; -snprintf(double_format, sizeof(double_format), "%%.%df", DecimalPlaces); // example: "%.5f" +int buf_size = sizeof(double_format); +if (buf_size > filter_buf_size) buf_size = filter_buf_size; +snprintf(double_format, buf_size, "%%.%df", DecimalPlaces); // example: "%.5f" return; diff --git a/met/src/libcode/vx_render/ps_filter.h b/met/src/libcode/vx_render/ps_filter.h index 23b3100de4..00bacc0e25 100644 --- a/met/src/libcode/vx_render/ps_filter.h +++ b/met/src/libcode/vx_render/ps_filter.h @@ -44,6 +44,7 @@ static const int FlateEncode = 4; static const int max_filters = 10; +static const int filter_buf_size = 32; //////////////////////////////////////////////////////////////////////// @@ -60,7 +61,7 @@ class PSFilter { int DecimalPlaces; - char double_format[32]; + char double_format[filter_buf_size]; virtual void eat(unsigned char); diff --git a/met/src/libcode/vx_summary/summary_obs.h b/met/src/libcode/vx_summary/summary_obs.h index 67b2aa353f..284b67b388 100644 --- a/met/src/libcode/vx_summary/summary_obs.h +++ b/met/src/libcode/vx_summary/summary_obs.h @@ -19,6 +19,7 @@ #include "observation.h" #include "summary_calc.h" #include "time_summary_interval.h" +#include "util_constants.h" //////////////////////////////////////////////////////////////////////// @@ -135,7 +136,7 @@ class SummaryObs // Create the string - char string_buffer[20]; + char string_buffer[tmp_buf_size]; snprintf(string_buffer, sizeof(string_buffer), "%02d%02d%02d", hour, minute, second); @@ -222,7 +223,7 @@ class SummaryObs { struct tm *time_struct = gmtime(&unix_time); - char time_string[80]; + char time_string[tmp_buf_size]; snprintf(time_string, sizeof(time_string), "%04d%02d%02d_%02d%02d%02d", @@ -239,11 +240,11 @@ class SummaryObs memset(&time_struct, 0, sizeof(time_struct)); time_struct.tm_year = atoi(time_string.substr(0, 4).c_str()) - 1900; - time_struct.tm_mon = atoi(time_string.substr(4, 2).c_str()) - 1; + time_struct.tm_mon = atoi(time_string.substr(4, 2).c_str()) - 1; time_struct.tm_mday = atoi(time_string.substr(6, 2).c_str()); time_struct.tm_hour = atoi(time_string.substr(9, 2).c_str()); - time_struct.tm_min = atoi(time_string.substr(11, 2).c_str()); - time_struct.tm_sec = atoi(time_string.substr(13, 2).c_str()); + time_struct.tm_min = atoi(time_string.substr(11, 2).c_str()); + time_struct.tm_sec = atoi(time_string.substr(13, 2).c_str()); return timegm(&time_struct); } diff --git a/met/src/libcode/vx_time_series/compute_swinging_door.h b/met/src/libcode/vx_time_series/compute_swinging_door.h index 9c990fe231..052ce0a789 100644 --- a/met/src/libcode/vx_time_series/compute_swinging_door.h +++ b/met/src/libcode/vx_time_series/compute_swinging_door.h @@ -118,7 +118,7 @@ class SDObservation { struct tm *time_struct = gmtime(&unix_time); - char time_string[80]; + char time_string[tmp_buf_size]; snprintf(time_string, sizeof(time_string), "%04d%02d%02d_%02d%02d%02d", diff --git a/met/src/tools/other/gsi_tools/rad_record.cc b/met/src/tools/other/gsi_tools/rad_record.cc index 4ce91f1202..a87b453853 100644 --- a/met/src/tools/other/gsi_tools/rad_record.cc +++ b/met/src/tools/other/gsi_tools/rad_record.cc @@ -404,23 +404,23 @@ if ( n_read < 72 ) { unsigned char * b = buf; -my_memcpy( &(R_params.isis), b, 20); -my_memcpy( &(R_params.dplat), b, 10); -my_memcpy( &(R_params.obstype), b, 10); +my_memcpy( &(R_params.isis), b, rad_isis_len); +my_memcpy( &(R_params.dplat), b, rad_dplat_len); +my_memcpy( &(R_params.obstype), b, rad_obstype_len); -my_memcpy( &(R_params.jiter), b, 4); -my_memcpy( &(R_params.nchanl), b, 4); -my_memcpy( &(R_params.npred), b, 4); -my_memcpy( &(R_params.idate), b, 4); -my_memcpy( &(R_params.ireal), b, 4); -my_memcpy( &(R_params.ipchan), b, 4); -my_memcpy( &(R_params.iextra), b, 4); -my_memcpy( &(R_params.jextra), b, 4); +my_memcpy( &(R_params.jiter), b, rad_int_len); +my_memcpy( &(R_params.nchanl), b, rad_int_len); +my_memcpy( &(R_params.npred), b, rad_int_len); +my_memcpy( &(R_params.idate), b, rad_int_len); +my_memcpy( &(R_params.ireal), b, rad_int_len); +my_memcpy( &(R_params.ipchan), b, rad_int_len); +my_memcpy( &(R_params.iextra), b, rad_int_len); +my_memcpy( &(R_params.jextra), b, rad_int_len); -my_memcpy( &(R_params.idiag), b, 4); -my_memcpy( &(R_params.angord), b, 4); -my_memcpy( &(R_params.iversion), b, 4); -my_memcpy( &(R_params.inewpc), b, 4); +my_memcpy( &(R_params.idiag), b, rad_int_len); +my_memcpy( &(R_params.angord), b, rad_int_len); +my_memcpy( &(R_params.iversion), b, rad_int_len); +my_memcpy( &(R_params.inewpc), b, rad_int_len); if ( SwapEndian ) { @@ -483,14 +483,14 @@ if ( n_read != 32 ) { unsigned char * b = buf; -my_memcpy( &(cp.freq), b, 4); -my_memcpy( &(cp.plo), b, 4); -my_memcpy( &(cp.wave), b, 4); -my_memcpy( &(cp.varch), b, 4); -my_memcpy( &(cp.tlap), b, 4); -my_memcpy( &(cp.iuse), b, 4); -my_memcpy( &(cp.nuchan), b, 4); -my_memcpy( &(cp.ich), b, 4); +my_memcpy( &(cp.freq), b, rad_int_len); +my_memcpy( &(cp.plo), b, rad_int_len); +my_memcpy( &(cp.wave), b, rad_int_len); +my_memcpy( &(cp.varch), b, rad_int_len); +my_memcpy( &(cp.tlap), b, rad_int_len); +my_memcpy( &(cp.iuse), b, rad_int_len); +my_memcpy( &(cp.nuchan), b, rad_int_len); +my_memcpy( &(cp.ich), b, rad_int_len); if ( SwapEndian ) { diff --git a/met/src/tools/other/gsi_tools/rad_record.h b/met/src/tools/other/gsi_tools/rad_record.h index c26d768514..f13ac496c8 100644 --- a/met/src/tools/other/gsi_tools/rad_record.h +++ b/met/src/tools/other/gsi_tools/rad_record.h @@ -22,14 +22,21 @@ #include "vx_cal.h" +//////////////////////////////////////////////////////////////////////// + +static const int rad_obstype_len = 10; +static const int rad_dplat_len = 10; +static const int rad_isis_len = 20; +static const int rad_int_len = 4; + //////////////////////////////////////////////////////////////////////// struct RadParams { - char obstype [11]; - char dplat [11]; - char isis [21]; + char obstype [rad_obstype_len+1]; + char dplat [rad_dplat_len + 1]; + char isis [rad_isis_len + 1]; int jiter; int nchanl;