|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
Index: lib/alexandria/ui/sidepane.rb
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
===================================================================
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
--- lib/alexandria/ui/sidepane.rb (revision 1012)
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
+++ lib/alexandria/ui/sidepane.rb (revision 1021)
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
@@ -19,18 +19,42 @@
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
x and x.name != @parent.selected_library.name
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
end
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
- def contains_illegal_character new_text
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
- /([^\w\s'"()&?!:;.\-])/.match(new_text)
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
+ # if new_text is invalid utf-8, returns true
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
+ # if new_text contains disallowed char (/ or initial .), returns a MatchData object
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
+ # otherwise returns nil
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
+ def contains_illegal_character(new_text)
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
+ begin
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
+ new_text.unpack("U*") # attempt to unpack as UTF-8 characters
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
+ match = /(^\.|\/)/.match(new_text)
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
+ # forbid / character (since Library names become dir names)
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
+ # also no initial . since that hides the Library (hidden file)
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
+ # forbidding an initial dot also disallows "." and ".."
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
+ # which are of course pre-existing directories.
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
+ return match
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
+ rescue Exception => ex
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
+ log.warn { "New library name not valid UTF-8: #{ex.message}" }
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
+ return true
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
+ end
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
+ # /([^\w\s'"()&?!:;.\-])/.match(new_text) # anglocentric!
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
end
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
def on_edited_library cell, path_string, new_text
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
- log.debug { "edited" }
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
+ log.debug { "edited library name #{new_text}" }
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
+ ## new_text = new_text.reverse # for testing;
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
+ # a great way to generate broken UTF-8
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
if cell.text != new_text
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
if match = contains_illegal_character(new_text)
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
- log.debug { "Illegal character" }
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
- ErrorDialog.new(@main_app, _("Invalid library name '%s'") % new_text,
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
- _("The name provided contains the " + "illegal character '%s'.") %
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
- match[1].gsub(/&/, "&"))
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
+ if match.instance_of? MatchData
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
+ chars = match[1].gsub(/&/, "&")
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
+ ErrorDialog.new(@main_app, _("Invalid library name '%s'") % new_text,
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
+ _("The name provided contains the " +
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
+ "disallowed character %s ") % chars)
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
+ else
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
+ ErrorDialog.new(@main_app, _("Invalid library name"),
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
+ _("The name provided contains " +
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
+ "invalid characters."))
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
+ end
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
+
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
elsif new_text.strip.empty?
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
log.debug { "Empty text" }
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
6a44a4c |
ErrorDialog.new(@main_app, _("The library name " +
|