summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--debian/changelog4
-rw-r--r--dpkg-deb/main.c2
-rw-r--r--dselect/main.cc2
-rw-r--r--include/dpkg.h.in2
-rw-r--r--lib/startup.c5
-rw-r--r--main/main.c2
-rw-r--r--main/query.c2
-rw-r--r--split/main.c2
9 files changed, 20 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index 2ba386db4..4af9ce1fa 100644
--- a/ChangeLog
+++ b/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.
diff --git a/debian/changelog b/debian/changelog
index 16069e8c4..ea842d8b3 100644
--- a/debian/changelog
+++ b/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
diff --git a/dpkg-deb/main.c b/dpkg-deb/main.c
index 54b10618d..dad11cb98 100644
--- a/dpkg-deb/main.c
+++ b/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);
}
diff --git a/dselect/main.cc b/dselect/main.cc
index 831bfef91..4dfc329ae 100644
--- a/dselect/main.cc
+++ b/dselect/main.cc
@@ -494,7 +494,7 @@ int main(int, const char *const *argv) {
}
cursesoff();
- standard_shutdown();
+ standard_shutdown(0);
return(0);
}
diff --git a/include/dpkg.h.in b/include/dpkg.h.in
index 06c4074de..f43d04c6d 100644
--- a/include/dpkg.h.in
+++ b/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 ***/
diff --git a/lib/startup.c b/lib/startup.c
index a669af545..1458ca3df 100644
--- a/lib/startup.c
+++ b/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();
}
diff --git a/main/main.c b/main/main.c
index 8e8ef1225..a58154c64 100644
--- a/main/main.c
+++ b/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();
}
diff --git a/main/query.c b/main/query.c
index 2ff4a57d3..c3f69a1e1 100644
--- a/main/query.c
+++ b/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();
}
diff --git a/split/main.c b/split/main.c
index 0f9d77b0e..4ab3c956a 100644
--- a/split/main.c
+++ b/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);
}