summaryrefslogtreecommitdiffstats
path: root/rpminfo.c
diff options
context:
space:
mode:
authorRemi Collet <remi@remirepo.net>2023-10-13 10:11:23 +0200
committerRemi Collet <remi@php.net>2023-10-13 10:11:23 +0200
commit393b64580b99cbca00d7ea752b56708b3f9f6979 (patch)
tree36bbd90d9ffa7d370d78a1d5ecb38dfacb6d9129 /rpminfo.c
parentb324c21c9152b5c0b7dbdd0c2f412dcdebded4ac (diff)
fix stack smashing on 32-bit
Diffstat (limited to 'rpminfo.c')
-rw-r--r--rpminfo.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/rpminfo.c b/rpminfo.c
index 70676f7..7eb992e 100644
--- a/rpminfo.c
+++ b/rpminfo.c
@@ -618,7 +618,11 @@ static int php_zip_ops_stat(php_stream *stream, php_stream_statbuf *ssb)
STREAM_DATA_FROM_STREAM();
if (self) {
- return rpmfiStat(self->fi, 0, &ssb->sb);
+ struct stat s[2]; // librpm may use different size (32-bit)
+ int rc;
+ rc = rpmfiStat(self->fi, 0, s);
+ memcpy(&ssb->sb, s, sizeof(ssb->sb));
+ return rc;
}
return -1;
}
@@ -761,7 +765,9 @@ static int php_stream_rpm_stat(php_stream_wrapper *wrapper, const char *url, int
self = php_stream_rpm_finder(url);
if (self) {
- rc = rpmfiStat(self->fi, 0, &ssb->sb);
+ struct stat s[2]; // librpm may use different size (32-bit)
+ rc = rpmfiStat(self->fi, 0, s);
+ memcpy(&ssb->sb, s, sizeof(ssb->sb));
php_rpm_ops_free(self, 1);
}