Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions ext/standard/JitRandomBytes.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

namespace PHPCompiler\ext\standard;

use PHPCompiler\JIT\Builtin\StringRandomBytes;
use PHPCompiler\JIT\Context;
use PHPCompiler\JIT\NestedJitCompileScope;
use PHPLLVM\Value;
Expand All @@ -22,6 +23,8 @@ public static function generate(Context $context, Value $lengthI64): Value
return JitRandomBytesKernel::invoke($context, $lengthI64);
}

StringRandomBytes::ensureLinked($context); // #34332 — Type always-on random_bytes ABI dropped

return $context->builder->call(
$context->lookupFunction('__compiler_random_bytes'),
$lengthI64
Expand Down
24 changes: 7 additions & 17 deletions lib/JIT/Builtin/Type.php
Original file line number Diff line number Diff line change
Expand Up @@ -475,14 +475,14 @@ public function register(): void {
// drift mints time_nanosleep.1 (#31894 / #32122).
// __compiler_password_random_bytes / __compiler_libcrypt always-on shells
// removed (#32851): NestedJIT/AOT bridges are PasswordRandomBytesRuntime /
// LibcryptRuntime (getNamedFunction first; Type::initialize still ensureLinked).
// LibcryptRuntime (getNamedFunction first; call-site ensureLinked #34332).
// Leftover Type empty decls vs Runtime ABI drift mint password_random_bytes.1 /
// libcrypt.1 (#31894 / #32122).
// __compiler_password_hash / __compiler_password_verify / __compiler_crypt /
// __compiler_password_get_info / __compiler_password_needs_rehash /
// __compiler_password_algos always-on shells removed (#32855): NestedJIT/AOT
// bridge is PasswordCryptoRuntime (getNamedFunction first; Type::initialize
// still ensureLinked). Leftover Type empty decls vs Runtime ABI drift mint
// bridge is PasswordCryptoRuntime (getNamedFunction first; call-site
// ensureLinked #34332). Leftover Type empty decls vs Runtime ABI drift mint
// password_hash.1 (#31894 / #32122).
// __compiler_strtr / __compiler_strtr_array always-on shells removed (#32858):
// NestedJIT/AOT bridge is StringStrtr (getNamedFunction first; Type::initialize
Expand Down Expand Up @@ -844,21 +844,11 @@ public function initialize(): void {
PosixSetpgidJit::ensureLinked($this->context);
StringInfo::ensureLinked($this->context);
StringVersionCompare::ensureLinked($this->context);
LibcryptRuntime::ensureLinked($this->context);
PasswordRandomBytesRuntime::ensureLinked($this->context);
StringRandomBytes::ensureLinked($this->context);
PasswordCryptoRuntime::ensureLinked($this->context);
StringHashCrypto::ensureLinked($this->context);
// openssl / hash / json / libcrypt / password / random_bytes always-on
// ensureLinked removed (#34332): JitOpenssl* / OpensslEncryptCrypto /
// JitHash / JitJson* / JitLibcrypt / JitPassword* / JitRandomBytes /
// JitPasswordRandomBytes already ensureLinked before lookup (peer #34327).
StringPregMatch::ensureLinked($this->context);
OpensslEncryptRuntime::ensureLinked($this->context);
OpensslSignRuntime::ensureLinked($this->context);
OpensslDigestRuntime::ensureLinked($this->context);
OpensslPbkdf2Runtime::ensureLinked($this->context);
StringHashEquals::ensureLinked($this->context);
StringHashHmacAlgos::ensureLinked($this->context);
StringHashAlgos::ensureLinked($this->context);
StringJsonEncode::ensureLinked($this->context);
StringJsonDecode::ensureLinked($this->context);
StringXmlrpc::ensureLinked($this->context);
StringFormat::ensureLinked($this->context);
Sscanf::ensureLinked($this->context);
Expand Down
7 changes: 4 additions & 3 deletions test/unit/TypeDeadHashCryptoAbiRuntimeShrinkTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ public function testTypeBuiltinDropsLeftoverAlwaysOnHashCryptoAbis(): void
);
}
// No further Type always-on leftover after #33267 exit/abort drop.
$this->assertStringContainsString('StringHashCrypto::ensureLinked', $type);
// Peer #32875 already dropped these always-on shells
$this->assertStringContainsString('#32875', $type);
$this->assertDoesNotMatchRegularExpression(
Expand All @@ -65,10 +64,12 @@ public function testRuntimeOwnerDeclaresHashCryptoAbisModuleLocally(): void
}
}

