mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-29 08:31:35 -08:00
etags had undefined behavior if input files, lines, tags, etc., had more than INT_MAX bytes. Clean up the usage of integer types to fix the overflow errors I found. * admin/merge-gnulib (GNULIB_MODULES): Add mempcpy. * lib-src/etags.c: Include inttypes.h, intprops.h. (memcpyz): New function. Use it to simplify several occurrences of memcpy followed by storing a trailing '\0'. (xnew): Use xnmalloc, to catch overflow on integer multiplication. (xrnew): Change last arg to multiplier. The type is not needed. All callers changed. (node, lineno, charno, linecharno, invalidcharno, make_tag): (pfnote, add_node, number_len, C_symtype, lbz, Makefile_targets) (readline): Use intmax_t for line numbers and character positions, instead of int or long. (linebuffer, make_tag, pfnote, total_size_of_entries, put_entry) (in_word_set, C_symtype, token, cstack, pushclass_above): (popclass_above, write_classname, consider_token, C_entries) (Ruby_functions, Makefile_targets, Lua_functions, TeX_commands) (TeX_decode_env, erlang_func, erlang_attribute, erlang_atom) (substitute, regex_tag_multiline, nocase_tail, readline_interval) (readline, savenstr, concat, etags_getcwd, relative_filename) (linebuffer_setlen): Use ptrdiff_t for object sizes, instead of int or long or unsigned or size_t. (write_classname, C_entries): Avoid sprintf, as the result could exceed INT_MAX bytes and then behavior goes haywire. (main): Use int, instead of unsigned, for argv counts. (get_language_from_filename): Use bool for boolean. (Ruby_functions): Prefer strcpy to memcpy when copying "=". (linebuffer_setlen): Use ‘if’ instead of ‘while’. (memory_full, xnmalloc, xnrealloc): New functions. (xmalloc): Use memory_full, and take a ptrdiff_t instead of a size_t. (xrealloc): Remove; no longer needed. * lib/gnulib.mk.in, m4/gnulib-comp.m4: Regenerate. * lib/mempcpy.c, m4/mempcpy.m4: New files, copied from Gnulib. |
||
|---|---|---|
| .. | ||
| charsets | ||
| coccinelle | ||
| grammars | ||
| notes | ||
| nt | ||
| unidata | ||
| admin.el | ||
| alloc-colors.c | ||
| authors.el | ||
| automerge | ||
| build-configs | ||
| ChangeLog.1 | ||
| check-doc-strings | ||
| CPP-DEFINES | ||
| cus-test.el | ||
| diff-tar-files | ||
| find-gc.el | ||
| gitmerge.el | ||
| last-chance.el | ||
| MAINTAINERS | ||
| make-emacs | ||
| make-manuals | ||
| make-tarball.txt | ||
| merge-gnulib | ||
| merge-pkg-config | ||
| quick-install-emacs | ||
| README | ||
| release-process | ||
| update-copyright | ||
| update_autogen | ||
| upload-manuals | ||
Copyright (C) 2001-2019 Free Software Foundation, Inc.
See the end of the file for license conditions.
The admin directory
This directory contains scripts and other things useful for developing
and maintaining Emacs. These files are not part of Emacs releases
because they are not deemed generally useful, and you have to know
what you do when using them.
* Instructions and scripts used to prepare an Emacs release.
** release-process
The release process used by GNU Emacs.
** make-tarball.txt
Instructions to create pretest or release tarballs, announcements, etc.
** admin.el
Utilities for setting version numbers and alike.
* Scripts that can be used to build and test Emacs.
** build-configs
Build Emacs in various configurations.
** make-emacs
Build Emacs in various ways.
** quick-install-emacs
Install emacs quickly ("incrementally").
** alloc-colors.c
A utility program that allocates a given number of colors on X. Can
be used to debug Emacs with dense colormaps (PseudoColor).
** check-doc-strings
Check doc strings against documentation.
** cus-test.el
Tests for custom types and load problems.
** diff-tar-files
Show files added/removed between two tar files.
Brief description of sub-directories:
charsets scripts for generating charset map files
in ../etc/charsets
unidata scripts for generating character property files
in ../lisp/international
This file is part of GNU Emacs.
GNU Emacs is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
GNU Emacs is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
Local variables:
mode: outline
paragraph-separate: "[ ]*$"
end: