1
0
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:
Christian Persch 2021-12-04 01:45:44 +01:00 committed by Germán Poo-Caamaño
parent 79e17e252c
commit 3c91921701
6 changed files with 15 additions and 10 deletions

View File

@ -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);

View File

@ -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);
}

View File

@ -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 */

View File

@ -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())

View File

@ -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 */

View File

@ -27,6 +27,7 @@
G_BEGIN_DECLS
gboolean ev_xmp_parse (const char *xmp,
gsize size,
EvDocumentInfo *info);
G_END_DECLS