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.