aboutsummaryrefslogtreecommitdiffstats
path: root/src/coding.c
diff options
context:
space:
mode:
authorPaul Eggert2020-08-15 10:48:36 -0700
committerPaul Eggert2020-08-15 11:19:51 -0700
commitd0145537fa511a44e2a4af01da3947e92f0b8331 (patch)
tree0b098e725155c3b40031e0ecb8c65bbb25a6e402 /src/coding.c
parent4cba236749aafade7bd88cf2a10be48f44983faa (diff)
downloademacs-d0145537fa511a44e2a4af01da3947e92f0b8331.tar.gz
emacs-d0145537fa511a44e2a4af01da3947e92f0b8331.zip
Fix GC bugs related to uninitialized vectors
Avoid problems if GC occurs while initializing a vector. Problem with Fdelete reported by Pip Cet in: https://lists.gnu.org/r/emacs-devel/2020-08/msg00313.html I looked for similar problems elsewhere and found quite a few. * src/coding.c (make_subsidiaries): * src/composite.c (syms_of_composite): * src/font.c (build_style_table, Ffont_get_glyphs): * src/nsselect.m (clean_local_selection_data): * src/nsxwidget.m (js_to_lisp): * src/syntax.c (init_syntax_once): * src/window.c (Fcurrent_window_configuration): * src/xselect.c (selection_data_to_lisp_data) (clean_local_selection_data): Use make_nil_vector instead of make_uninit_vector. * src/fns.c (Fdelete): * src/xwidget.c (webkit_js_to_lisp): Use allocate_nil_vector instead of allocate_vector. * src/search.c (Fnewline_cache_check): Use make_vector instead of make_uninit_vector.
Diffstat (limited to 'src/coding.c')
-rw-r--r--src/coding.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/src/coding.c b/src/coding.c
index 1d79c703a3a..51bd441de9d 100644
--- a/src/coding.c
+++ b/src/coding.c
@@ -10856,20 +10856,17 @@ HIGHESTP non-nil means just return the highest priority one. */)
10856 return Fnreverse (val); 10856 return Fnreverse (val);
10857} 10857}
10858 10858
10859static const char *const suffixes[] = { "-unix", "-dos", "-mac" };
10860
10861static Lisp_Object 10859static Lisp_Object
10862make_subsidiaries (Lisp_Object base) 10860make_subsidiaries (Lisp_Object base)
10863{ 10861{
10864 Lisp_Object subsidiaries; 10862 static char const suffixes[][8] = { "-unix", "-dos", "-mac" };
10865 ptrdiff_t base_name_len = SBYTES (SYMBOL_NAME (base)); 10863 ptrdiff_t base_name_len = SBYTES (SYMBOL_NAME (base));
10866 USE_SAFE_ALLOCA; 10864 USE_SAFE_ALLOCA;
10867 char *buf = SAFE_ALLOCA (base_name_len + 6); 10865 char *buf = SAFE_ALLOCA (base_name_len + 6);
10868 int i;
10869 10866
10870 memcpy (buf, SDATA (SYMBOL_NAME (base)), base_name_len); 10867 memcpy (buf, SDATA (SYMBOL_NAME (base)), base_name_len);
10871 subsidiaries = make_uninit_vector (3); 10868 Lisp_Object subsidiaries = make_nil_vector (3);
10872 for (i = 0; i < 3; i++) 10869 for (int i = 0; i < 3; i++)
10873 { 10870 {
10874 strcpy (buf + base_name_len, suffixes[i]); 10871 strcpy (buf + base_name_len, suffixes[i]);
10875 ASET (subsidiaries, i, intern (buf)); 10872 ASET (subsidiaries, i, intern (buf));