changeset 70:9db2ed159a6f

Bug 3223: Cannot set empty value to signal setting Reviewed-by: yasuenag https://github.com/HeapStats/heapstats/pull/47
author KUBOTA Yuji <kubota.yuji@lab.ntt.co.jp>
date Fri, 10 Mar 2017 01:11:20 +0900
parents 8a678cb965cc
children 5c6af4ec5c40
files agent/ChangeLog agent/src/util.cpp
diffstat 2 files changed, 25 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/agent/ChangeLog	Mon Jan 16 23:57:55 2017 +0900
+++ b/agent/ChangeLog	Fri Mar 10 01:11:20 2017 +0900
@@ -1,3 +1,7 @@
+2017-03-10 KUBOTA Yuji <kubota.yuji@lab.ntt.co.jp>
+
+	* Bug 3223: Cannot set empty value to signal setting
+
 2017-01-16 Yasumasa Suenaga  <yasuenag@gmail.com>
 
 	* Bug 3285: JVM aborted on assert code at MonitorContended JVMTI event
--- a/agent/src/util.cpp	Mon Jan 16 23:57:55 2017 +0900
+++ b/agent/src/util.cpp	Fri Mar 10 01:11:20 2017 +0900
@@ -388,7 +388,7 @@
   const unsigned char *tables = NULL; /* pcre_maketables(); */
   
   /* Initialize PCRE. */
-  char pExpression[255] = "^\\s*(.+?)\\s*=\\s*(.+?)\\s*$";
+  char pExpression[255] = "^\\s*(.+?)\\s*=\\s*(.+?)?\\s*$";
   const char *errMsg;
   int errOffset;
   real_pcre *pPcre;
@@ -442,8 +442,8 @@
         }
         /* Get matched value string. */
         if (pcre_get_substring(pBuff, matchArr, matchCnt, 2, &value) <= 0) {
-          pcre_free_substring(key);
-          continue;
+          /* Get "" to set default value or disable option */
+          value = (char *)calloc(1, sizeof(char));
         }
         
         /* Check key name. */
@@ -541,20 +541,32 @@
           || strcmp(key, "signal_reload") == 0) {
           
           /* If signal is supported by JVM. */
-          if (isSupportSignal(value)) {
+          if (isSupportSignal(value) || value == NULL || value[0] == '\0') {
             
             /* Copy string exclude "SIG". */
             if (strcmp(key, "logsignal_normal") == 0) {
               free(arg.logSignalNormal);
-              arg.logSignalNormal = strdup(value + 3);
-              
+              if (value == NULL || value[0] == '\0') {
+                arg.logSignalNormal = strdup("");
+              } else {
+                arg.logSignalNormal = strdup(value + 3);
+              }
+
             } else if (strcmp(key, "logsignal_all") == 0) {
               free(arg.logSignalAll);
-              arg.logSignalAll = strdup(value + 3);
-              
+              if (value == NULL || value[0] == '\0') {
+                arg.logSignalAll = strdup("");
+              } else {
+                arg.logSignalAll = strdup(value + 3);
+              }
+
             } else {
               free(arg.reloadSignal);
-              arg.reloadSignal = strdup(value + 3);
+              if (value == NULL || value[0] == '\0') {
+                arg.reloadSignal = strdup("");
+              } else {
+                arg.reloadSignal = strdup(value + 3);
+              }
             }
           } else {
             PRINT_WARN_MSG_HEADER