aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe-php-shim/src
diff options
context:
space:
mode:
Diffstat (limited to 'crates/shirabe-php-shim/src')
-rw-r--r--crates/shirabe-php-shim/src/runtime.rs7
1 files changed, 6 insertions, 1 deletions
diff --git a/crates/shirabe-php-shim/src/runtime.rs b/crates/shirabe-php-shim/src/runtime.rs
index 73a4189..d051f3d 100644
--- a/crates/shirabe-php-shim/src/runtime.rs
+++ b/crates/shirabe-php-shim/src/runtime.rs
@@ -76,9 +76,14 @@ pub fn defined(name: &str) -> bool {
// `Composer\Autoload\ClassLoader` (and its `getRegisteredLoaders`) is absent from the running
// process; the class-name form therefore reports no such method. The object form needs runtime
// reflection that PhpMixed::Object does not carry.
-pub fn method_exists(object_or_class: &PhpMixed, _method_name: &str) -> bool {
+pub fn method_exists(object_or_class: &PhpMixed, method_name: &str) -> bool {
match object_or_class {
PhpMixed::String(_) => false,
+ // `ZipArchiver::archive` guards `$zip->setExternalAttributesName(...)` with
+ // `method_exists($zip, 'setExternalAttributesName')` (only available with libzip >= 0.11.2).
+ // The `zip`-crate-backed shim cannot amend an already-written entry's external attributes,
+ // so the method is deliberately absent here and the guard reports it missing.
+ PhpMixed::Null if method_name == "setExternalAttributesName" => false,
_ => todo!(),
}
}