[librsvg] load_image_to_surface(): take an AllowedUrl, not a string
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg] load_image_to_surface(): take an AllowedUrl, not a string
- Date: Thu, 29 Nov 2018 18:06:15 +0000 (UTC)
commit b164436d22dbe9e819295a3b3b18e39fd0c88618
Author: Federico Mena Quintero <federico gnome org>
Date: Thu Nov 29 07:36:30 2018 -0600
load_image_to_surface(): take an AllowedUrl, not a string
rsvg_internals/src/filters/image.rs | 6 +++++-
rsvg_internals/src/handle.rs | 12 +++---------
rsvg_internals/src/image.rs | 9 +++++++--
3 files changed, 15 insertions(+), 12 deletions(-)
---
diff --git a/rsvg_internals/src/filters/image.rs b/rsvg_internals/src/filters/image.rs
index ec988a29..44904f07 100644
--- a/rsvg_internals/src/filters/image.rs
+++ b/rsvg_internals/src/filters/image.rs
@@ -3,6 +3,7 @@ use std::ptr;
use cairo::{self, ImageSurface, MatrixTrait, PatternTrait};
+use allowed_url::AllowedUrl;
use aspect_ratio::AspectRatio;
use attributes::Attribute;
use defs::Href;
@@ -126,8 +127,11 @@ impl Image {
unreachable!();
};
+ let aurl = AllowedUrl::from_href(url, handle::get_base_url(self.handle.get()).as_ref())
+ .map_err(|_| FilterError::InvalidInput)?;
+
// FIXME: translate the error better here
- let surface = handle::load_image_to_surface(self.handle.get() as *mut _, url)
+ let surface = handle::load_image_to_surface(self.handle.get() as *mut _, &aurl)
.map_err(|_| FilterError::InvalidInput)?;
let output_surface = ImageSurface::create(
diff --git a/rsvg_internals/src/handle.rs b/rsvg_internals/src/handle.rs
index 325459f4..dfd3c33f 100644
--- a/rsvg_internals/src/handle.rs
+++ b/rsvg_internals/src/handle.rs
@@ -7,7 +7,6 @@ use cairo_sys;
use gdk_pixbuf::{PixbufLoader, PixbufLoaderExt};
use gio::{Cancellable, File as GFile, InputStream};
use gio_sys;
-use glib;
use glib::translate::*;
use glib_sys;
use libc;
@@ -16,7 +15,7 @@ use url::Url;
use allowed_url::AllowedUrl;
use css::{self, CssStyles};
use defs::{Defs, RsvgDefs};
-use error::{set_gerror, LoadingError, RsvgError};
+use error::{set_gerror, LoadingError};
use io;
use surface_utils::shared_surface::SharedImageSurface;
@@ -111,14 +110,9 @@ fn keep_image_data(handle: *const RsvgHandle) -> bool {
pub fn load_image_to_surface(
handle: *mut RsvgHandle,
- href_str: &str,
+ aurl: &AllowedUrl,
) -> Result<ImageSurface, LoadingError> {
- let rhandle = get_rust_handle(handle);
-
- let aurl = AllowedUrl::from_href(href_str, rhandle.base_url.borrow().as_ref())
- .map_err(|_| glib::Error::new(RsvgError, "FIXME"))?;
-
- let data = acquire_data(handle, &aurl)?;
+ let data = acquire_data(handle, aurl)?;
if data.data.len() == 0 {
return Err(LoadingError::EmptyData);
diff --git a/rsvg_internals/src/image.rs b/rsvg_internals/src/image.rs
index aa4b6b3f..0eaa6ece 100644
--- a/rsvg_internals/src/image.rs
+++ b/rsvg_internals/src/image.rs
@@ -2,6 +2,7 @@ use cairo;
use cairo::{MatrixTrait, PatternTrait};
use std::cell::{Cell, RefCell};
+use allowed_url::AllowedUrl;
use aspect_ratio::AspectRatio;
use attributes::Attribute;
use bbox::BoundingBox;
@@ -68,12 +69,16 @@ impl NodeTrait for NodeImage {
self.aspect.set(parse("preserveAspectRatio", value, ())?)
}
+ // "path" is used by some older Adobe Illustrator versions
Attribute::XlinkHref | Attribute::Path => {
- // "path" is used by some older Adobe Illustrator versions
+ // FIXME: use better errors here; these should be loading errors
+
+ let aurl = AllowedUrl::from_href(value, handle::get_base_url(handle).as_ref())
+ .map_err(|_| NodeError::value_error(attr, "invalid URL"))?;
*self.surface.borrow_mut() = Some(
// FIXME: translate the error better here
- handle::load_image_to_surface(handle as *mut _, value)
+ handle::load_image_to_surface(handle as *mut _, &aurl)
.map_err(|_| NodeError::value_error(attr, "could not load image"))?,
);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]