RFR: 8038296 sun/tools/jinfo/Basic.sh: java.io.IOException: Command failed in target VM
Dmitry Samersoff
dmitry.samersoff at oracle.com
Tue Mar 25 12:46:23 UTC 2014
Staffan,
strtol() sets errno in two cases -
ERANGE if supplied value is less then LONG_MIN or greater than LONG_MAX
EINVAL if supplied base is not supported.
if you pass probe == 'bla', strtol just return 0 and errno will not be
set. So I'm not sure that check for errno has any value here.
One of possible way to check that supplied value is convertible to long is
char *eptr = probe;
strtol(probe, (char **)&eptr, 10);
if (eptr == probe) {
// we can't convert supplied value
return JNI_ERR;
}
-Dmitry
On 2014-03-25 11:31, Staffan Larsen wrote:
> attachListener_solaris.cpp calls atoi() and then checks errno to see if any errors occurred. The problem is that atoi() does not set errno, so some old value of errno is checked which sometimes causes the function to fail.
>
> The fix is to replace atoi() with strtol() which does set errno. But errno is only set if an error occurred and not set to 0 in case of success. Thus, I set errno to 0 before calling strtol() and check the value afterwards.
>
> Verified with a JPRT run.
>
> webrev: http://cr.openjdk.java.net/~sla/8038296/webrev.00/
> bug: https://bugs.openjdk.java.net/browse/JDK-8038296
>
> Thanks,
> /Staffan
>
--
Dmitry Samersoff
Oracle Java development team, Saint Petersburg, Russia
* I would love to change the world, but they won't give me the sources.
More information about the serviceability-dev
mailing list