110 lines
3.7 KiB
Diff
110 lines
3.7 KiB
Diff
|
From 485e2a4e43458a417603d4ed219af3e79854ef46 Mon Sep 17 00:00:00 2001
|
||
|
From: Arjen de Korte <build+github@de-korte.org>
|
||
|
Date: Sat, 2 Jan 2021 17:57:18 +0100
|
||
|
Subject: [PATCH 1/1] phar: honor SOURCE_DATE_EPOCH for timestamps
|
||
|
|
||
|
In order to build reproducible phars, honor SOURCE_DATE_EPOCH
|
||
|
if set
|
||
|
|
||
|
Signed-off-by: Arjen de Korte <build+github@de-korte.org>
|
||
|
---
|
||
|
ext/phar/phar.c | 2 +-
|
||
|
ext/phar/phar_internal.h | 15 +++++++++++++++
|
||
|
ext/phar/stream.c | 2 +-
|
||
|
ext/phar/tar.c | 2 +-
|
||
|
ext/phar/util.c | 2 +-
|
||
|
ext/phar/zip.c | 2 +-
|
||
|
6 files changed, 18 insertions(+), 5 deletions(-)
|
||
|
|
||
|
Index: php-8.2.16/ext/phar/phar.c
|
||
|
===================================================================
|
||
|
--- php-8.2.16.orig/ext/phar/phar.c
|
||
|
+++ php-8.2.16/ext/phar/phar.c
|
||
|
@@ -2999,7 +2999,7 @@ int phar_flush(phar_archive_data *phar,
|
||
|
4: metadata-len
|
||
|
+: metadata
|
||
|
*/
|
||
|
- mytime = time(NULL);
|
||
|
+ mytime = source_date_epoch_time(NULL);
|
||
|
phar_set_32(entry_buffer, entry->uncompressed_filesize);
|
||
|
phar_set_32(entry_buffer+4, mytime);
|
||
|
phar_set_32(entry_buffer+8, entry->compressed_filesize);
|
||
|
Index: php-8.2.16/ext/phar/phar_internal.h
|
||
|
===================================================================
|
||
|
--- php-8.2.16.orig/ext/phar/phar_internal.h
|
||
|
+++ php-8.2.16/ext/phar/phar_internal.h
|
||
|
@@ -427,6 +427,21 @@ static inline enum phar_fp_type phar_get
|
||
|
return PHAR_G(cached_fp)[entry->phar->phar_pos].manifest[entry->manifest_pos].fp_type;
|
||
|
}
|
||
|
|
||
|
+static inline time_t source_date_epoch_time(time_t *tloc)
|
||
|
+{
|
||
|
+ const char *sde;
|
||
|
+ time_t ts;
|
||
|
+
|
||
|
+ tsrm_env_lock();
|
||
|
+ sde = getenv("SOURCE_DATE_EPOCH");
|
||
|
+ ts = (sde) ? strtoul(sde, NULL, 10) : time(0);
|
||
|
+ tsrm_env_unlock();
|
||
|
+ if (tloc) {
|
||
|
+ *tloc = ts;
|
||
|
+ }
|
||
|
+ return ts;
|
||
|
+}
|
||
|
+
|
||
|
static inline zend_off_t phar_get_fp_offset(phar_entry_info *entry)
|
||
|
{
|
||
|
if (!entry->is_persistent) {
|
||
|
Index: php-8.2.16/ext/phar/stream.c
|
||
|
===================================================================
|
||
|
--- php-8.2.16.orig/ext/phar/stream.c
|
||
|
+++ php-8.2.16/ext/phar/stream.c
|
||
|
@@ -474,7 +474,7 @@ static int phar_stream_flush(php_stream
|
||
|
phar_entry_data *data = (phar_entry_data *) stream->abstract;
|
||
|
|
||
|
if (data->internal_file->is_modified) {
|
||
|
- data->internal_file->timestamp = time(0);
|
||
|
+ data->internal_file->timestamp = source_date_epoch_time(0);
|
||
|
ret = phar_flush(data->phar, 0, 0, 0, &error);
|
||
|
if (error) {
|
||
|
php_stream_wrapper_log_error(stream->wrapper, REPORT_ERRORS, "%s", error);
|
||
|
Index: php-8.2.16/ext/phar/tar.c
|
||
|
===================================================================
|
||
|
--- php-8.2.16.orig/ext/phar/tar.c
|
||
|
+++ php-8.2.16/ext/phar/tar.c
|
||
|
@@ -972,7 +972,7 @@ int phar_tar_flush(phar_archive_data *ph
|
||
|
char halt_stub[] = "__HALT_COMPILER();";
|
||
|
|
||
|
entry.flags = PHAR_ENT_PERM_DEF_FILE;
|
||
|
- entry.timestamp = time(NULL);
|
||
|
+ entry.timestamp = source_date_epoch_time(NULL);
|
||
|
entry.is_modified = 1;
|
||
|
entry.is_crc_checked = 1;
|
||
|
entry.is_tar = 1;
|
||
|
Index: php-8.2.16/ext/phar/util.c
|
||
|
===================================================================
|
||
|
--- php-8.2.16.orig/ext/phar/util.c
|
||
|
+++ php-8.2.16/ext/phar/util.c
|
||
|
@@ -574,7 +574,7 @@ phar_entry_data *phar_get_or_create_entr
|
||
|
|
||
|
phar_add_virtual_dirs(phar, path, path_len);
|
||
|
etemp.is_modified = 1;
|
||
|
- etemp.timestamp = time(0);
|
||
|
+ etemp.timestamp = source_date_epoch_time(0);
|
||
|
etemp.is_crc_checked = 1;
|
||
|
etemp.phar = phar;
|
||
|
etemp.filename = estrndup(path, path_len);
|
||
|
Index: php-8.2.16/ext/phar/zip.c
|
||
|
===================================================================
|
||
|
--- php-8.2.16.orig/ext/phar/zip.c
|
||
|
+++ php-8.2.16/ext/phar/zip.c
|
||
|
@@ -1237,7 +1237,7 @@ int phar_zip_flush(phar_archive_data *ph
|
||
|
|
||
|
pass.error = &temperr;
|
||
|
entry.flags = PHAR_ENT_PERM_DEF_FILE;
|
||
|
- entry.timestamp = time(NULL);
|
||
|
+ entry.timestamp = source_date_epoch_time(NULL);
|
||
|
entry.is_modified = 1;
|
||
|
entry.is_zip = 1;
|
||
|
entry.phar = phar;
|