diff --git a/ChangeLog b/ChangeLog index 79b0f0f70..0c6d54cb3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -240,6 +240,7 @@ to Paul-Gheorghe Barbu). + Fixed bug #901, which was preventing multiple IDs and UUIDs from being used as a filter (thanks to Bryce Harrington). + + Fixed bug #917, which mis-encoded quotes (thanks to Uli Martens). # Untracked Bugs, biggest first. + Fixed bug that required the '%YAML' prologue in a YAML import. diff --git a/src/Nibbler.cpp b/src/Nibbler.cpp index e23b7f64d..4df1a9eba 100644 --- a/src/Nibbler.cpp +++ b/src/Nibbler.cpp @@ -67,10 +67,10 @@ Nibbler::Nibbler (const std::string& input) //////////////////////////////////////////////////////////////////////////////// Nibbler::Nibbler (const Nibbler& other) +: _input (other._input) +, _length (other._length) +, _cursor (other._cursor) { - _input = other._input; - _length = other._length; - _cursor = other._cursor; } //////////////////////////////////////////////////////////////////////////////// diff --git a/src/ViewTask.cpp b/src/ViewTask.cpp index db0f9e0bd..d2eaf3a13 100644 --- a/src/ViewTask.cpp +++ b/src/ViewTask.cpp @@ -25,7 +25,6 @@ // //////////////////////////////////////////////////////////////////////////////// - #define L10N // Localization complete. #include diff --git a/src/util.cpp b/src/util.cpp index 520cf552d..2e40c12de 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -492,14 +492,12 @@ unsigned burndown_size (unsigned ntasks) //////////////////////////////////////////////////////////////////////////////// // Encode values prior to serialization. -// " -> &dquot; // [ -> &open; // ] -> &close; const std::string encode (const std::string& value) { std::string modified = value; - str_replace (modified, "\"", "&dquot;"); str_replace (modified, "[", "&open;"); str_replace (modified, "]", "&close;"); @@ -521,14 +519,14 @@ const std::string decode (const std::string& value) std::string modified = value; // Supported encodings. - str_replace (modified, "&dquot;", "\""); - str_replace (modified, """, "'"); str_replace (modified, "&open;", "["); str_replace (modified, "&close;", "]"); // Support for deprecated encodings. These cannot be removed or old files // will not be parsable. Not just old files - completed.data can contain // tasks formatted/encoded using these. + str_replace (modified, "&dquot;", "\""); + str_replace (modified, """, "'"); str_replace (modified, "&squot;", "'"); // Deprecated 2.0 str_replace (modified, ",", ","); // Deprecated 2.0 str_replace (modified, ":", ":"); // Deprecated 2.0 diff --git a/test/bug.917.t b/test/bug.917.t new file mode 100755 index 000000000..60d1ec234 --- /dev/null +++ b/test/bug.917.t @@ -0,0 +1,64 @@ +#! /usr/bin/perl +################################################################################ +## taskwarrior - a command line task list manager. +## +## Copyright 2006-2012, Paul Beckingham, Federico Hernandez. +## +## Permission is hereby granted, free of charge, to any person obtaining a copy +## of this software and associated documentation files (the "Software"), to deal +## in the Software without restriction, including without limitation the rights +## to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +## copies of the Software, and to permit persons to whom the Software is +## furnished to do so, subject to the following conditions: +## +## The above copyright notice and this permission notice shall be included +## in all copies or substantial portions of the Software. +## +## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +## OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +## FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +## THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +## LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +## OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +## SOFTWARE. +## +## http://www.opensource.org/licenses/mit-license.php +## +################################################################################ + +use strict; +use warnings; +use Test::More tests => 6; + +# Create the rc file. +if (open my $fh, '>', 'bug.rc') +{ + print $fh "data.location=.\n", + "confirmation=off\n"; + close $fh; + ok (-r 'bug.rc', 'Created bug.rc'); +} + +# Bug 917: escaping runs amok +qx{../src/task rc:bug.rc add one \\'two\\' three}; +qx{../src/task rc:bug.rc add four \\"five\\" six}; +my $output = qx{../src/task rc:bug.rc list}; +like ($output, qr/one 'two' three/, 'Single quote preserved'); +like ($output, qr/four "five" six/, 'Double quote preserved'); + +qx{../src/task rc:bug.rc 1,2 mod +tag}; +$output = qx{../src/task rc:bug.rc list}; +like ($output, qr/one 'two' three/, 'Single quote preserved after modification'); +like ($output, qr/four "five" six/, 'Double quote preserved after modification'); + +# Cleanup. +unlink qw(pending.data completed.data undo.data backlog.data synch.key bug.rc); +ok (! -r 'pending.data' && + ! -r 'completed.data' && + ! -r 'undo.data' && + ! -r 'backlog.data' && + ! -r 'synch.key' && + ! -r 'bug.rc', 'Cleanup'); + +exit 0; +