[PATCH 1/4] xkb: Use snprintf to measure string lengths instead of manual strlen math
Peter Hutterer
peter.hutterer at who-t.net
Mon Feb 14 16:36:36 PST 2011
On Sun, Feb 13, 2011 at 09:36:02PM -0800, Alan Coopersmith wrote:
> Signed-off-by: Alan Coopersmith <alan.coopersmith at oracle.com>
> ---
> xkb/ddxLoad.c | 21 +++++++++++----------
> xkb/maprules.c | 3 +--
> 2 files changed, 12 insertions(+), 12 deletions(-)
>
> diff --git a/xkb/ddxLoad.c b/xkb/ddxLoad.c
> index 51b5777..9686ea8 100644
> --- a/xkb/ddxLoad.c
> +++ b/xkb/ddxLoad.c
> @@ -303,15 +303,16 @@ FILE * file;
> &&(!isalpha(xkm_output_dir[0]) || xkm_output_dir[1]!=':')
> #endif
> ) {
> - if (strlen(XkbBaseDirectory)+strlen(xkm_output_dir)
> - +strlen(mapName)+6 <= PATH_MAX)
> - {
> - sprintf(buf,"%s/%s%s.xkm",XkbBaseDirectory,
> - xkm_output_dir,mapName);
> - }
> + if (snprintf(buf, PATH_MAX, "%s/%s%s.xkm", XkbBaseDirectory,
> + xkm_output_dir, mapName) >= PATH_MAX)
> + buf[0] = '\0';
> + }
> + else
> + {
> + if (snprintf(buf, PATH_MAX, "%s%s.xkm", xkm_output_dir, mapName)
> + >= PATH_MAX)
> + buf[0] = '\0';
> }
> - else if (strlen(xkm_output_dir)+strlen(mapName)+5 <= PATH_MAX)
> - sprintf(buf,"%s%s.xkm",xkm_output_dir,mapName);
> if (buf[0] != '\0')
> file= fopen(buf,"rb");
> else file= NULL;
> @@ -388,11 +389,11 @@ XkbRF_RulesPtr rules;
> if (!rules_name)
> return FALSE;
>
> - if (strlen(XkbBaseDirectory) + strlen(rules_name) + 8 > PATH_MAX) {
> + if (snprintf(buf, PATH_MAX, "%s/rules/%s", XkbBaseDirectory, rules_name)
> + >= PATH_MAX) {
> LogMessage(X_ERROR, "XKB: Rules name is too long\n");
> return FALSE;
> }
> - sprintf(buf,"%s/rules/%s", XkbBaseDirectory, rules_name);
>
> file = fopen(buf, "r");
> if (!file) {
> diff --git a/xkb/maprules.c b/xkb/maprules.c
> index c683c0d..0c91cdc 100644
> --- a/xkb/maprules.c
> +++ b/xkb/maprules.c
> @@ -945,9 +945,8 @@ Bool ok;
> if ((!base)||(!rules))
> return FALSE;
> if (locale) {
> - if (strlen(base)+strlen(locale)+2 > PATH_MAX)
> + if (snprintf(buf, PATH_MAX, "%s-%s", base, locale) >= PATH_MAX)
> return FALSE;
> - sprintf(buf,"%s-%s", base, locale);
> }
> else {
> if (strlen(base)+1 > PATH_MAX)
> --
> 1.7.3.2
thanks, merged this series into my tree.
Cheers,
Peter
More information about the xorg-devel
mailing list