-
Notifications
You must be signed in to change notification settings - Fork 510
Add more precise return types for the openssl cipher functions #4043
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: 1.12.x
Are you sure you want to change the base?
Conversation
6144182
to
ecfa6c2
Compare
public function getTypeFromFunctionCall(FunctionReflection $functionReflection, FuncCall $functionCall, Scope $scope): Type | ||
{ | ||
$returnType = ParametersAcceptorSelector::selectFromArgs( | ||
$scope, | ||
$functionCall->getArgs(), | ||
$functionReflection->getVariants(), | ||
)->getReturnType(); | ||
|
||
if (!$this->phpVersion->throwsValueErrorForInternalFunctions()) { | ||
return $returnType; | ||
} | ||
|
||
if (count($functionCall->getArgs()) < 1) { | ||
return $returnType; | ||
} | ||
|
||
$strings = $scope->getType($functionCall->getArgs()[0]->value)->getConstantStrings(); | ||
$results = array_unique(array_map(fn (ConstantStringType $algorithm): bool => $this->isSupportedAlgorithm($algorithm->getValue()), $strings)); | ||
|
||
if (count($results) === 1) { | ||
return $results[0] | ||
? TypeCombinator::remove($returnType, new ConstantBooleanType(false)) | ||
: new ConstantBooleanType(false); | ||
} | ||
|
||
return $returnType; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
instead of
$returnType = ParametersAcceptorSelector::selectFromArgs(
$scope,
$functionCall->getArgs(),
$functionReflection->getVariants(),
)->getReturnType();
you can just return null;
for the cases where the extension cannot provide a better type then the default.
that way you can simplify the extension a bit.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I refactored the code to return null for all such cases.
return in_array(strtoupper($algorithm), $this->getSupportedAlgorithms(), true); | ||
} | ||
|
||
/** @return string[] */ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
might work to use a more precise return type
/** @return string[] */ | |
/** @return uppercase-string[] */ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I inspired from MbFunctionsReturnTypeExtensionTrait, which also uses simply string[]
ecfa6c2
to
bb6367d
Compare
Needs cs fix |
bb6367d
to
1e9efb6
Compare
@staabm done |
Those functions return false (and trigger a warning) only when the argument is an unknown algorithm, which is not something worth checking when using them with a known algorithm.
I'm providing this improvement only on PHP 8+, because PHP 7 can have other kind of warnings (that have been upgraded to
ValueError
in PHP 8)Replaces #3582