X-Git-Url: http://git.openwrt.org/?p=project%2Fopkg-lede.git;a=blobdiff_plain;f=libopkg%2Fopkg_install.c;fp=libopkg%2Fopkg_install.c;h=0b7f1f1cdccfe7c223a661d24208fc29daf49958;hp=d2d919a85651b9af41ca12c4bf518b1f143a9886;hb=cb6640381808dd629cfa58a21ceaf12e91a82e68;hpb=7708a01a084872bbe4c46f36d2da021fdeb10862 diff --git a/libopkg/opkg_install.c b/libopkg/opkg_install.c index d2d919a..0b7f1f1 100644 --- a/libopkg/opkg_install.c +++ b/libopkg/opkg_install.c @@ -1255,6 +1255,7 @@ int opkg_install_pkg(pkg_t * pkg, int from_upgrade) char *file_sha256, *pkg_sha256; sigset_t newset, oldset; const char *local_filename; + struct stat pkg_stat; time_t now; if (from_upgrade) @@ -1366,6 +1367,29 @@ int opkg_install_pkg(pkg_t * pkg, int from_upgrade) } #endif + /* Check file size */ + err = lstat(local_filename, &pkg_stat); + + if (err) { + opkg_msg(ERROR, "Failed to stat %s: %s\n", + local_filename, strerror(errno)); + return -1; + } + + if (pkg_stat.st_size != pkg_get_int(pkg, PKG_SIZE)) { + if (!conf->force_checksum) { + opkg_msg(ERROR, + "Package size mismatch: %s is %lld bytes, expecting %lld bytes\n", + pkg->name, (long long int)pkg_stat.st_size, + (long long int)pkg_get_int(pkg, PKG_SIZE)); + return -1; + } else { + opkg_msg(NOTICE, + "Ignored %s size mismatch.\n", + pkg->name); + } + } + /* Check for md5 values */ pkg_md5 = pkg_get_md5(pkg); if (pkg_md5) {