| Bug #1634 | "operator new" in my_new wastes memory | ||
|---|---|---|---|
| Submitted: | 23 Oct 2003 2:03 | Modified: | 30 Oct 2003 1:30 |
| Reporter: | Marko Mäkelä | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server | Severity: | S3 (Non-critical) |
| Version: | 4.0 and 4.1 | OS: | Linux (GNU/Linux) |
| Assigned to: | Konstantin Osipov | CPU Architecture: | Any |
[30 Oct 2003 1:30]
Konstantin Osipov
Fixed, ChangeSet 1.1601 03/10/30 12:25:15 konstantin@mysql.com

Description: Here's a snip from mysys/my_new.cc. void *operator new (size_t sz) { return (void *) malloc (sz ? sz+1 : sz); } void *operator new[] (size_t sz) { return (void *) malloc (sz ? sz+1 : sz); } How to repeat: Compile the code with -DUSE_MYSYS_NEW. Try to allocate an object of size 0. The argument of the malloc function will evaluate to 0, and the intended work-around for allocating zero bytes will fail. Try to allocate an object of any other size. The argument of malloc will evaluate to sz+1, wasting at least one byte of memory. Suggested fix: I believe that the two "return" lines should be as follows: return (void *) malloc (sz > 0 ? sz : 1);