Skip to content

Commit d163ea6

Browse files
committed
fix JuliaLang#12444 (add magic and format version to beginning of .ji files)
1 parent 339033f commit d163ea6

File tree

1 file changed

+23
-1
lines changed

1 file changed

+23
-1
lines changed

src/dump.c

+23-1
Original file line numberDiff line numberDiff line change
@@ -949,6 +949,15 @@ void jl_serialize_mod_list(ios_t *s)
949949
write_int32(s, 0);
950950
}
951951

952+
// "magic" string and version header of .ji file
953+
const int JI_FORMAT_VERSION = 0;
954+
const char JI_MAGIC[] = "\373jli\r\n\032\n"; // based on PNG signature
955+
static void jl_serialize_header(ios_t *s)
956+
{
957+
ios_write(s, JI_MAGIC, strlen(JI_MAGIC));
958+
write_uint16(s, JI_FORMAT_VERSION);
959+
}
960+
952961
// --- deserialize ---
953962

954963
static jl_fptr_t jl_deserialize_fptr(ios_t *s)
@@ -1525,6 +1534,17 @@ int jl_deserialize_verify_mod_list(ios_t *s)
15251534
}
15261535
}
15271536

1537+
static int jl_deserialize_header(ios_t *s)
1538+
{
1539+
char magic[16];
1540+
size_t len = strlen(JI_MAGIC);
1541+
assert(len < 16);
1542+
ios_read(s, magic, len);
1543+
magic[len] = 0;
1544+
return (!strcmp(magic, JI_MAGIC) &&
1545+
read_uint16(s) == JI_FORMAT_VERSION);
1546+
}
1547+
15281548
jl_array_t *jl_module_init_order;
15291549

15301550
static void jl_finalize_serializer(ios_t *f) {
@@ -1892,6 +1912,7 @@ DLLEXPORT int jl_save_incremental(const char *fname, jl_array_t *worklist)
18921912
return 1;
18931913
}
18941914
serializer_worklist = worklist;
1915+
jl_serialize_header(&f);
18951916
jl_serialize_mod_list(&f); // this can throw, keep it early (before any actual initialization)
18961917

18971918
JL_SIGATOMIC_BEGIN();
@@ -1933,7 +1954,8 @@ static jl_array_t *_jl_restore_incremental(ios_t *f)
19331954
ios_close(f);
19341955
return NULL;
19351956
}
1936-
if (!jl_deserialize_verify_mod_list(f)) {
1957+
if (!jl_deserialize_header(f) ||
1958+
!jl_deserialize_verify_mod_list(f)) {
19371959
ios_close(f);
19381960
return NULL;
19391961
}

0 commit comments

Comments
 (0)