Implementation is incorrect compared to Cycles/Eevee, length is incorrectly calculated.
Reported by @Robin Betts (DrDubosc) in comments of T88922.
Eevee:
void vector_math_project(
vec3 a, vec3 b, vec3 c, float scale, out vec3 outVector, out float outValue)
{
float lenSquared = dot(b, b);
outVector = (lenSquared != 0.0) ? (dot(a, b) / lenSquared) * b : vec3(0.0);
}