tree b01deedb0f2892ef42cf55eaabb17549ba662d34
parent 0ab973950366ba7853a894e21676b86fd6b53453
author Marc Kupietz <kupietz@ids-mannheim.de> 1785390002 +0900
committer Marc Kupietz <kupietz@ids-mannheim.de> 1785390002 +0900

Fix memory leaks in the request path

Every request leaked the target sum array (cutoff * sizeof(float), i.e. 2 MB
at the default cutoff of 500000), the thread handle array, the target word
list and the collocator results of all window threads. getWordNumber() leaked
a word list on every word lookup, too.

On top of that every string and array returned from C to perl leaked: for a
char* return value Inline::C generates sv_setpv(), which copies the buffer but
never frees it, and for an AV* return value it generates newRV(), which leaves
the array behind with a reference count of one. All functions returning data
to perl therefore return an SV* now and release their buffers.

getClassicCollocators() and getCollocationScores() leaked twice, because
libcollocatordb hands out strdup()ed strings that were strdup()ed again.

Also fixes crashes in the same code paths:
- get_neighbours() divided by zero when called with nosp=1
- getPosWiseW2VCollocators() wrote before the start of its result buffer for
  empty results, called malloc(0) for models without a syn layer and
  dereferenced a NULL collocator result for multi word input starting with an
  out of dictionary word
- getBiggestMergedDifferences() sized its buffer for 50 bytes per record,
  which is not enough for long words
- getSimilarProfiles() wrote to buffer[-1] for empty profiles

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Change-Id: Iff4215745f26156408a056de6d867753993082c2