public function testTypeInitializeStillEnsureLinksStringHashCrypto(): void
public function testCallSiteEnsureLinksStringHashCrypto(): void
{
$type = (string) file_get_contents(__DIR__.'/../../lib/JIT/Builtin/Type.php');
$this->assertStringContainsString('StringHashCrypto::ensureLinked($this->context)', $type);
$this->assertStringNotContainsString('StringHashCrypto::ensureLinked($this->context)', $type);
$owner = (string) file_get_contents(__DIR__.'/../../ext/standard/JitHash.php');
$this->assertStringContainsString('StringHashCrypto::ensureLinked', $owner);
}

public function testPhpHelpersRemainForDroppedUserScriptBuiltins(): void
Expand Down
19 changes: 12 additions & 7 deletions test/unit/TypeDeadHashEqualsAlgosAbiRuntimeShrinkTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,6 @@ public function testTypeBuiltinDropsLeftoverAlwaysOnHashEqualsAlgosAbis(): void
);
}
$this->assertStringContainsString('LibcExtern::ensureExitAbort', $type);
$this->assertStringContainsString('StringHashEquals::ensureLinked', $type);
$this->assertStringContainsString('StringHashHmacAlgos::ensureLinked', $type);
$this->assertStringContainsString('StringHashAlgos::ensureLinked', $type);
}

public function testRuntimeOwnersDeclareHashEqualsAlgosAbisModuleLocally(): void
Expand All @@ -71,12 +68,20 @@ public function testRuntimeOwnersDeclareHashEqualsAlgosAbisModuleLocally(): void
}
}

public function testTypeInitializeStillEnsureLinksHashEqualsAlgosRuntimes(): void
public function testCallSiteEnsureLinksHashEqualsAlgosRuntimes(): void
{
$type = (string) file_get_contents(__DIR__.'/../../lib/JIT/Builtin/Type.php');
$this->assertStringContainsString('StringHashEquals::ensureLinked($this->context)', $type);
$this->assertStringContainsString('StringHashHmacAlgos::ensureLinked($this->context)', $type);
$this->assertStringContainsString('StringHashAlgos::ensureLinked($this->context)', $type);
foreach ([
'StringHashEquals::ensureLinked($this->context)',
'StringHashHmacAlgos::ensureLinked($this->context)',
'StringHashAlgos::ensureLinked($this->context)',
] as $call) {
$this->assertStringNotContainsString($call, $type);
}
$owner = (string) file_get_contents(__DIR__.'/../../lib/JIT/Builtin/StringHashCryptoJit.php');
$this->assertStringContainsString('StringHashEquals::ensureLinked', $owner);
$this->assertStringContainsString('StringHashHmacAlgos::ensureLinked', $owner);
$this->assertStringContainsString('StringHashAlgos::ensureLinked', $owner);
}

public function testPhpHelpersRemainForDroppedUserScriptBuiltins(): void
Expand Down
12 changes: 7 additions & 5 deletions test/unit/TypeDeadJsonAbiRuntimeShrinkTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,6 @@ public function testTypeBuiltinDropsLeftoverAlwaysOnJsonAbis(): void
);
}
$this->assertStringContainsString('LibcExtern::ensureExitAbort', $type);
$this->assertStringContainsString('StringJsonEncode::ensureLinked', $type);
$this->assertStringContainsString('StringJsonDecode::ensureLinked', $type);
}

