<div dir="ltr"><div>Hi All,</div><div>Please find the patch to fix PR16558. The problem is discussed at <a href="http://llvm.org/bugs/show_bug.cgi?id=16558">http://llvm.org/bugs/show_bug.cgi?id=16558.</a></div><div><br></div>
<div>Patch:<a href="http://llvm.org/bugs/show_bug.cgi?id=16558"><br></a><a href="http://llvm-reviews.chandlerc.com/D1362">http://llvm-reviews.chandlerc.com/D1362</a></div><div><br></div><div>Please let me know your inputs on the same.</div>
<div><br></div><div><br></div><div>Test Case-</div><div><br></div><div><div>//RUN: %clang_cc1 -analyze -analyzer-checker=core,unix -verify %s</div><div><br></div><div>typedef typeof(sizeof(int)) size_t;</div><div>extern void* malloc (size_t size);</div>
<div>size_t strlen(const char *s);</div><div>char *strcpy(char *restrict s1, const char *restrict s2);</div><div><br></div><div>void *smallocNoWarn(size_t size) {</div><div>    if (size == 0) {</div><div>        return malloc(1); // this branch is never called</div>
<div>    } else {</div><div>        return malloc(size);</div><div>    }</div><div>}</div><div><br></div><div>char *dupstrNoWarn(const char *s) {</div><div>    const int len = strlen(s);</div><div>    char *p = (char*) smallocNoWarn(len + 1);</div>
<div>    strcpy(p, s); // no-warning</div><div>    return p;</div><div>}</div><div><br></div><div>void *smallocWarn(size_t size) {</div><div>    if (size == 2) {</div><div>        return malloc(1);</div><div>    } else {</div>
<div>        return malloc(size);</div><div>    }</div><div>}</div><div><br></div><div>char *dupstrWarn(const char *s) {</div><div>    const int len = strlen(s);</div><div>    char *p = (char*) smallocWarn(len + 1);</div>
<div>    strcpy(p, s); // expected-warning{{String copy function overflows destination buffer}}</div><div>    return p;</div><div>}</div><div><br></div><div>void *smallocWarnZeroLenString(size_t size) {</div><div>    if (size == 1) {</div>
<div>        return malloc(1);</div><div>    } else {</div><div>        return malloc(size);</div><div>    }</div><div>}</div><div><br></div><div>char *dupstrWarnZeroLenString(const char *s) {</div><div>    const int len = strlen("");</div>
<div>    char *p = (char*) smallocWarn(len + 1);</div><div>    strcpy(p, s); // TODO: Should warn here!</div><div>    return p;</div><div>}</div></div><div><br></div><div>Thanks</div><div>Karthik Bhat</div></div>