Flawfinder version 2.0.10, (C) 2001-2019 David A. Wheeler. Number of rules (primarily dangerous function names) in C/C++ ruleset: 223 Examining data/libsbsms-2.0.2/include/sbsms.h Examining data/libsbsms-2.0.2/src/buffer.cpp Examining data/libsbsms-2.0.2/src/buffer.h Examining data/libsbsms-2.0.2/src/dBTable.cpp Examining data/libsbsms-2.0.2/src/dBTable.h Examining data/libsbsms-2.0.2/src/fft.cpp Examining data/libsbsms-2.0.2/src/fft.h Examining data/libsbsms-2.0.2/src/grain.cpp Examining data/libsbsms-2.0.2/src/grain.h Examining data/libsbsms-2.0.2/src/real.h Examining data/libsbsms-2.0.2/src/resample.cpp Examining data/libsbsms-2.0.2/src/sbsms.cpp Examining data/libsbsms-2.0.2/src/sincCoeffs.h Examining data/libsbsms-2.0.2/src/slide.cpp Examining data/libsbsms-2.0.2/src/sms.cpp Examining data/libsbsms-2.0.2/src/sms.h Examining data/libsbsms-2.0.2/src/sse.h Examining data/libsbsms-2.0.2/src/subband.cpp Examining data/libsbsms-2.0.2/src/subband.h Examining data/libsbsms-2.0.2/src/synthTable.h Examining data/libsbsms-2.0.2/src/track.cpp Examining data/libsbsms-2.0.2/src/track.h Examining data/libsbsms-2.0.2/src/trackpoint.cpp Examining data/libsbsms-2.0.2/src/trackpoint.h Examining data/libsbsms-2.0.2/src/utils.h Examining data/libsbsms-2.0.2/win/config.h FINAL RESULTS: data/libsbsms-2.0.2/src/fft.h:833:5: [2] (buffer) memcpy: Does not check for buffer overflows when copying to destination (CWE-120). Make sure destination can always hold the source data. memcpy(y,x,s); data/libsbsms-2.0.2/include/sbsms.h:100:8: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). long read(SBSMSInterface *iface, audio *buf, long n); data/libsbsms-2.0.2/include/sbsms.h:167:8: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). long read(audio *audioOut, long frames); data/libsbsms-2.0.2/src/buffer.cpp:107:20: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). grain* GrainBuf :: read(long k) data/libsbsms-2.0.2/src/buffer.cpp:155:15: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). long Mixer :: read(audio *outBuf, long n) data/libsbsms-2.0.2/src/buffer.cpp:159:11: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). n = b1->read(outBuf,n); data/libsbsms-2.0.2/src/buffer.h:25:5: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). T read(long k); data/libsbsms-2.0.2/src/buffer.h:26:5: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). T read(); data/libsbsms-2.0.2/src/buffer.h:73:20: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). T RingBuffer<T> :: read(long k) data/libsbsms-2.0.2/src/buffer.h:79:20: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). T RingBuffer<T> :: read() data/libsbsms-2.0.2/src/buffer.h:112:16: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). virtual long read(audio *buf, long n)=0; data/libsbsms-2.0.2/src/buffer.h:133:8: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). void read(T *buf, long n); data/libsbsms-2.0.2/src/buffer.h:185:28: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). void ArrayRingBuffer<T> :: read(T *outBuf, long n) data/libsbsms-2.0.2/src/buffer.h:235:10: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). grain* read(long k); data/libsbsms-2.0.2/src/buffer.h:257:16: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). virtual long read(audio *buf, long n); data/libsbsms-2.0.2/src/resample.cpp:20:15: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). inline long read(audio *audioOut, long frames); data/libsbsms-2.0.2/src/resample.cpp:103:19: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). long Resampler :: read(audio *audioOut, long samples) { return imp->read(audioOut,samples); } data/libsbsms-2.0.2/src/resample.cpp:103:69: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). long Resampler :: read(audio *audioOut, long samples) { return imp->read(audioOut,samples); } data/libsbsms-2.0.2/src/resample.cpp:104:22: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). long ResamplerImp :: read(audio *audioOut, long samples) data/libsbsms-2.0.2/src/resample.cpp:233:8: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). out->read(audioOut,samples); data/libsbsms-2.0.2/src/sbsms.cpp:58:15: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). inline long read(SBSMSInterface *iface, audio *buf, long n); data/libsbsms-2.0.2/src/sbsms.cpp:697:15: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). long SBSMS :: read(SBSMSInterface *iface, audio *buf, long n) { return imp->read(iface,buf,n); } data/libsbsms-2.0.2/src/sbsms.cpp:697:77: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). long SBSMS :: read(SBSMSInterface *iface, audio *buf, long n) { return imp->read(iface,buf,n); } data/libsbsms-2.0.2/src/sbsms.cpp:698:18: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). long SBSMSImp :: read(SBSMSInterface *iface, audio *buf, long n) data/libsbsms-2.0.2/src/sbsms.cpp:704:18: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). nRead = top->read(buf+nReadTotal,nRead); data/libsbsms-2.0.2/src/sms.cpp:163:36: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). slices.insert(sliceBuffer[c].read(k)); data/libsbsms-2.0.2/src/sms.cpp:498:29: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). grain *g = trialGrainBuf->read(trialGrainBuf->readPos); data/libsbsms-2.0.2/src/sms.cpp:859:39: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). Slice *sliceL1 = lo->sliceBuffer[c].read(lo->sliceBuffer[c].readPos+offset/res+offsetlo); data/libsbsms-2.0.2/src/sms.cpp:866:35: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). Slice *sliceM1 = sliceBuffer[c].read(sliceBuffer[c].readPos+offset); data/libsbsms-2.0.2/src/sms.cpp:945:31: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). sliceM0[c] = sliceBuffer[c].read(sliceBuffer[c].readPos+offset); data/libsbsms-2.0.2/src/sms.cpp:946:31: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). sliceM1[c] = sliceBuffer[c].read(sliceBuffer[c].readPos+offset+1); data/libsbsms-2.0.2/src/sms.cpp:948:33: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). sliceM2[c] = sliceBuffer[c].read(sliceBuffer[c].readPos+offset+2); data/libsbsms-2.0.2/src/sms.cpp:970:38: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). sliceH0[c] = hi?hi->sliceBuffer[c].read(hi->sliceBuffer[c].readPos+(offset+1)*hi->res):NULL; data/libsbsms-2.0.2/src/sms.cpp:972:38: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). sliceH1[c] = hi?hi->sliceBuffer[c].read(hi->sliceBuffer[c].readPos+(offset+1)*hi->res):NULL; data/libsbsms-2.0.2/src/sms.cpp:979:38: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). sliceL0[c] = lo?lo->sliceBuffer[c].read(lo->sliceBuffer[c].readPos+offset/res+1):NULL; data/libsbsms-2.0.2/src/sms.cpp:981:38: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). sliceL1[c] = lo?lo->sliceBuffer[c].read(lo->sliceBuffer[c].readPos+offset/res+1):NULL; data/libsbsms-2.0.2/src/sms.cpp:1282:35: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). Slice *sliceM0 = sliceBuffer[c].read(sliceBuffer[c].readPos+offset); data/libsbsms-2.0.2/src/sms.cpp:1812:23: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). long SynthRenderer :: read(audio *out, long n) data/libsbsms-2.0.2/src/sms.h:31:8: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). long read(audio *out, long n); data/libsbsms-2.0.2/src/subband.cpp:478:29: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). grain *g = grains[i]->read(k); data/libsbsms-2.0.2/src/subband.cpp:517:42: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). grain *g = analyzedGrains[i][c]->read(k); data/libsbsms-2.0.2/src/subband.cpp:728:33: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). float stretch = stretchRender.read(); data/libsbsms-2.0.2/src/subband.cpp:729:26: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). float f0 = pitchRender.read(pitchRender.readPos); data/libsbsms-2.0.2/src/subband.cpp:732:22: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). f1 = pitchRender.read(pitchRender.readPos+1); data/libsbsms-2.0.2/src/subband.cpp:759:33: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). nFromSub = sub->outMixer->read(fromSub,subBufSize); data/libsbsms-2.0.2/src/subband.cpp:765:17: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). long SubBand :: read(audio *buf, long n) data/libsbsms-2.0.2/src/subband.cpp:771:51: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). long nToReadFromOutputFrame = outputFrameSize.read(); data/libsbsms-2.0.2/src/subband.cpp:773:25: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). nToRead = outMixer->read(buf+nRead, nToRead); data/libsbsms-2.0.2/src/subband.cpp:800:34: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). long samples = outputFrameSize.read(); data/libsbsms-2.0.2/src/subband.cpp:913:28: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). grain *g = grainsIn->read(k); g->analyze(); data/libsbsms-2.0.2/src/subband.h:29:8: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). long read(audio *buf, long n); ANALYSIS SUMMARY: Hits = 51 Lines analyzed = 17992 in approximately 0.39 seconds (46326 lines/second) Physical Source Lines of Code (SLOC) = 17275 Hits@level = [0] 0 [1] 50 [2] 1 [3] 0 [4] 0 [5] 0 Hits@level+ = [0+] 51 [1+] 51 [2+] 1 [3+] 0 [4+] 0 [5+] 0 Hits/KSLOC@level+ = [0+] 2.95224 [1+] 2.95224 [2+] 0.0578871 [3+] 0 [4+] 0 [5+] 0 Dot directories skipped = 1 (--followdotdir overrides) Minimum risk level = 1 Not every hit is necessarily a security vulnerability. There may be other security vulnerabilities; review your code! See 'Secure Programming HOWTO' (https://dwheeler.com/secure-programs) for more information.