Hi Mathi,

I also tried to applied my patch that sent to you but I can not.
I don't know why.

Please try my patch in attachment again.

About freeing logBuf:

Because string that pointed by logBug will be used later in write_log_record(logHandle, logStreamHandle, selectionObject, &logRecord), we can not free it immediately.

Instead we should free logRecord.logBuffer->logBuf.

But, because not freeing this pointer do not cause serious memory leak,
I think we can ignore it.
I've try to run valgrind and the the result just say that this is "still reachable".

Base on this discussion I think we can ignore freeing that pointer:
http://stackoverflow.com/questions/3840582/still-reachable-leak-detected-by-valgrind

valgrind --show-reachable=yes --leak-check=full --track-origins=yes /usr/local/bin/saflogger abc

==750== Thread 1:
==750== 32 bytes in 1 blocks are still reachable in loss record 1 of 2
==750== at 0x4C2C494: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==750==    by 0x589768F: _dlerror_run (dlerror.c:141)
==750==    by 0x58970C0: dlopen@@GLIBC_2.2.5 (dlopen.c:87)
==750==    by 0x5066FB4: ncs_leap_startup (ncs_main_pub.c:254)
==750==    by 0x5067306: ncs_core_agents_startup (ncs_main_pub.c:337)
==750==    by 0x5067448: ncs_agents_startup (ncs_main_pub.c:180)
==750==    by 0x52C9564: lga_startup (lga_util.c:282)
==750==    by 0x52C799D: saLogInitialize (lga_api.c:131)
==750==    by 0x401495: main (saf_logger.c:368)
==750==
==750== 67 bytes in 1 blocks are still reachable in loss record 2 of 2
==750== at 0x4C2A2DB: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==750==    by 0x4016A6: main (saf_logger.c:333)
==750==
==750== LEAK SUMMARY:
==750==    definitely lost: 0 bytes in 0 blocks
==750==    indirectly lost: 0 bytes in 0 blocks
==750==      possibly lost: 0 bytes in 0 blocks
==750==    still reachable: 99 bytes in 2 blocks
==750==         suppressed: 0 bytes in 0 blocks

Best regards,
Giang Do

On 01/09/2015 12:34, Mathivanan Naickan Palanivelu wrote:
Hi Giang,

Iam unable to apply the patch on the latest staging.
However, the changes look straight forward.
Should we also free logBuf?

Thanks,
Mathi.

-----Original Message-----
From: giang [mailto:[email protected]]
Sent: Tuesday, August 25, 2015 11:24 AM
To: Mathivanan Naickan Palanivelu; [email protected];
[email protected]
Cc: [email protected]
Subject: [PATCH 1 of 1] log: saflogger does not check invalid options [#1367]

   osaf/tools/saflog/saflogger/saf_logger.c |  49
++++++++++++++++++++++---------
   1 files changed, 35 insertions(+), 14 deletions(-)


If there are invalid non-options, show them, recommend use --help and then
exit.

diff --git a/osaf/tools/saflog/saflogger/saf_logger.c
b/osaf/tools/saflog/saflogger/saf_logger.c
--- a/osaf/tools/saflog/saflogger/saf_logger.c
+++ b/osaf/tools/saflog/saflogger/saf_logger.c
@@ -311,14 +311,48 @@ int main(int argc, char *argv[])
                        logRecord.logHeader.genericHdr.logSeverity =
get_severity(optarg);
                        break;
                case 'h':
+                       usage();
+                       exit(EXIT_SUCCESS);
+                       break;
                case '?':
                default:
-                       usage();
+                       fprintf(stderr, "Try saflogger -h for more
information.\n");
                        exit(EXIT_FAILURE);
                        break;
                }
        }

+       if (optind >= argc) {
+               /* No body of log record */
+       }
+       else if (optind == argc - 1) {
+               /* Create body of log record */
+               int sz;
+               char *logBuf = NULL;
+               sz = strlen(argv[optind]);
+               logBuf = malloc(sz + 64);       /* add space for index/id in
periodic writes */
+               strcpy(logBuf, argv[optind]);
+               logBuffer.logBufSize = sz;
+               logBuffer.logBuf = (SaUint8T *)logBuf;
+               logRecord.logBuffer = &logBuffer;
+       }
+       else {
+               fprintf(stderr, "Invalid argument.\n");
+               fprintf(stderr, "Enclose message in quotation marks \"\" e.g.
\"");
+               while (optind < argc)
+               {
+                       fprintf(stderr, "%s", argv[optind++]);
+                       if (optind < argc)
+                               fprintf(stderr, " ");
+                       else
+                               fprintf(stderr, "\"\n");
+               }
+               fprintf(stderr, "Try saflogger -h for more information.\n");
+               exit(EXIT_FAILURE);
+       }
+
+       logStreamName.length = strlen((char *)logStreamName.value);
+
        if (logRecord.logHdrType == SA_LOG_NTF_HEADER) {
                /* Setup some valid values */
                logRecord.logHeader.ntfHdr.notificationId =
SA_NTF_IDENTIFIER_UNUSED; @@ -329,19 +363,6 @@ int main(int argc, char
*argv[])
                logRecord.logHeader.ntfHdr.eventTime =
get_current_SaTime();
        }

