#include <string.h>
#include <sys/stat.h>
-#ifdef HAVE_PCRE
#include <pcre.h>
-#endif
+
#ifdef HAVE_LIBMAGIC
#include <magic.h>
#endif
#include "guestfs-internal-actions.h"
#include "guestfs_protocol.h"
-#if defined(HAVE_PCRE) && defined(HAVE_LIBMAGIC)
+#if defined(HAVE_LIBMAGIC)
static pcre *re_file_elf;
static pcre *re_elf_ppc64;
else
method = "cat";
+ /* Security: Refuse to download initrd if it is huge. */
+ int64_t size = guestfs_filesize (g, path);
+ if (size == -1 || size > 100000000) {
+ error (g, _("size of %s unreasonable (%" PRIi64 " bytes)"),
+ path, size);
+ goto out;
+ }
+
if (mkdtemp (dir) == NULL) {
perrorf (g, "mkdtemp");
goto out;
return ret; /* caller frees */
}
-#else /* no PCRE or libmagic at compile time */
+#else /* no libmagic at compile time */
/* XXX Should be an optgroup. */
#define NOT_IMPL(r) \
- error (g, _("file-architecture API not available since this version of libguestfs was compiled without PCRE or libmagic libraries")); \
+ error (g, _("file-architecture API not available since this version of libguestfs was compiled without the libmagic library")); \
return r
char *
NOT_IMPL(NULL);
}
-#endif /* no PCRE or libmagic at compile time */
+#endif /* no libmagic at compile time */