aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Eggert2011-08-30 22:50:49 -0700
committerPaul Eggert2011-08-30 22:50:49 -0700
commit61bfeeb79dee6b321cb9f2257aeec9d0c1fa5a2f (patch)
treec30ce4abf653bc333a5f978bdbcc0d87949e3e64 /src
parent0999621ac510fb0e8e949966ec6ab737b7443ab0 (diff)
downloademacs-61bfeeb79dee6b321cb9f2257aeec9d0c1fa5a2f.tar.gz
emacs-61bfeeb79dee6b321cb9f2257aeec9d0c1fa5a2f.zip
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.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog10
-rw-r--r--src/font.c57
-rw-r--r--src/xterm.c8
3 files changed, 39 insertions, 36 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 67ec3140cd4..d0f57593220 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,13 @@
12011-08-31 Paul Eggert <eggert@cs.ucla.edu>
2
3 Avoid the use of snprintf.
4 * font.c (APPEND_SNPRINTF): Remove.
5 (font_unparse_xlfd):
6 * xterm.c (x_io_error_quitter):
7 Use esnprintf, not snprintf. That way, we don't have to worry
8 about porting to ancient platforms that lack snprintf.
9 (x_term_init): Use sprintf, not snprintf.
10
12011-08-30 Paul Eggert <eggert@cs.ucla.edu> 112011-08-30 Paul Eggert <eggert@cs.ucla.edu>
2 12
3 sprintf-related integer and memory overflow issues (Bug#9412). 13 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)
1285 } 1285 }
1286 else 1286 else
1287 f[XLFD_AVGWIDTH_INDEX] = "*"; 1287 f[XLFD_AVGWIDTH_INDEX] = "*";
1288 len = snprintf (name, nbytes, "-%s-%s-%s-%s-%s-%s-%s-%s-%s-%s-%s", 1288 len = esnprintf (name, nbytes, "-%s-%s-%s-%s-%s-%s-%s-%s-%s-%s-%s",
1289 f[XLFD_FOUNDRY_INDEX], f[XLFD_FAMILY_INDEX], 1289 f[XLFD_FOUNDRY_INDEX], f[XLFD_FAMILY_INDEX],
1290 f[XLFD_WEIGHT_INDEX], f[XLFD_SLANT_INDEX], 1290 f[XLFD_WEIGHT_INDEX], f[XLFD_SLANT_INDEX],
1291 f[XLFD_SWIDTH_INDEX], f[XLFD_ADSTYLE_INDEX], 1291 f[XLFD_SWIDTH_INDEX], f[XLFD_ADSTYLE_INDEX],
1292 f[XLFD_PIXEL_INDEX], f[XLFD_RESX_INDEX], 1292 f[XLFD_PIXEL_INDEX], f[XLFD_RESX_INDEX],
1293 f[XLFD_SPACING_INDEX], f[XLFD_AVGWIDTH_INDEX], 1293 f[XLFD_SPACING_INDEX], f[XLFD_AVGWIDTH_INDEX],
1294 f[XLFD_REGISTRY_INDEX]); 1294 f[XLFD_REGISTRY_INDEX]);
1295 return len < nbytes ? len : -1; 1295 return len == nbytes - 1 ? -1 : len;
1296} 1296}
1297 1297
1298/* Parse NAME (null terminated) and store information in FONT 1298/* 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)
1592 1592
1593 p = name; 1593 p = name;
1594 lim = name + nbytes; 1594 lim = name + nbytes;
1595# define APPEND_SNPRINTF(args) \
1596 do { \
1597 int len = snprintf args; \
1598 if (! (0 <= len && len < lim - p)) \
1599 return -1; \
1600 p += len; \
1601 } while (0)
1602 if (! NILP (family)) 1595 if (! NILP (family))
1603 APPEND_SNPRINTF ((p, lim - p, "%s", SSDATA (family))); 1596 p += esnprintf (p, lim - p, "%s", SSDATA (family));
1604 if (point_size > 0) 1597 if (point_size > 0)
1605 APPEND_SNPRINTF ((p, lim - p, "-%d" + (p == name), point_size)); 1598 p += esnprintf (p, lim - p, "-%d" + (p == name), point_size);
1606 else if (pixel_size > 0) 1599 else if (pixel_size > 0)
1607 APPEND_SNPRINTF ((p, lim - p, ":pixelsize=%d", pixel_size)); 1600 p += esnprintf (p, lim - p, ":pixelsize=%d", pixel_size);
1608 if (! NILP (AREF (font, FONT_FOUNDRY_INDEX))) 1601 if (! NILP (AREF (font, FONT_FOUNDRY_INDEX)))
1609 APPEND_SNPRINTF ((p, lim - p, ":foundry=%s", 1602 p += esnprintf (p, lim - p, ":foundry=%s",
1610 SSDATA (SYMBOL_NAME (AREF (font, 1603 SSDATA (SYMBOL_NAME (AREF (font,
1611 FONT_FOUNDRY_INDEX))))); 1604 FONT_FOUNDRY_INDEX))));
1612 for (i = 0; i < 3; i++) 1605 for (i = 0; i < 3; i++)
1613 if (! NILP (styles[i])) 1606 if (! NILP (styles[i]))
1614 APPEND_SNPRINTF ((p, lim - p, ":%s=%s", style_names[i], 1607 p += esnprintf (p, lim - p, ":%s=%s", style_names[i],
1615 SSDATA (SYMBOL_NAME (styles[i])))); 1608 SSDATA (SYMBOL_NAME (styles[i])));
1616 if (INTEGERP (AREF (font, FONT_DPI_INDEX))) 1609 if (INTEGERP (AREF (font, FONT_DPI_INDEX)))
1617 APPEND_SNPRINTF ((p, lim - p, ":dpi=%"pI"d", 1610 p += esnprintf (p, lim - p, ":dpi=%"pI"d",
1618 XINT (AREF (font, FONT_DPI_INDEX)))); 1611 XINT (AREF (font, FONT_DPI_INDEX)));
1619 if (INTEGERP (AREF (font, FONT_SPACING_INDEX))) 1612 if (INTEGERP (AREF (font, FONT_SPACING_INDEX)))
1620 APPEND_SNPRINTF ((p, lim - p, ":spacing=%"pI"d", 1613 p += esnprintf (p, lim - p, ":spacing=%"pI"d",
1621 XINT (AREF (font, FONT_SPACING_INDEX)))); 1614 XINT (AREF (font, FONT_SPACING_INDEX)));
1622 if (INTEGERP (AREF (font, FONT_AVGWIDTH_INDEX))) 1615 if (INTEGERP (AREF (font, FONT_AVGWIDTH_INDEX)))
1623 APPEND_SNPRINTF ((p, lim - p, 1616 p += esnprintf (p, lim - p,
1624 (XINT (AREF (font, FONT_AVGWIDTH_INDEX)) == 0 1617 (XINT (AREF (font, FONT_AVGWIDTH_INDEX)) == 0
1625 ? ":scalable=true" 1618 ? ":scalable=true"
1626 : ":scalable=false"))); 1619 : ":scalable=false"));
1627 return (p - name); 1620 return lim - p == 1 ? -1 : p - name;
1628} 1621}
1629 1622
1630/* Parse NAME (null terminated) and store information in FONT 1623/* 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)
7900{ 7900{
7901 char buf[256]; 7901 char buf[256];
7902 7902
7903 snprintf (buf, sizeof buf, "Connection lost to X server `%s'", 7903 esnprintf (buf, sizeof buf, "Connection lost to X server `%s'",
7904 DisplayString (display)); 7904 DisplayString (display));
7905 x_connection_closed (display, buf); 7905 x_connection_closed (display, buf);
7906 return 0; 7906 return 0;
7907} 7907}
@@ -10278,8 +10278,8 @@ x_term_init (Lisp_Object display_name, char *xrm_option, char *resource_name)
10278 atom_names[i] = (char *) atom_refs[i].name; 10278 atom_names[i] = (char *) atom_refs[i].name;
10279 10279
10280 /* Build _XSETTINGS_SN atom name */ 10280 /* Build _XSETTINGS_SN atom name */
10281 snprintf (xsettings_atom_name, sizeof (xsettings_atom_name), 10281 sprintf (xsettings_atom_name,
10282 "_XSETTINGS_S%d", XScreenNumberOfScreen (dpyinfo->screen)); 10282 "_XSETTINGS_S%d", XScreenNumberOfScreen (dpyinfo->screen));
10283 atom_names[i] = xsettings_atom_name; 10283 atom_names[i] = xsettings_atom_name;
10284 10284
10285 XInternAtoms (dpyinfo->display, atom_names, total_atom_count, 10285 XInternAtoms (dpyinfo->display, atom_names, total_atom_count,