# HG changeset patch # User Paul Eggert # Date 1295767819 28800 # Node ID b5017c649dfbee2d8b1870d41a71d57f4bbab0ec # Parent 11f1b475723604bfcaecf0f0c0c97105c99ceea7 Check return values of some library calls. diff -r 11f1b4757236 -r b5017c649dfb lib-src/ChangeLog --- a/lib-src/ChangeLog Sat Jan 22 20:33:12 2011 -0800 +++ b/lib-src/ChangeLog Sat Jan 22 23:30:19 2011 -0800 @@ -1,3 +1,11 @@ +2011-01-23 Paul Eggert + + Check return values of some library calls. + * hexl.c (main): Check fread result. + * make-docfile.c (main): Check chdir result. + (scan_c_file): Check fscanf result. + * movemail.c (main): Check ftruncate result. + 2011-01-17 Paul Eggert Include unilaterally. diff -r 11f1b4757236 -r b5017c649dfb lib-src/hexl.c --- a/lib-src/hexl.c Sat Jan 22 20:33:12 2011 -0800 +++ b/lib-src/hexl.c Sat Jan 22 23:30:19 2011 -0800 @@ -179,7 +179,9 @@ #define hexchar(x) (isdigit (x) ? x - '0' : x - 'a' + 10) - fread (buf, 1, 10, fp); /* skip 10 bytes */ + /* Skip 10 bytes. */ + if (fread (buf, 1, 10, fp) != 10) + break; for (i=0; i < 16; ++i) { @@ -207,7 +209,9 @@ if (i < 16) break; - fread (buf, 1, 18, fp); /* skip 18 bytes */ + /* Skip 18 bytes. */ + if (fread (buf, 1, 18, fp) != 18) + break; } } } diff -r 11f1b4757236 -r b5017c649dfb lib-src/make-docfile.c --- a/lib-src/make-docfile.c Sat Jan 22 20:33:12 2011 -0800 +++ b/lib-src/make-docfile.c Sat Jan 22 23:30:19 2011 -0800 @@ -158,7 +158,11 @@ } if (argc > i + 1 && !strcmp (argv[i], "-d")) { - chdir (argv[i + 1]); + if (chdir (argv[i + 1]) != 0) + { + perror (argv[i + 1]); + return EXIT_FAILURE; + } i += 2; } @@ -648,6 +652,7 @@ if (defunflag && (commas == 1 || commas == 2)) { + int scanned = 0; do c = getc (infile); while (c == ' ' || c == '\n' || c == '\r' || c == '\t'); @@ -655,12 +660,14 @@ goto eof; ungetc (c, infile); if (commas == 2) /* pick up minargs */ - fscanf (infile, "%d", &minargs); + scanned = fscanf (infile, "%d", &minargs); else /* pick up maxargs */ if (c == 'M' || c == 'U') /* MANY || UNEVALLED */ maxargs = -1; else - fscanf (infile, "%d", &maxargs); + scanned = fscanf (infile, "%d", &maxargs); + if (scanned < 0) + goto eof; } } diff -r 11f1b4757236 -r b5017c649dfb lib-src/movemail.c --- a/lib-src/movemail.c Sat Jan 22 20:33:12 2011 -0800 +++ b/lib-src/movemail.c Sat Jan 22 23:30:19 2011 -0800 @@ -488,7 +488,8 @@ #ifdef MAIL_USE_SYSTEM_LOCK if (! preserve_mail) { - ftruncate (indesc, 0L); + if (ftruncate (indesc, 0L) != 0) + pfatal_with_name (inname); } #endif /* MAIL_USE_SYSTEM_LOCK */ diff -r 11f1b4757236 -r b5017c649dfb src/ChangeLog --- a/src/ChangeLog Sat Jan 22 20:33:12 2011 -0800 +++ b/src/ChangeLog Sat Jan 22 23:30:19 2011 -0800 @@ -1,5 +1,10 @@ 2011-01-23 Paul Eggert + Check return values of some library calls. + * emacs.c (main): Check dup result. + * frame.c: Include , for INT_MIN and INT_MAX. + (frame_name_fnn_p): Check strtol result. + * image.c (x_create_bitmap_from_xpm_data): Add cast to fix type clash when calling XpmCreatePixmapFromData. diff -r 11f1b4757236 -r b5017c649dfb src/emacs.c --- a/src/emacs.c Sat Jan 22 20:33:12 2011 -0800 +++ b/src/emacs.c Sat Jan 22 23:30:19 2011 -0800 @@ -912,13 +912,12 @@ emacs_close (0); emacs_close (1); result = emacs_open (term, O_RDWR, 0); - if (result < 0) + if (result < 0 || dup (0) < 0) { char *errstring = strerror (errno); fprintf (stderr, "%s: %s: %s\n", argv[0], term, errstring); exit (1); } - dup (0); if (! isatty (0)) { fprintf (stderr, "%s: %s: not a tty\n", argv[0], term); diff -r 11f1b4757236 -r b5017c649dfb src/frame.c --- a/src/frame.c Sat Jan 22 20:33:12 2011 -0800 +++ b/src/frame.c Sat Jan 22 23:30:19 2011 -0800 @@ -23,6 +23,8 @@ #include #include +#include +#include #include #include "lisp.h" #include "character.h" @@ -2149,10 +2151,13 @@ if (len > 1 && str[0] == 'F') { char *end_ptr; - - strtol (str + 1, &end_ptr, 10); - - if (end_ptr == str + len) + long int n; + errno = 0; + n = strtol (str + 1, &end_ptr, 10); + + if (end_ptr == str + len + && INT_MIN <= n && n <= INT_MAX + && ((LONG_MIN < n && n < LONG_MAX) || errno != ERANGE)) return 1; } return 0;