public function testRuntimeOwnersDeclareJsonAbisModuleLocally(): void
Expand Down Expand Up @@ -98,11 +96,15 @@ public function testJsonEncodeArrayBridgeRegistersBeforeBodyEmit(): void
);
}

public function testTypeInitializeStillEnsureLinksJsonRuntimes(): void
public function testCallSiteEnsureLinksJsonRuntimes(): void
{
$type = (string) file_get_contents(__DIR__.'/../../lib/JIT/Builtin/Type.php');
$this->assertStringContainsString('StringJsonEncode::ensureLinked($this->context)', $type);
$this->assertStringContainsString('StringJsonDecode::ensureLinked($this->context)', $type);
$this->assertStringNotContainsString('StringJsonEncode::ensureLinked($this->context)', $type);
$this->assertStringNotContainsString('StringJsonDecode::ensureLinked($this->context)', $type);
$enc = (string) file_get_contents(__DIR__.'/../../ext/standard/JitJsonEncode.php');
$dec = (string) file_get_contents(__DIR__.'/../../ext/standard/JitJsonDecode.php');
$this->assertStringContainsString('StringJsonEncode::ensureLinked', $enc);
$this->assertStringContainsString('StringJsonDecode::ensureLinked', $dec);
}

public function testNoNewRuntimeCForJsonAbis(): void
Expand Down
12 changes: 7 additions & 5 deletions test/unit/TypeDeadLibcryptPasswordRandomAbiRuntimeShrinkTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,6 @@ public function testTypeBuiltinDropsLeftoverAlwaysOnLibcryptPasswordRandomAbis()
);
}
// No further Type always-on leftover after #33267 exit/abort drop.
$this->assertStringContainsString('LibcryptRuntime::ensureLinked', $type);
$this->assertStringContainsString('PasswordRandomBytesRuntime::ensureLinked', $type);
}

public function testRuntimeOwnersDeclareAbisModuleLocally(): void
Expand All @@ -60,11 +58,15 @@ public function testRuntimeOwnersDeclareAbisModuleLocally(): void
$this->assertStringContainsString('module->addFunction(', $pw);
}

public function testTypeInitializeStillEnsureLinksOwners(): void
public function testCallSiteEnsureLinksOwners(): void
{
$type = (string) file_get_contents(__DIR__.'/../../lib/JIT/Builtin/Type.php');
$this->assertStringContainsString('LibcryptRuntime::ensureLinked($this->context)', $type);
$this->assertStringContainsString('PasswordRandomBytesRuntime::ensureLinked($this->context)', $type);
$this->assertStringNotContainsString('LibcryptRuntime::ensureLinked($this->context)', $type);
$this->assertStringNotContainsString('PasswordRandomBytesRuntime::ensureLinked($this->context)', $type);
$crypt = (string) file_get_contents(__DIR__.'/../../ext/standard/JitLibcrypt.php');
$pw = (string) file_get_contents(__DIR__.'/../../ext/standard/JitPasswordRandomBytes.php');
$this->assertStringContainsString('LibcryptRuntime::ensureLinked', $crypt);
$this->assertStringContainsString('PasswordRandomBytesRuntime::ensureLinked', $pw);
}

public function testPhpHelpersRemainForDroppedUserScriptBuiltins(): void
Expand Down
7 changes: 4 additions & 3 deletions test/unit/TypeDeadOpensslDigestAbiRuntimeShrinkTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ public function testTypeBuiltinDropsLeftoverAlwaysOnOpensslDigestAbi(): void
);
}
$this->assertStringContainsString('LibcExtern::ensureExitAbort', $type);
$this->assertStringContainsString('OpensslDigestRuntime::ensureLinked', $type);
}

public function testRuntimeOwnerDeclaresOpensslDigestAbiModuleLocally(): void
Expand All @@ -56,10 +55,12 @@ public function testRuntimeOwnerDeclaresOpensslDigestAbiModuleLocally(): void
}
}

