< prev index next >

src/share/vm/runtime/globals.cpp

Print this page
rev 12397 : 8170981: Possible access to char array with negative index

*** 467,484 **** if (is_constant_in_binary()) { return; } if (!printRanges) { // The print below assumes that the flag name is 40 characters or less. // This works for most flags, but there are exceptions. Our longest flag // name right now is UseAdaptiveGenerationSizePolicyAtMajorCollection and // its minor collection buddy. These are 48 characters. We use a buffer of ! // 10 spaces below to adjust the space between the flag value and the // column of flag type and origin that is printed in the end of the line. ! char spaces[10 + 1] = " "; ! st->print("%9s %-40s = ", _type, _name); if (is_bool()) { st->print("%-20s", get_bool() ? "true" : "false"); } else if (is_int()) { st->print("%-20d", get_int()); --- 467,488 ---- if (is_constant_in_binary()) { return; } if (!printRanges) { + // Use some named constants to make code more readable. + const unsigned int nSpaces = 10; + const unsigned int maxFlagLen = 40 + nSpaces; + // The print below assumes that the flag name is 40 characters or less. // This works for most flags, but there are exceptions. Our longest flag // name right now is UseAdaptiveGenerationSizePolicyAtMajorCollection and // its minor collection buddy. These are 48 characters. We use a buffer of ! // nSpaces spaces below to adjust the space between the flag value and the // column of flag type and origin that is printed in the end of the line. ! char spaces[nSpaces + 1] = " "; ! st->print("%9s %-*s = ", _type, maxFlagLen-nSpaces, _name); if (is_bool()) { st->print("%-20s", get_bool() ? "true" : "false"); } else if (is_int()) { st->print("%-20d", get_int());
*** 507,519 **** } st->print("%-20s", cp); } else st->print("%-20s", ""); } ! assert(strlen(_name) < 50, "Flag name is longer than expected"); ! spaces[50 - MAX2((size_t)40, strlen(_name))] = '\0'; st->print("%s", spaces); print_kind_and_origin(st); #ifndef PRODUCT if (withComments) { st->print("%s", _doc); --- 511,526 ---- } st->print("%-20s", cp); } else st->print("%-20s", ""); } ! // Make sure we do not punch a '\0' at a negative char array index. ! unsigned int nameLen = strlen(_name); ! if (nameLen <= maxFlagLen) { ! spaces[maxFlagLen - MAX2(maxFlagLen-nSpaces, nameLen)] = '\0'; st->print("%s", spaces); + } print_kind_and_origin(st); #ifndef PRODUCT if (withComments) { st->print("%s", _doc);
< prev index next >