mirror of
https://gitlab.gnome.org/GNOME/evince
synced 2024-06-30 22:54:23 +00:00
libdocument: Make XMP parser take data length
This commit is contained in:
parent
79e17e252c
commit
3c91921701
|
@ -540,7 +540,7 @@ djvu_document_get_info (EvDocument *document)
|
|||
|
||||
xmp = ddjvu_anno_get_xmp (anno);
|
||||
if (xmp != NULL) {
|
||||
ev_document_info_set_from_xmp (info, xmp);
|
||||
ev_document_info_set_from_xmp (info, xmp, -1);
|
||||
}
|
||||
|
||||
ddjvu_miniexp_release (djvu_document->d_document, anno);
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
|
||||
/* this file is part of evince, a gnome document viewer
|
||||
*
|
||||
* Copyright (C) 2018, Evangelos Rigas <erigas@rnd2.org>
|
||||
|
@ -600,7 +599,7 @@ pdf_document_get_info (EvDocument *document)
|
|||
ev_document_info_take_modified_datetime (info, modified_datetime);
|
||||
|
||||
if (metadata != NULL) {
|
||||
ev_document_info_set_from_xmp (info, metadata);
|
||||
ev_document_info_set_from_xmp (info, metadata, -1);
|
||||
g_free (metadata);
|
||||
}
|
||||
|
||||
|
|
|
@ -227,7 +227,8 @@ ev_document_info_get_modified_datetime (const EvDocumentInfo *info)
|
|||
/*
|
||||
* ev_document_info_set_from_xmp:
|
||||
* @info: a #EvDocumentInfo
|
||||
* @xmp: a string containing an XMP document
|
||||
* @xmp: a XMP document
|
||||
* @size: the size of @xmp in bytes, or -1 if @xmp is a NUL-terminated string
|
||||
*
|
||||
* Parses the XMP document and sets @info from it.
|
||||
*
|
||||
|
@ -235,9 +236,10 @@ ev_document_info_get_modified_datetime (const EvDocumentInfo *info)
|
|||
*/
|
||||
gboolean
|
||||
ev_document_info_set_from_xmp (EvDocumentInfo *info,
|
||||
const char *xmp)
|
||||
const char *xmp,
|
||||
gssize size)
|
||||
{
|
||||
return ev_xmp_parse (xmp, info);
|
||||
return ev_xmp_parse (xmp, size != -1 ? size : strlen (xmp), info);
|
||||
}
|
||||
|
||||
/* EvDocumentLicense */
|
||||
|
|
|
@ -163,7 +163,8 @@ void ev_document_info_take_modified_datetime (EvDocumentInfo *info,
|
|||
GDateTime *datetime);
|
||||
EV_PRIVATE
|
||||
gboolean ev_document_info_set_from_xmp (EvDocumentInfo *info,
|
||||
const char *xmp);
|
||||
const char *xmp,
|
||||
gssize size);
|
||||
|
||||
/* EvDocumentLicense */
|
||||
#define EV_TYPE_DOCUMENT_LICENSE (ev_document_license_get_type())
|
||||
|
|
|
@ -383,13 +383,15 @@ xmp_get_license (xmlXPathContextPtr xpathCtx)
|
|||
|
||||
/*
|
||||
* ev_xmp_parse:
|
||||
* @metadata: a XMP document as a string
|
||||
* @metadata: XMP document data
|
||||
* @size: size of @metadata in bytes
|
||||
* @info: a #EvDocumentInfo
|
||||
*
|
||||
* Returns: %TRUE iff @metadata could be successfully parsed
|
||||
*/
|
||||
gboolean
|
||||
ev_xmp_parse (const gchar *metadata,
|
||||
ev_xmp_parse (const char *metadata,
|
||||
gsize size,
|
||||
EvDocumentInfo *info)
|
||||
{
|
||||
xmlDocPtr doc;
|
||||
|
@ -405,7 +407,7 @@ ev_xmp_parse (const gchar *metadata,
|
|||
GDateTime *metadata_datetime = NULL;
|
||||
GDateTime *datetime;
|
||||
|
||||
doc = xmlParseMemory (metadata, strlen (metadata));
|
||||
doc = xmlParseMemory (metadata, size);
|
||||
if (doc == NULL)
|
||||
return FALSE; /* invalid xml metadata */
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
G_BEGIN_DECLS
|
||||
|
||||
gboolean ev_xmp_parse (const char *xmp,
|
||||
gsize size,
|
||||
EvDocumentInfo *info);
|
||||
|
||||
G_END_DECLS
|
||||
|
|
Loading…
Reference in New Issue
Block a user