aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvda <vda@69ca8d6d-28ef-0310-b511-8ec308f3f277>2006-09-03 16:33:58 +0000
committervda <vda@69ca8d6d-28ef-0310-b511-8ec308f3f277>2006-09-03 16:33:58 +0000
commit90707e1caa3c991d711e34bda798753dadfee96c (patch)
tree7d6dabb6e5fd834703b9db810393ad0d514aac47
parentf9b31bf3bcd38c95a6575265e2597fbf1da04b16 (diff)
downloadbusybox-w32-90707e1caa3c991d711e34bda798753dadfee96c.tar.gz
busybox-w32-90707e1caa3c991d711e34bda798753dadfee96c.tar.bz2
busybox-w32-90707e1caa3c991d711e34bda798753dadfee96c.zip
dpkg: fix buffer overflow (bug 983)
git-svn-id: svn://busybox.net/trunk/busybox@16044 69ca8d6d-28ef-0310-b511-8ec308f3f277
-rw-r--r--archival/dpkg.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/archival/dpkg.c b/archival/dpkg.c
index 0e5772062..ac4683398 100644
--- a/archival/dpkg.c
+++ b/archival/dpkg.c
@@ -1522,6 +1522,7 @@ static void unpack_package(deb_file_t *deb_file)
1522 const unsigned int status_num = search_status_hashtable(package_name); 1522 const unsigned int status_num = search_status_hashtable(package_name);
1523 const unsigned int status_package_num = status_hashtable[status_num]->package; 1523 const unsigned int status_package_num = status_hashtable[status_num]->package;
1524 char *info_prefix; 1524 char *info_prefix;
1525 char *list_filename;
1525 archive_handle_t *archive_handle; 1526 archive_handle_t *archive_handle;
1526 FILE *out_stream; 1527 FILE *out_stream;
1527 llist_t *accept_list = NULL; 1528 llist_t *accept_list = NULL;
@@ -1570,8 +1571,8 @@ static void unpack_package(deb_file_t *deb_file)
1570 unpack_ar_archive(archive_handle); 1571 unpack_ar_archive(archive_handle);
1571 1572
1572 /* Create the list file */ 1573 /* Create the list file */
1573 strcat(info_prefix, "list"); 1574 list_filename = bb_xasprintf("/var/lib/dpkg/info/%s.list", package_name);
1574 out_stream = xfopen(info_prefix, "w"); 1575 out_stream = bb_xfopen(list_filename, "w");
1575 while (archive_handle->sub_archive->passed) { 1576 while (archive_handle->sub_archive->passed) {
1576 /* the leading . has been stripped by data_extract_all_prefix already */ 1577 /* the leading . has been stripped by data_extract_all_prefix already */
1577 fputs(archive_handle->sub_archive->passed->data, out_stream); 1578 fputs(archive_handle->sub_archive->passed->data, out_stream);
@@ -1585,6 +1586,7 @@ static void unpack_package(deb_file_t *deb_file)
1585 set_status(status_num, "unpacked", 3); 1586 set_status(status_num, "unpacked", 3);
1586 1587
1587 free(info_prefix); 1588 free(info_prefix);
1589 free(list_filename);
1588} 1590}
1589 1591
1590static void configure_package(deb_file_t *deb_file) 1592static void configure_package(deb_file_t *deb_file)