aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2006-09-03 16:33:58 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2006-09-03 16:33:58 +0000
commit1da6a2166621d26f84cfb9b8711ded657fdf8d37 (patch)
tree7d6dabb6e5fd834703b9db810393ad0d514aac47
parent21afc7dc291f1cb11feec7a9766bf3542545f581 (diff)
downloadbusybox-w32-1da6a2166621d26f84cfb9b8711ded657fdf8d37.tar.gz
busybox-w32-1da6a2166621d26f84cfb9b8711ded657fdf8d37.tar.bz2
busybox-w32-1da6a2166621d26f84cfb9b8711ded657fdf8d37.zip
dpkg: fix buffer overflow (bug 983)
-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)