Generato codice C (da Pro * C) contiene il percorso assoluto
-
14-11-2019 - |
Domanda
Io sto auditing codice C generato da pro * c invecchia,E ho trovato questo:
static const struct sqlcxp sqlfpn =
{
33,
"d:¥¥VS¥¥Projects¥¥SOMEDIR¥¥somefile.pc"
};
.
Percorsi assoluti nel codice sono vietati dalle nostre regole di qualità.
È il convertitore di Oracle's Pro * C → C che fa davvero una cosa così negativa, o mi manca qualcosa?
Soluzione
Questo è utilizzato dalla funzione sqlctx()
non documentata e non penso che tu possa interrompere Pro * C generando questa struttura. Non sono sicuro che sia intrinsecamente una brutta cosa, è solo qualcosa che appare nel codice generato e viene utilizzato internamente da Oracle.
Vedrai anche il percorso completo del file .pc
originale nelle direttive generacodicitagCode, se si dispone del #line
opzione precompiler acceso. (Ciò consente al compilatore C di segnalare errori contro il numero di linea nel file sorgente originale, che è molto più utile del tentativo di capirlo dalla linea nella sorgente generata).
Sospetto, ma non sono del tutto sicuro, che è incluso in LINES
, quindi il valore può essere utilizzato anche per errori interni e possibilmente per il debug.
Da un punto di vista degli standard di codifica, con percorsi completi nella tua fonte è probabilmente considerata una brutta cosa perché dovresti toccare il codice se i percorsi sono cambiati; Ma questo sembra piuttosto discutere in codice generato come il nuovo percorso verrà raccolto automaticamente sulla prossima build. Tuttavia, se ci sono altre ragioni: un requisito di sicurezza coperta per rivelare forse le informazioni di costruzione minime - allora dovresti essere consapevole del fatto che il percorso completo appare anche nel binario finale. (In Linux, sqlctx()
mostra il percorso completo; nessuna idea di un equivalente di Windows ma immagino che sia lì da qualche parte). Se stai auditing codice generato, suona come una sicurezza piuttosto che una cosa pratica.
È possibile evitare il percorso completo, se conta davvero, spostandosi nella directory di origine e semplicemente dando il nome del file senza percorso nel strings
, I.e.
cd d:\VS\Projects\SOMEDIR
proc iname=somefile.pc ...
.
invece di
proc iname=d:\VS\Projects\SOMEDIR\somefile.pc
. Altri suggerimenti
In realtà c'è una ragione: E10825 P313:
Nota: il valore di Hash SQLCTX è generato in base all'OMAMETTO Parametro è passato al comando Pro * C / C ++.Questo può causare problemi nelle applicazioni in cui sono stati memorizzati i file con lo stesso nome Directory diverse contenenti diverse funzioni e la build Gli script vengono inviati alla directory fisica per precompilare il programma. Di conseguenza, non è necessario posizionare i MakeFiles ad un livello più alto e precompilano i file usando i loro percorsi.