summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Vogt <michael.vogt@ubuntu.com>2011-07-26 11:10:47 +0200
committerMichael Vogt <michael.vogt@ubuntu.com>2011-07-26 11:10:47 +0200
commitb9dc47069ab90a79ca3b9eae3cc85d38062d57ee (patch)
treee475dac924a3770c568e5a4149f4bc91c9275e47
parente0146bb1813743e9042c2aad4d1131ca382861c1 (diff)
add another escape test case, fixup octal one (its \0XX instead of \0XXX)
-rw-r--r--apt-pkg/contrib/strutl.cc9
-rw-r--r--apt-pkg/contrib/strutl.h2
-rw-r--r--test/libapt/strutil_test.cc6
3 files changed, 11 insertions, 6 deletions
diff --git a/apt-pkg/contrib/strutl.cc b/apt-pkg/contrib/strutl.cc
index f9d8d7e90..e998d74dc 100644
--- a/apt-pkg/contrib/strutl.cc
+++ b/apt-pkg/contrib/strutl.cc
@@ -1242,10 +1242,10 @@ bool CheckDomainList(const string &Host,const string &List)
/*}}}*/
// ProcessEscapeSequences /*{{{*/
// ---------------------------------------------------------------------
-/* */
+/* unescape (\0XX and \xXX) from a string */
string DeEscapeString(string &input)
{
- char tmp[5];
+ char tmp[3];
string::const_iterator it, escape_start;
string output, octal, hex;
for (it = input.begin(); it != input.end(); it++)
@@ -1277,11 +1277,10 @@ string DeEscapeString(string &input)
switch (*it)
{
case '0':
- if (it + 3 <= input.end()) {
+ if (it + 2 <= input.end()) {
tmp[0] = it[1];
tmp[1] = it[2];
- tmp[2] = it[3];
- tmp[3] = 0;
+ tmp[2] = 0;
output += (char)strtol(tmp, 0, 8);
it += 2;
}
diff --git a/apt-pkg/contrib/strutl.h b/apt-pkg/contrib/strutl.h
index 43bbfe366..2a6bc1990 100644
--- a/apt-pkg/contrib/strutl.h
+++ b/apt-pkg/contrib/strutl.h
@@ -40,7 +40,7 @@ string QuoteString(const string &Str,const char *Bad);
string DeQuoteString(const string &Str);
string DeQuoteString(string::const_iterator const &begin, string::const_iterator const &end);
-// unescape (\0XXX and \xXX) from a string
+// unescape (\0XX and \xXX) from a string
string DeEscapeString(string &input);
string SizeToStr(double Bytes);
diff --git a/test/libapt/strutil_test.cc b/test/libapt/strutil_test.cc
index 8d81a0c6c..af6eb2cc6 100644
--- a/test/libapt/strutil_test.cc
+++ b/test/libapt/strutil_test.cc
@@ -36,5 +36,11 @@ int main(int argc,char *argv[])
output = DeEscapeString(input);
equals(output, expected);
+ // the string that we actually need it for
+ input = "/media/Ubuntu\\04011.04\\040amd64";
+ expected = "/media/Ubuntu 11.04 amd64";
+ output = DeEscapeString(input);
+ equals(output, expected);
+
return 0;
}