public function testTypeInitializeStillEnsureLinksOpensslDigestRuntime(): void
public function testCallSiteEnsureLinksOpensslDigestRuntime(): void
{
$type = (string) file_get_contents(__DIR__.'/../../lib/JIT/Builtin/Type.php');
$this->assertStringContainsString('OpensslDigestRuntime::ensureLinked($this->context)', $type);
$this->assertStringNotContainsString('OpensslDigestRuntime::ensureLinked($this->context)', $type);
$owner = (string) file_get_contents(__DIR__.'/../../lib/JIT/Builtin/OpensslDigestCrypto.php');
$this->assertStringContainsString('OpensslDigestRuntime::ensureLinked', $owner);
}

public function testPhpHelpersRemainForDroppedUserScriptBuiltin(): void
Expand Down
7 changes: 4 additions & 3 deletions test/unit/TypeDeadOpensslEncryptAbiRuntimeShrinkTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ public function testTypeBuiltinDropsLeftoverAlwaysOnOpensslEncryptAbis(): void
);
}
$this->assertStringContainsString('LibcExtern::ensureExitAbort', $type);
$this->assertStringContainsString('OpensslEncryptRuntime::ensureLinked', $type);
}

public function testRuntimeOwnerDeclaresOpensslEncryptAbisModuleLocally(): void
Expand All @@ -59,10 +58,12 @@ public function testRuntimeOwnerDeclaresOpensslEncryptAbisModuleLocally(): void
}
}

public function testTypeInitializeStillEnsureLinksOpensslEncryptRuntime(): void
public function testCallSiteEnsureLinksOpensslEncryptRuntime(): void
{
$type = (string) file_get_contents(__DIR__.'/../../lib/JIT/Builtin/Type.php');
$this->assertStringContainsString('OpensslEncryptRuntime::ensureLinked($this->context)', $type);
$this->assertStringNotContainsString('OpensslEncryptRuntime::ensureLinked($this->context)', $type);
$owner = (string) file_get_contents(__DIR__.'/../../lib/JIT/Builtin/OpensslEncryptCrypto.php');
$this->assertStringContainsString('OpensslEncryptRuntime::ensureLinked', $owner);
}

public function testPhpHelpersRemainForDroppedUserScriptBuiltins(): void
Expand Down
7 changes: 4 additions & 3 deletions test/unit/TypeDeadOpensslPbkdf2AbiRuntimeShrinkTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ public function testTypeBuiltinDropsLeftoverAlwaysOnOpensslPbkdf2Abi(): void
);
}
$this->assertStringContainsString('LibcExtern::ensureExitAbort', $type);
$this->assertStringContainsString('OpensslPbkdf2Runtime::ensureLinked', $type);
}

public function testRuntimeOwnerDeclaresOpensslPbkdf2AbiModuleLocally(): void
Expand All @@ -56,10 +55,12 @@ public function testRuntimeOwnerDeclaresOpensslPbkdf2AbiModuleLocally(): void
}
}

public function testTypeInitializeStillEnsureLinksOpensslPbkdf2Runtime(): void
public function testCallSiteEnsureLinksOpensslPbkdf2Runtime(): void
{
$type = (string) file_get_contents(__DIR__.'/../../lib/JIT/Builtin/Type.php');
$this->assertStringContainsString('OpensslPbkdf2Runtime::ensureLinked($this->context)', $type);
$this->assertStringNotContainsString('OpensslPbkdf2Runtime::ensureLinked($this->context)', $type);
$owner = (string) file_get_contents(__DIR__.'/../../ext/openssl/openssl_pbkdf2.php');
$this->assertStringContainsString('OpensslPbkdf2Runtime::ensureLinked', $owner);
}

public function testPhpHelpersRemainForDroppedUserScriptBuiltin(): void
Expand Down
7 changes: 4 additions & 3 deletions test/unit/TypeDeadOpensslSignAbiRuntimeShrinkTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ public function testTypeBuiltinDropsLeftoverAlwaysOnOpensslSignAbis(): void
);
}
$this->assertStringContainsString('LibcExtern::ensureExitAbort', $type);
$this->assertStringContainsString('OpensslSignRuntime::ensureLinked', $type);
}

