[rygel/rygel-0-12] core: Mangle invalid characters in CreateItem
- From: Jens Georg <jensgeorg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [rygel/rygel-0-12] core: Mangle invalid characters in CreateItem
- Date: Tue, 27 Sep 2011 12:19:07 +0000 (UTC)
commit cfbb2ab9555684a4bcbd1d14571da56302797cad
Author: Jens Georg <mail jensge org>
Date: Thu Sep 22 15:24:30 2011 +0200
core: Mangle invalid characters in CreateItem
Do not fail if the upload directory is on a FAT file-system and the
title contains characters that are invalid on FAT.
src/rygel/rygel-item-creator.vala | 19 ++++++++++++++++++-
1 files changed, 18 insertions(+), 1 deletions(-)
---
diff --git a/src/rygel/rygel-item-creator.vala b/src/rygel/rygel-item-creator.vala
index 5ed384b..cabcbe0 100644
--- a/src/rygel/rygel-item-creator.vala
+++ b/src/rygel/rygel-item-creator.vala
@@ -33,6 +33,8 @@ private errordomain Rygel.ItemCreatorError {
internal class Rygel.ItemCreator: GLib.Object, Rygel.StateMachine {
private static PatternSpec comment_pattern = new PatternSpec ("*<!--*-->*");
+ private const string INVALID_CHARS = "/?<>\\:*|\"";
+
// In arguments
public string container_id;
public string elements;
@@ -44,6 +46,7 @@ internal class Rygel.ItemCreator: GLib.Object, Rygel.StateMachine {
private ServiceAction action;
private DIDLLiteWriter didl_writer;
private DIDLLiteParser didl_parser;
+ private Regex title_regex;
public Cancellable cancellable { get; set; }
@@ -54,6 +57,12 @@ internal class Rygel.ItemCreator: GLib.Object, Rygel.StateMachine {
this.action = (owned) action;
this.didl_writer = new DIDLLiteWriter (null);
this.didl_parser = new DIDLLiteParser ();
+ try {
+ var pattern = "[" + Regex.escape_string (INVALID_CHARS) + "]";
+ this.title_regex = new Regex (pattern,
+ RegexCompileFlags.OPTIMIZE,
+ RegexMatchFlags.NOTEMPTY);
+ } catch (Error error) { } /* ignore */
}
public async void run () {
@@ -363,6 +372,14 @@ internal class Rygel.ItemCreator: GLib.Object, Rygel.StateMachine {
return true;
}
+ private string mangle_title (string title) throws Error {
+ return this.title_regex.replace_literal (title,
+ -1,
+ 0,
+ "_",
+ RegexMatchFlags.NOTEMPTY);
+ }
+
private async string create_uri (WritableContainer container, string title)
throws Error {
var dir = yield container.get_writable (this.cancellable);
@@ -373,7 +390,7 @@ internal class Rygel.ItemCreator: GLib.Object, Rygel.StateMachine {
}
var now = new GLib.DateTime.now_utc ();
- var file = dir.get_child_for_display_name (title);
+ var file = dir.get_child_for_display_name (this.mangle_title (title));
return file.get_uri () + now.format ("%s");
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]