Menu

#1068 CPD fails on broken symbolic links

PMD-5.0.3
closed
None
PMD
3-Major
Bug
2015-02-09
2013-03-01
No

If CPD is determining which files to analyze, it also uses symbolic links. Furthermore if symbolic links are broken, they fail afterwards, when CPD tries to load the code ("FileNotFoundException").

Stacktrace:

java.io.FileNotFoundException: /path/to/symlink.h (No such file or directory)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:137)
    at net.sourceforge.pmd.cpd.SourceCode$FileCodeLoader.getReader(SourceCode.java:70)
    at net.sourceforge.pmd.cpd.SourceCode$CodeLoader.load(SourceCode.java:43)
    at net.sourceforge.pmd.cpd.SourceCode$CodeLoader.getCode(SourceCode.java:32)
    at net.sourceforge.pmd.cpd.SourceCode.getCodeBuffer(SourceCode.java:118)
    at net.sourceforge.pmd.cpd.CPPTokenizer.tokenize(CPPTokenizer.java:18)
    at net.sourceforge.pmd.cpd.CPD.add(CPD.java:103)
    at net.sourceforge.pmd.cpd.CPD.add(CPD.java:69)
    at net.sourceforge.pmd.cpd.CPD.addDirectory(CPD.java:79)
    at net.sourceforge.pmd.cpd.CPD.addRecursively(CPD.java:64)
    at net.sourceforge.pmd.cpd.CPD.main(CPD.java:143)
java.lang.RuntimeException: Problem while reading /path/to/symlink.h:/path/to/symlink.h (No such file or directory)
    at net.sourceforge.pmd.cpd.SourceCode$CodeLoader.load(SourceCode.java:52)
    at net.sourceforge.pmd.cpd.SourceCode$CodeLoader.getCode(SourceCode.java:32)
    at net.sourceforge.pmd.cpd.SourceCode.getCodeBuffer(SourceCode.java:118)
    at net.sourceforge.pmd.cpd.CPPTokenizer.tokenize(CPPTokenizer.java:18)
    at net.sourceforge.pmd.cpd.CPD.add(CPD.java:103)
    at net.sourceforge.pmd.cpd.CPD.add(CPD.java:69)
    at net.sourceforge.pmd.cpd.CPD.addDirectory(CPD.java:79)
    at net.sourceforge.pmd.cpd.CPD.addRecursively(CPD.java:64)
    at net.sourceforge.pmd.cpd.CPD.main(CPD.java:143)

Discussion

  • Andreas Dangel

    Andreas Dangel - 2013-03-01
    • status: accepted --> closed
     
    • amaigil2

      amaigil2 - 2013-04-08

      Now on my Windows 7 system all(!) source files are skipped "since it appears to be a symlink" :-(

       
  • Andreas Dangel

    Andreas Dangel - 2013-04-08

    Alright, I see the problem. I unfortunately assumed that an operating system would use case sensitive file systems by default and would support symbolic links - unfortunately Windows does neither.

    However, I have a simple workaround for you: When specifying the path to the directory, that CPD should scan, please specify an absolute, and in the java way canonoized pathname - this means, make sure to use an upper case drive letter, and resolve all "." and ".." relative path names, e.g.

    path_to_pmd\bin\cpd.bat --minimum-tokens 100 --files C:\dev\sourcecode
    

    instead of

    cd C:\dev\sourcecode
    path_to_pmd\bin\cpd.bat --minimum-tokens 100 --files .\
    
     
  • Andreas Dangel

    Andreas Dangel - 2013-04-08
    • status: closed --> open
    • module: --> PMD
    • priority: 1 --> 1-Blocker
    • type: --> Bug
    • affects_version: -->
     
  • Andreas Dangel

    Andreas Dangel - 2013-04-09
    • status: open --> closed
    • Priority: 1-Blocker --> 3-Major
     
  • Andreas Dangel

    Andreas Dangel - 2013-04-09

    I have created a follow-up bug that will be fixed for 5.0.4:
    https://sourceforge.net/p/pmd/bugs/1081/

     

Log in to post a comment.