public function testRuntimeOwnerDeclaresOpensslSignAbisModuleLocally(): void
Expand All @@ -57,10 +56,12 @@ public function testRuntimeOwnerDeclaresOpensslSignAbisModuleLocally(): void
}
}

public function testTypeInitializeStillEnsureLinksOpensslSignRuntime(): void
public function testCallSiteEnsureLinksOpensslSignRuntime(): void
{
$type = (string) file_get_contents(__DIR__.'/../../lib/JIT/Builtin/Type.php');
$this->assertStringContainsString('OpensslSignRuntime::ensureLinked($this->context)', $type);
$this->assertStringNotContainsString('OpensslSignRuntime::ensureLinked($this->context)', $type);
$owner = (string) file_get_contents(__DIR__.'/../../lib/JIT/Builtin/OpensslSignCrypto.php');
$this->assertStringContainsString('OpensslSignRuntime::ensureLinked', $owner);
}

public function testPhpHelpersRemainForDroppedUserScriptBuiltins(): void
Expand Down
7 changes: 4 additions & 3 deletions test/unit/TypeDeadPasswordCryptoAbiRuntimeShrinkTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ public function testTypeBuiltinDropsLeftoverAlwaysOnPasswordCryptoAbis(): void
);
}
$this->assertStringContainsString('LibcExtern::ensureExitAbort', $type);
$this->assertStringContainsString('PasswordCryptoRuntime::ensureLinked', $type);
}

public function testRuntimeOwnerDeclaresPasswordCryptoAbisModuleLocally(): void
Expand All @@ -61,10 +60,12 @@ public function testRuntimeOwnerDeclaresPasswordCryptoAbisModuleLocally(): void
}
}

public function testTypeInitializeStillEnsureLinksPasswordCryptoRuntime(): void
public function testCallSiteEnsureLinksPasswordCryptoRuntime(): void
{
$type = (string) file_get_contents(__DIR__.'/../../lib/JIT/Builtin/Type.php');
$this->assertStringContainsString('PasswordCryptoRuntime::ensureLinked($this->context)', $type);
$this->assertStringNotContainsString('PasswordCryptoRuntime::ensureLinked($this->context)', $type);
$owner = (string) file_get_contents(__DIR__.'/../../lib/JIT/Builtin/StringPasswordCrypto.php');
$this->assertStringContainsString('PasswordCryptoRuntime::ensureLinked', $owner);
}

public function testPhpHelpersRemainForDroppedUserScriptBuiltins(): void
Expand Down
7 changes: 4 additions & 3 deletions test/unit/TypeDeadRandomBytesAbiRuntimeShrinkTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ public function testTypeBuiltinDropsLeftoverAlwaysOnRandomBytesAbi(): void
'Builtin\\Type must not always-register __compiler_random_bytes (#33160)'
);
// No further Type always-on leftover after #33267 exit/abort drop.
$this->assertStringContainsString('StringRandomBytes::ensureLinked', $type);
}

public function testRuntimeOwnerDeclaresRandomBytesAbiModuleLocally(): void
Expand All @@ -44,10 +43,12 @@ public function testRuntimeOwnerDeclaresRandomBytesAbiModuleLocally(): void
$this->assertFileExists(__DIR__.'/../../ext/standard/JitRandomBytes.php');
}

public function testTypeInitializeStillEnsureLinksStringRandomBytes(): void
public function testCallSiteEnsureLinksStringRandomBytes(): void
{
$type = (string) file_get_contents(__DIR__.'/../../lib/JIT/Builtin/Type.php');
$this->assertStringContainsString('StringRandomBytes::ensureLinked($this->context)', $type);
$this->assertStringNotContainsString('StringRandomBytes::ensureLinked($this->context)', $type);
$owner = (string) file_get_contents(__DIR__.'/../../ext/standard/JitRandomBytes.php');
$this->assertStringContainsString('StringRandomBytes::ensureLinked', $owner);
}

public function testNoNewRuntimeCForRandomBytesAbi(): void
Expand Down
Loading
Loading