-       logStreamName.length = strlen((char *)logStreamName.value);
-
-       /* Create body of log record (if any) */
-       if (optind < argc) {
-               int sz;
-               char *logBuf = NULL;
-               sz = strlen(argv[optind]);
-               logBuf = malloc(sz + 64);       /* add space for index/id in
periodic writes */
-               strcpy(logBuf, argv[optind]);
-               logBuffer.logBufSize = sz;
-               logBuffer.logBuf = (SaUint8T *)logBuf;
-               logRecord.logBuffer = &logBuffer;
-       }

        wait_time = 0;
        error = saLogInitialize(&logHandle, &logCallbacks, &logVersion);
# HG changeset patch
# User Giang
# Date 1435817678 -25200
#      Thu Jul 02 13:14:38 2015 +0700
# Node ID e1959a22051b6bc08bb58fc1b6cae4cc5541a58b
# Parent  72b291175b84475a654a1669e682f01a5b39626f
log: saflogger does not check invalid options [#1367]

If there are invalid non-options, show them, recommend use --help and then exit.

diff --git a/osaf/tools/saflog/saflogger/saf_logger.c b/osaf/tools/saflog/saflogger/saf_logger.c
--- a/osaf/tools/saflog/saflogger/saf_logger.c
+++ b/osaf/tools/saflog/saflogger/saf_logger.c
@@ -311,14 +311,48 @@ int main(int argc, char *argv[])
 			logRecord.logHeader.genericHdr.logSeverity = get_severity(optarg);
 			break;
 		case 'h':
+			usage();
+			exit(EXIT_SUCCESS);
+			break;
 		case '?':
 		default:
-			usage();
+			fprintf(stderr, "Try saflogger -h for more information.\n");
 			exit(EXIT_FAILURE);
 			break;
 		}
 	}
 
+	if (optind >= argc) {
+		/* No body of log record */
+	}
+	else if (optind == argc - 1) {
+		/* Create body of log record */
+		int sz;
+		char *logBuf = NULL;
+		sz = strlen(argv[optind]);
+		logBuf = malloc(sz + 64);	/* add space for index/id in periodic writes */
+		strcpy(logBuf, argv[optind]);
+		logBuffer.logBufSize = sz;
+		logBuffer.logBuf = (SaUint8T *)logBuf;
+		logRecord.logBuffer = &logBuffer;
+	}
+	else {
+		fprintf(stderr, "Invalid argument.\n");
+		fprintf(stderr, "Enclose message in quotation marks \"\" e.g. \"");
+		while (optind < argc)
+		{
+			fprintf(stderr, "%s", argv[optind++]);
+			if (optind < argc) 
+				fprintf(stderr, " ");
+			else
+				fprintf(stderr, "\"\n");
+		}
+		fprintf(stderr, "Try saflogger -h for more information.\n");
+		exit(EXIT_FAILURE);
+	}
+
+	logStreamName.length = strlen((char *)logStreamName.value);
+
 	if (logRecord.logHdrType == SA_LOG_NTF_HEADER) {
 		/* Setup some valid values */
 		logRecord.logHeader.ntfHdr.notificationId = SA_NTF_IDENTIFIER_UNUSED;
@@ -329,19 +363,6 @@ int main(int argc, char *argv[])
 		logRecord.logHeader.ntfHdr.eventTime = get_current_SaTime();
 	}
 
-	logStreamName.length = strlen((char *)logStreamName.value);
-
-	/* Create body of log record (if any) */
-	if (optind < argc) {
-		int sz;
-		char *logBuf = NULL;
-		sz = strlen(argv[optind]);
-		logBuf = malloc(sz + 64);	/* add space for index/id in periodic writes */
-		strcpy(logBuf, argv[optind]);
-		logBuffer.logBufSize = sz;
-		logBuffer.logBuf = (SaUint8T *)logBuf;
-		logRecord.logBuffer = &logBuffer;
-	}
 
 	wait_time = 0;
 	error = saLogInitialize(&logHandle, &logCallbacks, &logVersion);
------------------------------------------------------------------------------
Monitor Your Dynamic Infrastructure at Any Scale With Datadog!
Get real-time metrics from all of your servers, apps and tools
in one place.
SourceForge users - Click here to start your Free Trial of Datadog now!
http://pubads.g.doubleclick.net/gampad/clk?id=241902991&iu=/4140
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to