I have a memory leak detector tool which tells me below code is leaking 100 bytes
#include <string>
#include <iostream>
void setStr(char ** strToSet)
{
    strcpy(*strToSet,  "something!");
}
void str(std::string& s)
{
    char* a = new char[100]();
    setStr(&a);
    s = a;
    delete[] a;
}
int main()
{
    std::string s1;
    str(s1);
    std::cout << s1 << "\n";
    return 0;
}
According to this point number 3 it is leaking the amount I allocated (100) minus length of "something!" (10) and I should be leaking 90 bytes.
Am I missing something here or it is safe to assume the tool is reporting wrong?
EDIT: setStr() is in a library and I cannot see the code, so I guessed it is doing that. It could be that it is allocating "something!" on the heap, what about that scenario? Would we have a 90 bytes leak or 100?
 
     
    