Static analysis findings for nc_program_manager: 8 security criticals (FTP plaintext, LSV2 cleartext, path traversal, license bypass), 4 functional bugs, 3 NRE risks, 3 resource leaks. See BUG_ANALYSIS.md for prioritized fix list. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.6 KiB
Analisi Bug & Problemi - nc_program_manager
Data: 2026-05-25
Scope: progetto nc_program_manager (esclusi test, obj/, Properties/)
🔴 Critici (security)
FTP plaintext - credenziali esposte (no TLS)
Cnc/Fagor/FagorFtpClient.cs:60-ftp://URI con NetworkCredential, nessun supporto SSL/TLSCnc/Mitsubishi/MitsubishiFtpClient.cs:60- stesso patternCnc/Siemens/SiemensFtpClient.cs:60- stesso pattern
Fix: usare FtpWebRequest.EnableSsl = true o migrare a ftps:// / SFTP. Se rete trusted, documentare requirement esplicito.
LSV2 credenziali cleartext su TCP raw
Cnc/Heidenhain/Lsv2Client.cs:105- username+password concatenati con null terminator, inviati non cifrati su socket TCP.
Fix: documentare come limitazione protocollo LSV2 oppure incapsulare in TLS tunnel.
Path traversal - no validation prima FTP delete
Cnc/Fagor/FagorMachine.cs:121-DeleteProgramAsyncpassa path utente direttamente a_ftp.DeleteFile()Cnc/Mitsubishi/MitsubishiMachine.cs:117- stesso patternCnc/Siemens/SiemensMachine.cs:117- stesso pattern
Fix: validare path (no .., no path absoluti fuori dir consentita) prima di chiamata FTP.
License bypass in DEBUG build
Program.cs:47- check licenza saltato in DEBUG conditional compile.
Fix: rimuovere #if DEBUG skip, o se necessario per dev limitare a [Conditional] log non funzionale.
License read exception swallowed
Licensing/LicenseFile.cs:20- errori lettura file licenza silenziosamente catturati, bypassano errori.
Fix: log + rethrow o ritorno result con error info.
🟠 Bug funzionali
Program.Replace() return ignorato
FanucProgram.cs:176-Program.Replace(...)chiamato senza assegnazione. String immutable, nessun effetto.
Fix: Program = Program.Replace(...).
Off-by-one in IsoProgramFormatter (commenti ISO)
Cnc/Fanuc/IsoProgramFormatter.cs:19-if (closePar > 0)deve essere>= 0per gestire commento a inizio rigaCnc/Fanuc/IsoProgramFormatter.cs:41-if (openPar > 0 && closePar > openPar)deve essereopenPar >= 0
Fix: cambiare > 0 in >= 0 quando si controlla risultato IndexOf.
FanucDialectDetector - comparison string inconsistente
Cnc/Fanuc/FanucDialectDetector.cs:71-if (trimmed == "0" || t == " 0")usatnon trimmato a destra mentretrimmeda sinistra. Edge case mancato.
Fix: uniformare uso di trimmed o documentare intent.
🟡 NullReferenceException
ArgParser - Substring su null
ArgParser.cs:23-arguments.Find(...)ritornanullse argomento-azione=mancante, poi.Substring(8)solleva NRE.
Fix: null check prima di Substring, o usare ?.Substring(8) con default.
FanucProgram - field Program nullable usato senza check
FanucProgram.cs:116-Standardize()chiamaProgram.IndexOf/Program.Replacesenza guardia nullFanucProgram.cs:188-ToString()concatenaProgram,ToolOffsetData,WorkZeroOffsetDatapotenzialmente null
Fix: null check all'ingresso metodi o inizializzazione a string.Empty nel costruttore.
🟡 Resource leak / robustness
FanucMachine - buffer access fragile
Cnc/Fanuc/FanucMachine.cs:407-buffer[len-1]sunumritornato da FOCAS user-controlled. Selen == UploadBufferSize + 1raggiunge boundary.
Fix: clamp len su Math.Min(len, buffer.Length).
Lsv2Client - TcpClient/Stream non disposti se Login fallisce
Cnc/Heidenhain/Lsv2Client.cs:43-_streamassegnato, poiLogin()può throware; manca try/finally per cleanup.
Fix: wrap connect+login in try/catch con dispose esplicito su exception.
Lsv2Client - ReadFrame ritorna dati parziali su EOF
Cnc/Heidenhain/Lsv2Client.cs:163- loop esce sun == 0(EOF/disconnect) ma processa buffer incompleto, ritornando frame parziale.
Fix: throw o ritorno error se n == 0 prima di lunghezza attesa.
🟢 Nit
DateTime.Now per timestamp
Cnc/Models/CncError.cs:17-DateTime.Nowsoggetto a drift/DST. UsareDateTime.UtcNowoDateTimeOffset.UtcNow.
Riepilogo
| Severità | Count |
|---|---|
| Critici security | 8 |
| Bug funzionali | 4 |
| NRE | 3 |
| Resource/robustness | 3 |
| Nit | 1 |
| Totale | 19 |
Priorità fix consigliata
- TLS su FTP + LSV2 (o documenta requirement rete trusted)
- Path validation prima delete FTP
- Rimuovi DEBUG bypass licenza
- Null checks su
FanucProgram.ProgrameArgParser - Fix off-by-one
IsoProgramFormatter - Fix
FanucProgram.Replace()assignment - Dispose pattern
Lsv2Client - Logging exception
LicenseFile