diff options
author | Hong-Mei Li <a21834@motorola.com> | 2013-04-01 11:24:44 +0800 |
---|---|---|
committer | Tanguy Pruvot <tanguy.pruvot@gmail.com> | 2013-05-25 23:45:19 +0200 |
commit | de5ae87b9370028996adaf91732a95c27c6c8bac (patch) | |
tree | fb793d7e959046094369b3e2ee94d82f0d2970cc | |
parent | fb0360bc36831cd3d5d1dd19e01ff6e76d4426f4 (diff) | |
download | system_core-de5ae87b9370028996adaf91732a95c27c6c8bac.zip system_core-de5ae87b9370028996adaf91732a95c27c6c8bac.tar.gz system_core-de5ae87b9370028996adaf91732a95c27c6c8bac.tar.bz2 |
libsysutils: fix null pointer and memory leak issue
In SocketClient::quoteArg function
1. Fix potential null pointer accessing issue
2. Fix potential memory leak introduced by realloc fail
Change-Id: I1ca0f9089290d43452e9a71428244545f4ed866b
Signed-off-by: Hong-Mei Li <a21834@motorola.com>
-rw-r--r-- | libsysutils/src/SocketClient.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/libsysutils/src/SocketClient.cpp b/libsysutils/src/SocketClient.cpp index 3d4984d..ae0e077 100644 --- a/libsysutils/src/SocketClient.cpp +++ b/libsysutils/src/SocketClient.cpp @@ -112,6 +112,12 @@ char *SocketClient::quoteArg(const char *arg) { char *result = (char *)malloc(len * 2 + 3); char *current = result; const char *end = arg + len; + char *oldresult; + + if(result == NULL) { + SLOGW("malloc error (%s)", strerror(errno)); + return NULL; + } *(current++) = '"'; while (arg < end) { @@ -125,8 +131,9 @@ char *SocketClient::quoteArg(const char *arg) { } *(current++) = '"'; *(current++) = '\0'; + oldresult = result; // save pointer in case realloc fails result = (char *)realloc(result, current-result); - return result; + return result ? result : oldresult; } |