Просмотр исходного кода

add another escape test case, fixup octal one (its \0XX instead of \0XXX)

Michael Vogt лет назад: 15
Родитель
Сommit
b9dc47069a
3 измененных файлов с 11 добавлено и 6 удалено
  1. 4 5
      apt-pkg/contrib/strutl.cc
  2. 1 1
      apt-pkg/contrib/strutl.h
  3. 6 0
      test/libapt/strutil_test.cc

+ 4 - 5
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;
             }

+ 1 - 1
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);

+ 6 - 0
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;
 }