Prechádzať zdrojové kódy

* apt-pkg/contrib/cmdline.cc:
- apply patch from Daniel Hartwig to fix a segfault in case
the LongOpt is empty (Closes: #676331)

Daniel Hartwig 14 rokov pred
rodič
commit
ae2be086c6

+ 3 - 2
apt-pkg/contrib/cmndline.cc

@@ -92,8 +92,9 @@ bool CommandLine::Parse(int argc,const char **argv)
       // Match up to a = against the list
       Args *A;
       const char *OptEnd = strchrnul(Opt, '=');
-      for (A = ArgList; A->end() == false && 
-	   stringcasecmp(Opt,OptEnd,A->LongOpt) != 0; A++);
+      for (A = ArgList; A->end() == false &&
+	   (A->LongOpt == 0 || stringcasecmp(Opt,OptEnd,A->LongOpt) != 0);
+	   ++A);
       
       // Failed, look for a word after the first - (no-foo)
       bool PreceedMatch = false;

+ 3 - 0
debian/changelog

@@ -19,6 +19,9 @@ apt (0.9.5.2) UNRELEASED; urgency=low
       as we do in the manpage and as the debian-installer does
   * doc/apt-get.8.xml:
     - use apt-utils as package example instead of libc6
+  * apt-pkg/contrib/cmdline.cc:
+    - apply patch from Daniel Hartwig to fix a segfault in case
+      the LongOpt is empty (Closes: #676331)
 
   [ Justin B Rye ]
   * doc/apt-cdrom.8.xml:

+ 21 - 0
test/libapt/commandline_test.cc

@@ -0,0 +1,21 @@
+#include <apt-pkg/cmndline.h>
+
+#include "assert.h"
+
+int main()
+{
+   CommandLine::Args Args[] = {
+      { 't', 0, "Test::Worked", 0 },
+      { 'z', "zero", "Test::Zero", 0 },
+      {0,0,0,0}
+   };
+
+   CommandLine CmdL(Args,_config);
+   char const * argv[] = { "test", "--zero", "-t" };
+   CmdL.Parse(3 , argv);
+
+   equals(true, _config->FindB("Test::Worked", false));
+   equals(true, _config->FindB("Test::Zero", false));
+
+   return 0;
+}

+ 6 - 0
test/libapt/makefile

@@ -33,6 +33,12 @@ SLIBS = -lapt-pkg
 SOURCE = getlistoffilesindir_test.cc
 include $(PROGRAM_H)
 
+# Program for testing CommandLine reconstruction
+PROGRAM = Commandline${BASENAME}
+SLIBS = -lapt-pkg
+SOURCE = commandline_test.cc
+include $(PROGRAM_H)
+
 # Program for testing CommandLine reconstruction
 PROGRAM = CommandlineAsString${BASENAME}
 SLIBS = -lapt-pkg