Преглед изворни кода

Don't call nffreeall, in any of the c/c++ programs. It appears dselect
slightly corrupts it's memory enough that it can't be freed without
segfaulting.

Adam Heath пре 24 година
родитељ
комит
d30ba9a6e0
9 измењених фајлова са 20 додато и 8 уклоњено
  1. 7 0
      ChangeLog
  2. 4 0
      debian/changelog
  3. 1 1
      dpkg-deb/main.c
  4. 1 1
      dselect/main.cc
  5. 1 1
      include/dpkg.h.in
  6. 3 2
      lib/startup.c
  7. 1 1
      main/main.c
  8. 1 1
      main/query.c
  9. 1 1
      split/main.c

+ 7 - 0
ChangeLog

@@ -1,3 +1,10 @@
+Sat Aug 31 23:46:04 CDT 2002 Adam Heath <doogie@debian.org>
+
+  * dpkg-deb/main.c, dselect/main.cc, include/dpkg.h.in, lib/startup.c
+    main/main.c, main/query.c, split/main.c:  Don't call nffreeall, in any
+    of the c/c++ programs.  It appears dselect slightly corrupts it's
+    memory enough that it can't be freed without segfaulting.
+
 Sat Aug 31 23:42:08 CDT 2002 Adam Heath <doogie@debian.org>
 
   * version-nr, debian/changelog: Modified for version 1.10.6.

+ 4 - 0
debian/changelog

@@ -1,5 +1,9 @@
 dpkg (1.10.6) unstable; urgency=low
 
+  * Don't call nffreeall, in any of the c/c++ programs.  It appears dselect
+    slightly corrupts it's memory enough that it can't be freed without
+    segfaulting.  Closes: #159023.
+
  -- Adam Heath <doogie@debian.org>  UNRELEASED
 
 dpkg (1.10.5) unstable; urgency=low

+ 1 - 1
dpkg-deb/main.c

@@ -170,7 +170,7 @@ int main(int argc, const char *const *argv) {
 
   unsetenv("GZIP");
   action(argv);
-  standard_shutdown();
+  standard_shutdown(0);
   exit(0);
 }
 

+ 1 - 1
dselect/main.cc

@@ -494,7 +494,7 @@ int main(int, const char *const *argv) {
   }
 
   cursesoff();
-  standard_shutdown();
+  standard_shutdown(0);
   return(0);
 }
 

+ 1 - 1
include/dpkg.h.in

@@ -168,7 +168,7 @@ extern const char printforhelp[];
 /*** from startup.c ***/
 
 void standard_startup(jmp_buf *ejbuf, int argc, const char *const **argv, const char *prog, int loadcfg, const struct cmdinfo cmdinfos[]);
-void standard_shutdown(void);
+void standard_shutdown(int freemem);
 
 /*** from ehandle.c ***/
 

+ 3 - 2
lib/startup.c

@@ -57,8 +57,9 @@ void standard_startup(jmp_buf *ejbuf, int argc, const char *const **argv, const
   myopt(argv,cmdinfos);
 }
 
-void standard_shutdown(void) {
+void standard_shutdown(int freemem) {
   set_error_display(0,0);
   error_unwind(ehflag_normaltidy);
-  nffreeall();
+  if (freemem)
+    nffreeall();
 }

+ 1 - 1
main/main.c

@@ -558,7 +558,7 @@ int main(int argc, const char *const *argv) {
 
   actionfunction(argv);
 
-  standard_shutdown();
+  standard_shutdown(0);
 
   return reportbroken_retexitstatus();
 }

+ 1 - 1
main/query.c

@@ -547,7 +547,7 @@ int main(int argc, const char *const *argv) {
 
   actionfunction(argv);
 
-  standard_shutdown();
+  standard_shutdown(0);
 
   return reportbroken_retexitstatus();
 }

+ 1 - 1
split/main.c

@@ -169,6 +169,6 @@ int main(int argc, const char *const *argv) {
 
   if (ferror(stderr)) werr("stderr");
   
-  standard_shutdown();
+  standard_shutdown(0);
   exit(0);
 }