diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2006-09-03 16:33:58 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2006-09-03 16:33:58 +0000 |
commit | 1da6a2166621d26f84cfb9b8711ded657fdf8d37 (patch) | |
tree | 7d6dabb6e5fd834703b9db810393ad0d514aac47 | |
parent | 21afc7dc291f1cb11feec7a9766bf3542545f581 (diff) | |
download | busybox-w32-1da6a2166621d26f84cfb9b8711ded657fdf8d37.tar.gz busybox-w32-1da6a2166621d26f84cfb9b8711ded657fdf8d37.tar.bz2 busybox-w32-1da6a2166621d26f84cfb9b8711ded657fdf8d37.zip |
dpkg: fix buffer overflow (bug 983)
-rw-r--r-- | archival/dpkg.c | 6 |
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 | ||
1590 | static void configure_package(deb_file_t *deb_file) | 1592 | static void configure_package(deb_file_t *deb_file) |