Hi All,
Please find the patch to fix PR16558. The problem is discussed at
http://llvm.org/bugs/show_bug.cgi?id=16558.<http://llvm.org/bugs/show_bug.cgi?id=16558>

Patch:
<http://llvm.org/bugs/show_bug.cgi?id=16558>
http://llvm-reviews.chandlerc.com/D1362

Please let me know your inputs on the same.


Test Case-

//RUN: %clang_cc1 -analyze -analyzer-checker=core,unix -verify %s

typedef typeof(sizeof(int)) size_t;
extern void* malloc (size_t size);
size_t strlen(const char *s);
char *strcpy(char *restrict s1, const char *restrict s2);

void *smallocNoWarn(size_t size) {
    if (size == 0) {
        return malloc(1); // this branch is never called
    } else {
        return malloc(size);
    }
}

char *dupstrNoWarn(const char *s) {
    const int len = strlen(s);
    char *p = (char*) smallocNoWarn(len + 1);
    strcpy(p, s); // no-warning
    return p;
}

void *smallocWarn(size_t size) {
    if (size == 2) {
        return malloc(1);
    } else {
        return malloc(size);
    }
}

char *dupstrWarn(const char *s) {
    const int len = strlen(s);
    char *p = (char*) smallocWarn(len + 1);
    strcpy(p, s); // expected-warning{{String copy function overflows
destination buffer}}
    return p;
}

void *smallocWarnZeroLenString(size_t size) {
    if (size == 1) {
        return malloc(1);
    } else {
        return malloc(size);
    }
}

char *dupstrWarnZeroLenString(const char *s) {
    const int len = strlen("");
    char *p = (char*) smallocWarn(len + 1);
    strcpy(p, s); // TODO: Should warn here!
    return p;
}

Thanks
Karthik Bhat
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to