From: Paul Eggert Date: Wed, 31 Aug 2011 05:50:49 +0000 (-0700) Subject: Avoid the use of snprintf. X-Git-Tag: emacs-pretest-24.0.90~104^2~153^2~1^2~6 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=61bfeeb79dee6b321cb9f2257aeec9d0c1fa5a2f;p=emacs.git Avoid the use of snprintf. * font.c (APPEND_SNPRINTF): Remove. (font_unparse_xlfd): * xterm.c (x_io_error_quitter): Use esnprintf, not snprintf. That way, we don't have to worry about porting to ancient platforms that lack snprintf. (x_term_init): Use sprintf, not snprintf. --- diff --git a/src/ChangeLog b/src/ChangeLog index 67ec3140cd4..d0f57593220 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,13 @@ +2011-08-31 Paul Eggert + + Avoid the use of snprintf. + * font.c (APPEND_SNPRINTF): Remove. + (font_unparse_xlfd): + * xterm.c (x_io_error_quitter): + Use esnprintf, not snprintf. That way, we don't have to worry + about porting to ancient platforms that lack snprintf. + (x_term_init): Use sprintf, not snprintf. + 2011-08-30 Paul Eggert sprintf-related integer and memory overflow issues (Bug#9412). diff --git a/src/font.c b/src/font.c index 1609a2cc9ff..a5b873aea51 100644 --- a/src/font.c +++ b/src/font.c @@ -1285,14 +1285,14 @@ font_unparse_xlfd (Lisp_Object font, int pixel_size, char *name, int nbytes) } else f[XLFD_AVGWIDTH_INDEX] = "*"; - len = snprintf (name, nbytes, "-%s-%s-%s-%s-%s-%s-%s-%s-%s-%s-%s", - f[XLFD_FOUNDRY_INDEX], f[XLFD_FAMILY_INDEX], - f[XLFD_WEIGHT_INDEX], f[XLFD_SLANT_INDEX], - f[XLFD_SWIDTH_INDEX], f[XLFD_ADSTYLE_INDEX], - f[XLFD_PIXEL_INDEX], f[XLFD_RESX_INDEX], - f[XLFD_SPACING_INDEX], f[XLFD_AVGWIDTH_INDEX], - f[XLFD_REGISTRY_INDEX]); - return len < nbytes ? len : -1; + len = esnprintf (name, nbytes, "-%s-%s-%s-%s-%s-%s-%s-%s-%s-%s-%s", + f[XLFD_FOUNDRY_INDEX], f[XLFD_FAMILY_INDEX], + f[XLFD_WEIGHT_INDEX], f[XLFD_SLANT_INDEX], + f[XLFD_SWIDTH_INDEX], f[XLFD_ADSTYLE_INDEX], + f[XLFD_PIXEL_INDEX], f[XLFD_RESX_INDEX], + f[XLFD_SPACING_INDEX], f[XLFD_AVGWIDTH_INDEX], + f[XLFD_REGISTRY_INDEX]); + return len == nbytes - 1 ? -1 : len; } /* Parse NAME (null terminated) and store information in FONT @@ -1592,39 +1592,32 @@ font_unparse_fcname (Lisp_Object font, int pixel_size, char *name, int nbytes) p = name; lim = name + nbytes; -# define APPEND_SNPRINTF(args) \ - do { \ - int len = snprintf args; \ - if (! (0 <= len && len < lim - p)) \ - return -1; \ - p += len; \ - } while (0) if (! NILP (family)) - APPEND_SNPRINTF ((p, lim - p, "%s", SSDATA (family))); + p += esnprintf (p, lim - p, "%s", SSDATA (family)); if (point_size > 0) - APPEND_SNPRINTF ((p, lim - p, "-%d" + (p == name), point_size)); + p += esnprintf (p, lim - p, "-%d" + (p == name), point_size); else if (pixel_size > 0) - APPEND_SNPRINTF ((p, lim - p, ":pixelsize=%d", pixel_size)); + p += esnprintf (p, lim - p, ":pixelsize=%d", pixel_size); if (! NILP (AREF (font, FONT_FOUNDRY_INDEX))) - APPEND_SNPRINTF ((p, lim - p, ":foundry=%s", - SSDATA (SYMBOL_NAME (AREF (font, - FONT_FOUNDRY_INDEX))))); + p += esnprintf (p, lim - p, ":foundry=%s", + SSDATA (SYMBOL_NAME (AREF (font, + FONT_FOUNDRY_INDEX)))); for (i = 0; i < 3; i++) if (! NILP (styles[i])) - APPEND_SNPRINTF ((p, lim - p, ":%s=%s", style_names[i], - SSDATA (SYMBOL_NAME (styles[i])))); + p += esnprintf (p, lim - p, ":%s=%s", style_names[i], + SSDATA (SYMBOL_NAME (styles[i]))); if (INTEGERP (AREF (font, FONT_DPI_INDEX))) - APPEND_SNPRINTF ((p, lim - p, ":dpi=%"pI"d", - XINT (AREF (font, FONT_DPI_INDEX)))); + p += esnprintf (p, lim - p, ":dpi=%"pI"d", + XINT (AREF (font, FONT_DPI_INDEX))); if (INTEGERP (AREF (font, FONT_SPACING_INDEX))) - APPEND_SNPRINTF ((p, lim - p, ":spacing=%"pI"d", - XINT (AREF (font, FONT_SPACING_INDEX)))); + p += esnprintf (p, lim - p, ":spacing=%"pI"d", + XINT (AREF (font, FONT_SPACING_INDEX))); if (INTEGERP (AREF (font, FONT_AVGWIDTH_INDEX))) - APPEND_SNPRINTF ((p, lim - p, - (XINT (AREF (font, FONT_AVGWIDTH_INDEX)) == 0 - ? ":scalable=true" - : ":scalable=false"))); - return (p - name); + p += esnprintf (p, lim - p, + (XINT (AREF (font, FONT_AVGWIDTH_INDEX)) == 0 + ? ":scalable=true" + : ":scalable=false")); + return lim - p == 1 ? -1 : p - name; } /* Parse NAME (null terminated) and store information in FONT diff --git a/src/xterm.c b/src/xterm.c index 86393cf411f..72e9f2b2236 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -7900,8 +7900,8 @@ x_io_error_quitter (Display *display) { char buf[256]; - snprintf (buf, sizeof buf, "Connection lost to X server `%s'", - DisplayString (display)); + esnprintf (buf, sizeof buf, "Connection lost to X server `%s'", + DisplayString (display)); x_connection_closed (display, buf); return 0; } @@ -10278,8 +10278,8 @@ x_term_init (Lisp_Object display_name, char *xrm_option, char *resource_name) atom_names[i] = (char *) atom_refs[i].name; /* Build _XSETTINGS_SN atom name */ - snprintf (xsettings_atom_name, sizeof (xsettings_atom_name), - "_XSETTINGS_S%d", XScreenNumberOfScreen (dpyinfo->screen)); + sprintf (xsettings_atom_name, + "_XSETTINGS_S%d", XScreenNumberOfScreen (dpyinfo->screen)); atom_names[i] = xsettings_atom_name; XInternAtoms (dpyinfo->display, atom_names, total_atom_count,