Fix crash when dumping charset_table with portable dumper (Bug#52461)
* src/charset.h: * src/charset.c (charset_table_used): Now extern. * src/pdumper.c (dump_charset): Don't dump code_space_mask for unused slots of charset_table.
This commit is contained in:
parent
a4fcbf46a7
commit
7078f32b5b
3 changed files with 4 additions and 3 deletions
|
@ -63,7 +63,7 @@ Lisp_Object Vcharset_hash_table;
|
|||
/* Table of struct charset. */
|
||||
struct charset *charset_table;
|
||||
int charset_table_size;
|
||||
static int charset_table_used;
|
||||
int charset_table_used;
|
||||
|
||||
/* Special charsets corresponding to symbols. */
|
||||
int charset_ascii;
|
||||
|
|
|
@ -249,6 +249,7 @@ extern Lisp_Object Vcharset_hash_table;
|
|||
/* Table of struct charset. */
|
||||
extern struct charset *charset_table;
|
||||
extern int charset_table_size;
|
||||
extern int charset_table_used;
|
||||
|
||||
#define CHARSET_FROM_ID(id) (charset_table + (id))
|
||||
|
||||
|
|
|
@ -3174,7 +3174,7 @@ dump_charset (struct dump_context *ctx, int cs_i)
|
|||
DUMP_FIELD_COPY (&out, cs, hash_index);
|
||||
DUMP_FIELD_COPY (&out, cs, dimension);
|
||||
memcpy (out.code_space, &cs->code_space, sizeof (cs->code_space));
|
||||
if (cs->code_space_mask)
|
||||
if (cs_i < charset_table_used && cs->code_space_mask)
|
||||
dump_field_fixup_later (ctx, &out, cs, &cs->code_space_mask);
|
||||
DUMP_FIELD_COPY (&out, cs, code_linear_p);
|
||||
DUMP_FIELD_COPY (&out, cs, iso_chars_96);
|
||||
|
@ -3195,7 +3195,7 @@ dump_charset (struct dump_context *ctx, int cs_i)
|
|||
memcpy (out.fast_map, &cs->fast_map, sizeof (cs->fast_map));
|
||||
DUMP_FIELD_COPY (&out, cs, code_offset);
|
||||
dump_off offset = dump_object_finish (ctx, &out, sizeof (out));
|
||||
if (cs->code_space_mask)
|
||||
if (cs_i < charset_table_used && cs->code_space_mask)
|
||||
dump_remember_cold_op (ctx, COLD_OP_CHARSET,
|
||||
Fcons (dump_off_to_lisp (cs_i),
|
||||
dump_off_to_lisp (offset)));
|
||||
|
|
Loading…
Add table
Reference in a new issue