17
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-10-28 20:27:28 +01:00

fix(sonar): addressing reliability/security issues

This commit is contained in:
jerrrrycho
2026-10-03 22:33:13 +02:00
parent 3ab3cdeb2d
commit c6b76a0b72
7 changed files with 49 additions and 72 deletions

View File

@@ -4987,8 +4987,7 @@ TController::PrepareDirection() {
void TController::JumpToNextOrder( bool const Ignoremergedchangedirection )
{ // wykonanie kolejnej komendy z tablicy rozkazów
auto const currentorder { OrderCurrentGet() };
if (currentorder != Wait_for_orders)
if (auto const currentorder { OrderCurrentGet() }; currentorder != Wait_for_orders)
{
if( (currentorder & Change_direction) != 0 // jeśli zmiana kierunku
&& currentorder != Change_direction && false == Ignoremergedchangedirection ) { // ale nałożona na coś
@@ -5056,16 +5055,21 @@ void TController::OrderNext(TOrders NewOrder)
OrderTop = OrderPos; // ale może jest czymś zajęty na razie
if (NewOrder >= Shunt) // jeśli ma jechać
{ // ale może być zajęty chwilowymi operacjami
while (OrderList[OrderTop] != Wait_for_orders && OrderList[OrderTop] < Shunt) // jeśli coś robi
while (OrderTop >= 0 && OrderTop < maxorders - 1
&& OrderList[OrderTop] != Wait_for_orders && OrderList[OrderTop] < Shunt) // jeśli coś robi
++OrderTop; // pomijamy wszystkie tymczasowe prace
}
else
{ // jeśli ma ustawioną jazdę, to wyłączamy na rzecz operacji
while (OrderList[OrderTop] ?
OrderList[OrderTop] < Shunt && OrderList[OrderTop] != NewOrder :
false) // jeśli coś robi
while (OrderTop >= 0 && OrderTop < maxorders - 1
&& OrderList[OrderTop] != Wait_for_orders && OrderList[OrderTop] < Shunt && OrderList[OrderTop] != NewOrder) // jeśli coś robi
++OrderTop; // pomijamy wszystkie tymczasowe prace
}
if (OrderTop < 0 || OrderTop >= maxorders)
{
ErrorLog("Commands overflow: order \"" + Order2Str(NewOrder) + "\" dropped");
return;
}
OrderList[OrderTop++] = NewOrder; // dodanie rozkazu jako następnego
#if LOGORDERS
OrdersDump( "OrderNext" ); // normalnie nie ma po co tego wypisywać
@@ -5078,11 +5082,13 @@ void TController::OrderPush(TOrders NewOrder)
// ale nie jedzie
++OrderTop;
// niektóre operacje muszą zostać najpierw dokończone => zapis na kolejnej
if (OrderTop < 0 || OrderTop >= maxorders)
{
ErrorLog("Commands overflow: order \"" + Order2Str(NewOrder) + "\" dropped");
return;
}
if (OrderList[OrderTop] != NewOrder) // jeśli jest to samo, to nie dodajemy
OrderList[OrderTop++] = NewOrder; // dodanie rozkazu na stos
// if (OrderTop<OrderPos) OrderTop=OrderPos;
if (OrderTop >= maxorders)
ErrorLog("Commands overflow: The program will now crash");
#if LOGORDERS
OrdersDump( "OrderPush: [" + Order2Str( NewOrder ) + "]" ); // normalnie nie ma po co tego wypisywać
#endif
@@ -5398,8 +5404,7 @@ TCommandType TController::BackwardScan( double const Range )
// najpierw sprawdzamy, czy semafor czy inny znak został przejechany
auto const sl{e->input_location()}; // położenie komórki pamięci
auto const pos{pVehicles[end::rear]->RearPosition()}; // pozycja tyłu
auto const sem{sl - pos}; // wektor do komórki pamięci od końca składu
if (dir.x * sem.x + dir.z * sem.z < 0)
if (auto const sem{sl - pos}; dir.x * sem.x + dir.z * sem.z < 0) // wektor do komórki pamięci od końca składu
{
// jeśli został minięty
// iloczyn skalarny jest ujemny, gdy sygnał stoi z tyłu
@@ -5411,7 +5416,7 @@ TCommandType TController::BackwardScan( double const Range )
scanvel = e->input_value(1); // prędkość przy tym semaforze
#if LOGBACKSCAN
// przeliczamy odległość od semafora - potrzebne by były współrzędne początku składu
scandist = std::max(glm::length(sem) - 2.0, 0.0); // 2m luzu przy manewrach wystarczy, ujemnych nie ma po co wysyłać
scandist = std::max(glm::length(sl - pos) - 2.0, 0.0); // 2m luzu przy manewrach wystarczy, ujemnych nie ma po co wysyłać
#endif
}