17
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-11-03 16:40:21 +01:00

fix(sonar): addressing last reliability/security issues

This commit is contained in:
jerrrrycho
2026-10-06 14:21:55 +02:00
parent c6b76a0b72
commit e570874f63
5 changed files with 14 additions and 10 deletions

View File

@@ -1437,7 +1437,8 @@ int eu07_application::init_data()
int eu07_application::init_modes() int eu07_application::init_modes()
{ {
Global.local_random_engine.seed(static_cast<std::mt19937::result_type>(true_random_seed())); // local cosmetics only (sound pitch, editor placement), never security related
Global.local_random_engine.seed(static_cast<std::mt19937::result_type>(true_random_seed())); // NOSONAR
if ((!Global.network_servers.empty() || Global.network_client) && Global.SceneryFile.empty()) if ((!Global.network_servers.empty() || Global.network_client) && Global.SceneryFile.empty())
{ {

View File

@@ -193,7 +193,7 @@ bool opengl33_renderer::Init(GLFWwindow *Window)
// Generate hemisphere kernel (z > 0 = toward surface normal) // Generate hemisphere kernel (z > 0 = toward surface normal)
std::uniform_real_distribution<float> rnd(0.0f, 1.0f); std::uniform_real_distribution<float> rnd(0.0f, 1.0f);
std::default_random_engine gen(42); // fixed seed for consistency std::default_random_engine gen(42); // NOSONAR fixed seed on purpose, SSAO kernel has to be identical every run
for (int i = 0; i < 32; i++) { for (int i = 0; i < 32; i++) {
glm::vec3 s(rnd(gen)*2.0f-1.0f, rnd(gen)*2.0f-1.0f, rnd(gen)); glm::vec3 s(rnd(gen)*2.0f-1.0f, rnd(gen)*2.0f-1.0f, rnd(gen));
s = glm::normalize(s) * rnd(gen); s = glm::normalize(s) * rnd(gen);

View File

@@ -622,7 +622,8 @@ std::string deserialize_random_set(cParser &Input, char const *Break)
} }
if (false == tokens.empty()) if (false == tokens.empty())
{ {
std::shuffle(std::begin(tokens), std::end(tokens), Global.random_engine); // scenery random set: must replay from the shared run seed, not a security concern
std::shuffle(std::begin(tokens), std::end(tokens), Global.random_engine); // NOSONAR
return tokens.front(); return tokens.front();
} }
else else

View File

@@ -550,12 +550,12 @@ bool TSegment::RenderLoft( gfx::vertex_array &Output, glm::dvec3 const &Origin,
void TSegment::render_lines(std::vector<gfx::basic_vertex> &out, float quality) const void TSegment::render_lines(std::vector<gfx::basic_vertex> &out, float quality) const
{ {
float step = 1.0f / iSegCount / quality; float step = 1.0f / iSegCount / quality;
int const stepcount = static_cast<int>(iSegCount * quality);
float x;
glm::vec3 previous = FastGetPoint(0.0); glm::vec3 previous = FastGetPoint(0.0);
for (x = step; x <= 1.0f; x += step) { for (int i = 1; i <= stepcount; ++i) {
float const x = std::min(1.0f, i * step);
out.push_back(gfx::basic_vertex(previous, glm::vec3(0.0f), glm::vec2(0.0f))); out.push_back(gfx::basic_vertex(previous, glm::vec3(0.0f), glm::vec2(0.0f)));
previous = glm::vec3(FastGetPoint(x)); previous = glm::vec3(FastGetPoint(x));
@@ -571,13 +571,13 @@ void TSegment::render_lines(std::vector<gfx::basic_vertex> &out, float quality)
glm::vec3 TSegment::get_nearest_point(const glm::dvec3 &point, float quality) const glm::vec3 TSegment::get_nearest_point(const glm::dvec3 &point, float quality) const
{ {
float step = 1.0f / iSegCount / quality; float step = 1.0f / iSegCount / quality;
int const stepcount = static_cast<int>(iSegCount * quality);
float x;
glm::vec3 nearest; glm::vec3 nearest;
float min = std::numeric_limits<float>::max(); float min = std::numeric_limits<float>::max();
for (x = step; x <= 1.0f; x += step) { for (int i = 1; i <= stepcount; ++i) {
float const x = std::min(1.0f, i * step);
glm::vec3 p1 = FastGetPoint(x); glm::vec3 p1 = FastGetPoint(x);
glm::vec3 p2 = FastGetPoint(glm::min(1.0f, x + step)); glm::vec3 p2 = FastGetPoint(glm::min(1.0f, x + step));

View File

@@ -3719,7 +3719,9 @@ void TTrack::build_sleeper_transforms()
auto const expected = static_cast<std::size_t>( std::max( 0.0, ( length - start ) / spacing ) ) + 1u; auto const expected = static_cast<std::size_t>( std::max( 0.0, ( length - start ) / spacing ) ) + 1u;
m_sleeper_local_transforms.reserve( m_sleeper_local_transforms.size() + expected ); m_sleeper_local_transforms.reserve( m_sleeper_local_transforms.size() + expected );
for( double s = start; s < length; s += spacing ) { for( std::size_t sleeperidx = 0;; ++sleeperidx ) {
auto const s = start + static_cast<double>( sleeperidx ) * spacing;
if( s >= length ) { break; }
glm::dvec3 pos; glm::dvec3 pos;
glm::vec3 angles; glm::vec3 angles;
segment->RaPositionGet( s, pos, angles ); segment->RaPositionGet( s, pos, angles );