< prev index next >

src/os/solaris/dtrace/libjvm_db.c

Print this page
rev 8113 : 8076475: Misuses of strncpy/strncat
Summary: Various small fixes around strncpy and strncat
Reviewed-by: dsamersoff


 565   CHECK_FAIL(err);
 566   signatureSymbol &= (~1);  // remove metadata lsb
 567   err = ps_pread(J->P, signatureSymbol + OFFSET_Symbol_length, &signatureSymbolLength, 2);
 568   CHECK_FAIL(err);
 569   signatureString = (char*)calloc(signatureSymbolLength + 1, 1);
 570   err = ps_pread(J->P, signatureSymbol + OFFSET_Symbol_body, signatureString, signatureSymbolLength);
 571   CHECK_FAIL(err);
 572 
 573   /* To get klass string */
 574   err = read_pointer(J, constantPool + OFFSET_ConstantPool_pool_holder, &klassPtr);
 575   CHECK_FAIL(err);
 576   err = read_pointer(J, klassPtr + OFFSET_Klass_name, &klassSymbol);
 577   CHECK_FAIL(err);
 578   err = ps_pread(J->P, klassSymbol + OFFSET_Symbol_length, &klassSymbolLength, 2);
 579   CHECK_FAIL(err);
 580   klassString = (char*)calloc(klassSymbolLength + 1, 1);
 581   err = ps_pread(J->P, klassSymbol + OFFSET_Symbol_body, klassString, klassSymbolLength);
 582   CHECK_FAIL(err);
 583 
 584   result[0] = '\0';
 585   strncat(result, klassString, size);
 586   size -= strlen(klassString);
 587   strncat(result, ".", size);
 588   size -= 1;
 589   strncat(result, nameString, size);
 590   size -= strlen(nameString);
 591   strncat(result, signatureString, size);

 592 
 593   if (nameString != NULL) free(nameString);
 594   if (klassString != NULL) free(klassString);
 595   if (signatureString != NULL) free(signatureString);
 596 
 597   return PS_OK;
 598 
 599  fail:
 600   if (debug) {
 601       fprintf(stderr, "name_for_methodPtr: FAIL \n\n");
 602   }
 603   if (nameString != NULL) free(nameString);
 604   if (klassString != NULL) free(klassString);
 605   if (signatureString != NULL) free(signatureString);
 606   return -1;
 607 }
 608 
 609 static int nmethod_info(Nmethod_t *N)
 610 {
 611   jvm_agent_t *J = N->J;


1078   CHECK_FAIL(err);
1079 
1080   if (N->pc_desc > 0) {
1081       jframe->locinf = 1;
1082       err = scopeDesc_chain(N);
1083       CHECK_FAIL(err);
1084   }
1085   result[0] = COMP_METHOD_SIGN;
1086   vf = &N->vframes[0];
1087   if (N->vf_cnt > 0) {
1088       jframe->vf_cnt = N->vf_cnt;
1089       jframe->bci  = vf->bci;
1090       jframe->line = vf->line;
1091       err = name_for_methodPtr(J, N->vframes[0].method, result+1, size-1);
1092       CHECK_FAIL(err);
1093   } else {
1094       err = name_for_methodPtr(J, method, result+1, size-1);
1095       CHECK_FAIL(err);
1096   }
1097   if (deoptimized) {
1098     strncat(result + 1, " [deoptimized frame]; ", size-1);
1099   } else {
1100     strncat(result + 1, " [compiled] ", size-1);
1101   }
1102   if (debug)
1103       fprintf(stderr, "name_for_nmethod: END: method name: %s, vf_cnt: %d\n\n",
1104                       result, N->vf_cnt);
1105   return PS_OK;
1106 
1107  fail:
1108   if (debug)
1109       fprintf(stderr, "name_for_nmethod: FAIL \n\n");
1110   return err;
1111 }
1112 
1113 static int
1114 name_for_imethod(jvm_agent_t* J,
1115                  uint64_t bcp,
1116                  uint64_t method,
1117                  char *result,
1118                  size_t size,
1119                  Jframe_t *jframe
1120 ) {




 565   CHECK_FAIL(err);
 566   signatureSymbol &= (~1);  // remove metadata lsb
 567   err = ps_pread(J->P, signatureSymbol + OFFSET_Symbol_length, &signatureSymbolLength, 2);
 568   CHECK_FAIL(err);
 569   signatureString = (char*)calloc(signatureSymbolLength + 1, 1);
 570   err = ps_pread(J->P, signatureSymbol + OFFSET_Symbol_body, signatureString, signatureSymbolLength);
 571   CHECK_FAIL(err);
 572 
 573   /* To get klass string */
 574   err = read_pointer(J, constantPool + OFFSET_ConstantPool_pool_holder, &klassPtr);
 575   CHECK_FAIL(err);
 576   err = read_pointer(J, klassPtr + OFFSET_Klass_name, &klassSymbol);
 577   CHECK_FAIL(err);
 578   err = ps_pread(J->P, klassSymbol + OFFSET_Symbol_length, &klassSymbolLength, 2);
 579   CHECK_FAIL(err);
 580   klassString = (char*)calloc(klassSymbolLength + 1, 1);
 581   err = ps_pread(J->P, klassSymbol + OFFSET_Symbol_body, klassString, klassSymbolLength);
 582   CHECK_FAIL(err);
 583 
 584   result[0] = '\0';
 585   if (snprintf(result, size,
 586     "%s.%s%s",
 587     klassString,
 588     nameString,
 589     signatureString) >= size) {
 590     // truncation
 591     goto fail;
 592   }
 593 
 594   if (nameString != NULL) free(nameString);
 595   if (klassString != NULL) free(klassString);
 596   if (signatureString != NULL) free(signatureString);
 597 
 598   return PS_OK;
 599 
 600  fail:
 601   if (debug) {
 602       fprintf(stderr, "name_for_methodPtr: FAIL \n\n");
 603   }
 604   if (nameString != NULL) free(nameString);
 605   if (klassString != NULL) free(klassString);
 606   if (signatureString != NULL) free(signatureString);
 607   return -1;
 608 }
 609 
 610 static int nmethod_info(Nmethod_t *N)
 611 {
 612   jvm_agent_t *J = N->J;


1079   CHECK_FAIL(err);
1080 
1081   if (N->pc_desc > 0) {
1082       jframe->locinf = 1;
1083       err = scopeDesc_chain(N);
1084       CHECK_FAIL(err);
1085   }
1086   result[0] = COMP_METHOD_SIGN;
1087   vf = &N->vframes[0];
1088   if (N->vf_cnt > 0) {
1089       jframe->vf_cnt = N->vf_cnt;
1090       jframe->bci  = vf->bci;
1091       jframe->line = vf->line;
1092       err = name_for_methodPtr(J, N->vframes[0].method, result+1, size-1);
1093       CHECK_FAIL(err);
1094   } else {
1095       err = name_for_methodPtr(J, method, result+1, size-1);
1096       CHECK_FAIL(err);
1097   }
1098   if (deoptimized) {
1099     strncat(result, " [deoptimized frame]; ", size - strlen(result) - 1);
1100   } else {
1101     strncat(result, " [compiled] ", size - strlen(result) - 1);
1102   }
1103   if (debug)
1104       fprintf(stderr, "name_for_nmethod: END: method name: %s, vf_cnt: %d\n\n",
1105                       result, N->vf_cnt);
1106   return PS_OK;
1107 
1108  fail:
1109   if (debug)
1110       fprintf(stderr, "name_for_nmethod: FAIL \n\n");
1111   return err;
1112 }
1113 
1114 static int
1115 name_for_imethod(jvm_agent_t* J,
1116                  uint64_t bcp,
1117                  uint64_t method,
1118                  char *result,
1119                  size_t size,
1120                  Jframe_t *jframe
1121 ) {


< prev index next >