diff options
| author | Paul Eggert | 2011-08-30 22:50:49 -0700 |
|---|---|---|
| committer | Paul Eggert | 2011-08-30 22:50:49 -0700 |
| commit | 61bfeeb79dee6b321cb9f2257aeec9d0c1fa5a2f (patch) | |
| tree | c30ce4abf653bc333a5f978bdbcc0d87949e3e64 | |
| parent | 0999621ac510fb0e8e949966ec6ab737b7443ab0 (diff) | |
| download | emacs-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.
| -rw-r--r-- | src/ChangeLog | 10 | ||||
| -rw-r--r-- | src/font.c | 57 | ||||
| -rw-r--r-- | src/xterm.c | 8 |
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 @@ | |||
| 1 | 2011-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 | |||
| 1 | 2011-08-30 Paul Eggert <eggert@cs.ucla.edu> | 11 | 2011-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, |