--- old/src/solaris/native/java/lang/UNIXProcess_md.c 2013-03-25 15:55:30.569421919 -0400 +++ new/src/solaris/native/java/lang/UNIXProcess_md.c 2013-03-25 15:55:30.349412833 -0400 @@ -245,19 +245,46 @@ { const char *p, *q; char **pathv; - int i; - int count = countOccurrences(path, ':') + 1; + const char *cwd = "./"; + size_t i; + size_t count = countOccurrences(path, ':') + 1; pathv = NEW(char*, count+1); + if (pathv == NULL) + return NULL; + pathv[count] = NULL; for (p = path, i = 0; i < count; i++, p = q + 1) { for (q = p; (*q != ':') && (*q != '\0'); q++) ; - if (q == p) /* empty PATH component => "." */ - pathv[i] = "./"; + + if (q == p) { /* empty PATH component => "." */ + pathv[i] = NEW(char,sizeof(cwd)); + + if (pathv[i] == NULL) { + + while(i) + free(pathv[--i]); + + free(pathv); + return NULL; + } + + memcpy(pathv[i],cwd,sizeof(cwd)); + } else { int addSlash = ((*(q - 1)) != '/'); pathv[i] = NEW(char, q - p + addSlash + 1); + + if (pathv[i] == NULL) { + + while(i) + free(pathv[--i]); + + free(pathv); + return NULL; + } + memcpy(pathv[i], p, q - p); if (addSlash) pathv[i][q - p] = '/'; @@ -486,6 +513,9 @@ } /* ASCII Decimal representation uses 2.4 times as many bits as binary. */ errmsg = NEW(char, strlen(format) + strlen(detail) + 3 * sizeof(errnum)); + if (errmsg == NULL) + return; + sprintf(errmsg, format, errnum, detail); s = JNU_NewStringPlatform(env, errmsg); if (s != NULL) {