metadata: Reduce stack usage in nfo parsing
64KB is a bit much for a stack buffer. Use dynamic allocation instead.
This commit is contained in:
parent
4f926639b2
commit
46c692fc59
23
metadata.c
23
metadata.c
@ -160,23 +160,30 @@ void
|
||||
parse_nfo(const char *path, metadata_t *m)
|
||||
{
|
||||
FILE *nfo;
|
||||
char buf[65536];
|
||||
char *buf;
|
||||
struct NameValueParserData xml;
|
||||
struct stat file;
|
||||
size_t nread;
|
||||
char *val, *val2;
|
||||
|
||||
if (stat(path, &file) != 0 ||
|
||||
file.st_size > 65536 )
|
||||
file.st_size > 65535)
|
||||
{
|
||||
DPRINTF(E_INFO, L_METADATA, "Not parsing very large .nfo file %s\n", path);
|
||||
return;
|
||||
}
|
||||
DPRINTF(E_DEBUG, L_METADATA, "Parsing .nfo file: %s\n", path);
|
||||
buf = calloc(1, file.st_size + 1);
|
||||
if (buf)
|
||||
return;
|
||||
nfo = fopen(path, "r");
|
||||
if (!nfo)
|
||||
{
|
||||
free(buf);
|
||||
return;
|
||||
}
|
||||
nread = fread(&buf, 1, sizeof(buf), nfo);
|
||||
fclose(nfo);
|
||||
|
||||
ParseNameValue(buf, nread, &xml, 0);
|
||||
|
||||
@ -197,14 +204,16 @@ parse_nfo(const char *path, metadata_t *m)
|
||||
}
|
||||
|
||||
val = GetValueFromNameValueList(&xml, "plot");
|
||||
if( val ) {
|
||||
if (val)
|
||||
{
|
||||
char *esc_tag = unescape_tag(val, 1);
|
||||
m->comment = escape_tag(esc_tag, 1);
|
||||
free(esc_tag);
|
||||
}
|
||||
|
||||
val = GetValueFromNameValueList(&xml, "capturedate");
|
||||
if( val ) {
|
||||
if (val)
|
||||
{
|
||||
char *esc_tag = unescape_tag(val, 1);
|
||||
m->date = escape_tag(esc_tag, 1);
|
||||
free(esc_tag);
|
||||
@ -213,8 +222,8 @@ parse_nfo(const char *path, metadata_t *m)
|
||||
val = GetValueFromNameValueList(&xml, "genre");
|
||||
if (val)
|
||||
{
|
||||
free(m->genre);
|
||||
char *esc_tag = unescape_tag(val, 1);
|
||||
free(m->genre);
|
||||
m->genre = escape_tag(esc_tag, 1);
|
||||
free(esc_tag);
|
||||
}
|
||||
@ -222,14 +231,14 @@ parse_nfo(const char *path, metadata_t *m)
|
||||
val = GetValueFromNameValueList(&xml, "mime");
|
||||
if (val)
|
||||
{
|
||||
free(m->mime);
|
||||
char *esc_tag = unescape_tag(val, 1);
|
||||
free(m->mime);
|
||||
m->mime = escape_tag(esc_tag, 1);
|
||||
free(esc_tag);
|
||||
}
|
||||
|
||||
ClearNameValueList(&xml);
|
||||
fclose(nfo);
|
||||
free(buf);
|
||||
}
|
||||
|
||||
void
|
||||
|
Loading…
x
Reference in New Issue
Block a user