38 lines
1.2 KiB
Diff
38 lines
1.2 KiB
Diff
Index: C/libbb/unarchive.c
|
|
===================================================================
|
|
--- C.orig/libbb/unarchive.c 2005-02-05 16:58:19.000000000 -0500
|
|
+++ C/libbb/unarchive.c 2006-08-08 08:10:14.268431408 -0400
|
|
@@ -28,7 +28,7 @@
|
|
#include "libbb.h"
|
|
|
|
#define CONFIG_FEATURE_TAR_OLDGNU_COMPATABILITY 1
|
|
-// #define CONFIG_FEATURE_TAR_GNU_EXTENSIONS
|
|
+#define CONFIG_FEATURE_TAR_GNU_EXTENSIONS 1
|
|
|
|
#ifdef CONFIG_FEATURE_TAR_GNU_EXTENSIONS
|
|
static char *longname = NULL;
|
|
@@ -657,7 +657,10 @@
|
|
# ifdef CONFIG_FEATURE_TAR_GNU_EXTENSIONS
|
|
case 'L': {
|
|
longname = xmalloc(tar_entry->size + 1);
|
|
- archive_xread_all((int) tar_stream, longname, tar_entry->size);
|
|
+ if(fread(longname, tar_entry->size, 1, tar_stream) != 1) {
|
|
+ error_msg("Short read in gnu extension");
|
|
+ return(NULL);
|
|
+ }
|
|
longname[tar_entry->size] = '\0';
|
|
archive_offset += tar_entry->size;
|
|
|
|
@@ -665,7 +668,10 @@
|
|
}
|
|
case 'K': {
|
|
linkname = xmalloc(tar_entry->size + 1);
|
|
- archive_xread_all((int) tar_stream, longname, tar_entry->size);
|
|
+ if(fread(linkname, tar_entry->size, 1, tar_stream) != 1) {
|
|
+ error_msg("Short read in gnu extension");
|
|
+ return(NULL);
|
|
+ }
|
|
linkname[tar_entry->size] = '\0';
|
|
archive_offset += tar_entry->size;
|
|
|