Merge pull request #80 from n1tehawk/contrib
fexc: Fix .bin header treatment, improve .fex parser
This commit is contained in:
commit
29c636211e
25
script_bin.c
25
script_bin.c
@ -97,7 +97,7 @@ size_t script_bin_size(struct script *script,
|
||||
return bin_size;
|
||||
}
|
||||
|
||||
int script_generate_bin(void *bin, size_t UNUSED(bin_size),
|
||||
int script_generate_bin(void *bin, size_t bin_size,
|
||||
struct script *script,
|
||||
size_t sections, size_t entries)
|
||||
{
|
||||
@ -122,9 +122,9 @@ int script_generate_bin(void *bin, size_t UNUSED(bin_size),
|
||||
(void*)data-bin);
|
||||
|
||||
head->sections = sections;
|
||||
head->version[0] = 0;
|
||||
head->version[1] = 1;
|
||||
head->version[2] = 2;
|
||||
head->filesize = bin_size;
|
||||
head->version[0] = 1;
|
||||
head->version[1] = 2;
|
||||
|
||||
for (ls = list_first(&script->sections); ls;
|
||||
ls = list_next(&script->sections, ls)) {
|
||||
@ -326,11 +326,10 @@ int script_decompile_bin(void *bin, size_t bin_size,
|
||||
unsigned int i;
|
||||
struct script_bin_head *head = bin;
|
||||
|
||||
if (((head->version[0] & 0x3FFF) > SCRIPT_BIN_VERSION_LIMIT) ||
|
||||
(head->version[1] > SCRIPT_BIN_VERSION_LIMIT) ||
|
||||
(head->version[2] > SCRIPT_BIN_VERSION_LIMIT)) {
|
||||
pr_err("Malformed data: version %u.%u.%u.\n",
|
||||
head->version[0], head->version[1], head->version[2]);
|
||||
if ((head->version[0] > SCRIPT_BIN_VERSION_LIMIT) ||
|
||||
(head->version[1] > SCRIPT_BIN_VERSION_LIMIT)) {
|
||||
pr_err("Malformed data: version %u.%u.\n",
|
||||
head->version[0], head->version[1]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -340,10 +339,10 @@ int script_decompile_bin(void *bin, size_t bin_size,
|
||||
return 0;
|
||||
}
|
||||
|
||||
pr_info("%s: version: %u.%u.%u\n", filename,
|
||||
head->version[0] & 0x3FFF, head->version[1], head->version[2]);
|
||||
pr_info("%s: size: %zu (%u sections)\n", filename,
|
||||
bin_size, head->sections);
|
||||
pr_info("%s: version: %u.%u\n", filename,
|
||||
head->version[0], head->version[1]);
|
||||
pr_info("%s: size: %zu (%u sections), header value: %u\n", filename,
|
||||
bin_size, head->sections, head->filesize);
|
||||
|
||||
/* TODO: SANITY: compare head.sections with bin_size */
|
||||
for (i=0; i < head->sections; i++) {
|
||||
|
||||
@ -27,7 +27,8 @@ struct script_bin_section {
|
||||
/** binary representation of the head of the script file */
|
||||
struct script_bin_head {
|
||||
uint32_t sections;
|
||||
uint32_t version[3];
|
||||
uint32_t filesize;
|
||||
uint32_t version[2];
|
||||
struct script_bin_section section[];
|
||||
};
|
||||
|
||||
|
||||
10
script_fex.c
10
script_fex.c
@ -348,7 +348,15 @@ int script_parse_fex(FILE *in, const char *filename, struct script *script)
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
goto invalid_char_at_p;
|
||||
/* goto invalid_char_at_p; */
|
||||
errf("Warning: %s:%zu: unquoted value '%s', assuming string\n",
|
||||
filename, line, p);
|
||||
if (script_string_entry_new(last_section, key, pe-p, p)) {
|
||||
pr_debug("%s.%s = \"%s\"\n",
|
||||
last_section->name, key, p);
|
||||
continue;
|
||||
}
|
||||
perror("malloc");
|
||||
}
|
||||
errf("E: %s:%zu: parse error at %zu.\n",
|
||||
filename, line, p-buffer+1);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user