I'm also good with the fix. At this point, I think everyone who
has commented on this fix previously has chimed in...
Dan
On 4/12/16 3:12 PM, Dmitry Samersoff wrote:
Alex,
The fix looks good for me.
-Dmitry
On 2016-04-12 22:28, Alex Henrie wrote:
# HG changeset patch
# User Alex Henrie <alexhenri...@gmail.com>
# Date 1447827030 25200
# Tue Nov 17 23:10:30 2015 -0700
# Node ID 66c6fa3b2280afa12a2d51ea668b6a781b5744b5
# Parent 1f8c4b1a301c989dc299cad63dbc530b1de3ed70
8145278: Fix memory leak in splitPathList
diff --git a/src/java.instrument/share/native/libinstrument/InvocationAdapter.c
b/src/java.instrument/share/native/libinstrument/InvocationAdapter.c
--- a/src/java.instrument/share/native/libinstrument/InvocationAdapter.c
+++ b/src/java.instrument/share/native/libinstrument/InvocationAdapter.c
@@ -513,28 +513,32 @@ eventHandlerClassFileLoadHook( jvmtiEnv
* The attribute value is in UTF8 but cannot contain NUL. Also non US-ASCII
* characters must be escaped (URI syntax) so safe to iterate through the
* value as a C string.
*/
static void
splitPathList(const char* str, int* pathCount, char*** paths) {
int count = 0;
char** segments = NULL;
+ char** new_segments;
char* c = (char*) str;
while (*c != '\0') {
while (*c == ' ') c++; /* skip leading spaces */
if (*c == '\0') {
break;
}
- if (segments == NULL) {
- segments = (char**)malloc( sizeof(char**) );
- } else {
- segments = (char**)realloc( segments, (count+1)*sizeof(char**) );
+ new_segments = (char**)realloc(segments, (count+1)*sizeof(char*));
+ if (new_segments == NULL) {
+ jplis_assert(0);
+ free(segments);
+ count = 0;
+ segments = NULL;
+ break;
}
- jplis_assert(segments != (char**)NULL);
+ segments = new_segments;
segments[count++] = c;
c = strchr(c, ' ');
if (c == NULL) {
break;
}
*c = '\0';
c++;
}