diff --git a/general/g.setproj/main.c b/general/g.setproj/main.c index 2f6c10b0a01..716b5c5d31a 100644 --- a/general/g.setproj/main.c +++ b/general/g.setproj/main.c @@ -209,8 +209,9 @@ int main(int argc, char *argv[]) 1)) { char lbuf[100], lbufa[100]; - if (exist && (G_get_datumparams_from_projinfo(old_proj_keys, lbuf, - lbufa) == 2)) { + if (exist && + (G_get_datumparams_from_projinfo(old_proj_keys, lbuf, sizeof(lbuf), + lbufa, sizeof(lbufa)) == 2)) { G_strip(lbuf); if ((i = G_get_datum_by_name(lbuf)) > 0) { G_message(_("The current datum is %s (%s)"), G_datum_name(i), diff --git a/include/grass/defs/gis.h b/include/grass/defs/gis.h index 498418fb01e..9fb1bb25c73 100644 --- a/include/grass/defs/gis.h +++ b/include/grass/defs/gis.h @@ -299,7 +299,8 @@ int G_get_datum_by_name(const char *); const char *G_datum_name(int); const char *G_datum_description(int); const char *G_datum_ellipsoid(int); -int G_get_datumparams_from_projinfo(const struct Key_Value *, char *, char *); +int G_get_datumparams_from_projinfo(const struct Key_Value *, char *, size_t, + char *, size_t); void G_read_datum_table(void); /* debug.c */ diff --git a/lib/gis/datum.c b/lib/gis/datum.c index 3c2d74ca981..cb0627be983 100644 --- a/lib/gis/datum.c +++ b/lib/gis/datum.c @@ -81,16 +81,19 @@ const char *G_datum_ellipsoid(int n) } /*********************************************************** - * G_get_datumparams_from_projinfo(projinfo, datumname, params) + * G_get_datumparams_from_projinfo(projinfo, datumname, datumname_size, + * params, params_size) * struct Key_Value *projinfo Set of key_value pairs containing * projection information in PROJ_INFO file * format * char *datumname Pointer into which a string containing * the datum name (if present) will be * placed. + * size_t datumname_size Size in bytes of the datumname buffer. * char *params Pointer into which a string containing * the datum parameters (if present) will * be placed. + * size_t params_size Size in bytes of the params buffer. * * Extract the datum transformation-related parameters from a * set of general PROJ_INFO parameters. @@ -102,33 +105,39 @@ const char *G_datum_ellipsoid(int n) ************************************************************/ int G_get_datumparams_from_projinfo(const struct Key_Value *projinfo, - char *datumname, char *params) + char *datumname, size_t datumname_size, + char *params, size_t params_size) { int returnval = -1; if (NULL != G_find_key_value("datum", projinfo)) { - sprintf(datumname, "%s", G_find_key_value("datum", projinfo)); + snprintf(datumname, datumname_size, "%s", + G_find_key_value("datum", projinfo)); returnval = 1; } if (G_find_key_value("datumparams", projinfo) != NULL) { - sprintf(params, "%s", G_find_key_value("datumparams", projinfo)); + snprintf(params, params_size, "%s", + G_find_key_value("datumparams", projinfo)); returnval = 2; } else if (G_find_key_value("nadgrids", projinfo) != NULL) { - sprintf(params, "nadgrids=%s", G_find_key_value("nadgrids", projinfo)); + snprintf(params, params_size, "nadgrids=%s", + G_find_key_value("nadgrids", projinfo)); returnval = 2; } else if (G_find_key_value("towgs84", projinfo) != NULL) { - sprintf(params, "towgs84=%s", G_find_key_value("towgs84", projinfo)); + snprintf(params, params_size, "towgs84=%s", + G_find_key_value("towgs84", projinfo)); returnval = 2; } else if (G_find_key_value("dx", projinfo) != NULL && G_find_key_value("dy", projinfo) != NULL && G_find_key_value("dz", projinfo) != NULL) { - sprintf(params, "towgs84=%s,%s,%s", G_find_key_value("dx", projinfo), - G_find_key_value("dy", projinfo), - G_find_key_value("dz", projinfo)); + snprintf(params, params_size, "towgs84=%s,%s,%s", + G_find_key_value("dx", projinfo), + G_find_key_value("dy", projinfo), + G_find_key_value("dz", projinfo)); returnval = 2; } diff --git a/lib/gis/proj3.c b/lib/gis/proj3.c index 4c1491452c4..640d8f3f4b3 100644 --- a/lib/gis/proj3.c +++ b/lib/gis/proj3.c @@ -193,7 +193,8 @@ const char *G_database_datum_name(void) else if (!proj_info) return NULL; else - datumstatus = G_get_datumparams_from_projinfo(proj_info, buf, params); + datumstatus = G_get_datumparams_from_projinfo( + proj_info, buf, sizeof(buf), params, sizeof(params)); if (datumstatus == 2) return G_store(params);