sdm: LLVM SA enablement

CRs-Fixed: 2077191
Change-Id: I23066befa5034523788a78edac9b335494d43019
diff --git a/common.mk b/common.mk
index 2318165..83d06c6 100644
--- a/common.mk
+++ b/common.mk
@@ -36,6 +36,10 @@
     common_flags += -DUSER_DEBUG
 endif
 
+ifeq ($(LLVM_SA), true)
+    common_flags += --compile-and-analyze --analyzer-perf --analyzer-Werror
+endif
+
 common_includes := system/core/base/include
 CHECK_VERSION_LE = $(shell if [ $(1) -le $(2) ] ; then echo true ; else echo false ; fi)
 PLATFORM_SDK_NOUGAT = 25
diff --git a/libdisplayconfig/Android.mk b/libdisplayconfig/Android.mk
index fae7f85..a107ea6 100644
--- a/libdisplayconfig/Android.mk
+++ b/libdisplayconfig/Android.mk
@@ -9,4 +9,8 @@
 LOCAL_SHARED_LIBRARIES        := libhidlbase libhidltransport libutils \
                                  vendor.display.config@1.0 android.hidl.base@1.0
 
+ifeq ($(LLVM_SA), true)
+    LOCAL_CFLAGS += --compile-and-analyze --analyzer-perf --analyzer-Werror
+endif
+
 include $(BUILD_SHARED_LIBRARY)
diff --git a/liblight/Android.mk b/liblight/Android.mk
index 2f2e1ca..197a1a4 100644
--- a/liblight/Android.mk
+++ b/liblight/Android.mk
@@ -24,6 +24,9 @@
 LOCAL_MODULE_RELATIVE_PATH := hw
 LOCAL_SHARED_LIBRARIES := liblog libcutils libsdm-disp-vndapis
 LOCAL_CFLAGS := -DLOG_TAG=\"qdlights\"
+ifeq ($(LLVM_SA), true)
+    LOCAL_CFLAGS += --compile-and-analyze --analyzer-perf --analyzer-Werror
+endif
 LOCAL_CLANG  := true
 LOCAL_MODULE := lights.$(TARGET_BOARD_PLATFORM)
 LOCAL_MODULE_TAGS := optional
diff --git a/libqdutils/qd_utils.cpp b/libqdutils/qd_utils.cpp
index 2cce39c..c55354d 100644
--- a/libqdutils/qd_utils.cpp
+++ b/libqdutils/qd_utils.cpp
@@ -264,10 +264,12 @@
 
     while (getline(&line, &len, configFile) != -1) {
         if (!parseLine(line, tokens, maxCount, &tokenCount)) {
-            if (!strncmp(tokens[0], "bpp", strlen("bpp"))) {
+            if (tokens[0] != NULL) {
+              if (!strncmp(tokens[0], "bpp", strlen("bpp"))) {
                 *panelBpp = static_cast<uint32_t>(atoi(tokens[1]));
-            } else  if (!strncmp(tokens[0], "pattern", strlen("pattern"))) {
+              } else  if (!strncmp(tokens[0], "pattern", strlen("pattern"))) {
                 *patternType = static_cast<uint32_t>(atoi(tokens[1]));
+              }
             }
         }
     }
diff --git a/sdm/libs/core/display_base.cpp b/sdm/libs/core/display_base.cpp
index ee2fe44..81529a0 100644
--- a/sdm/libs/core/display_base.cpp
+++ b/sdm/libs/core/display_base.cpp
@@ -619,14 +619,15 @@
       HWRotateInfo &rotate = hw_rotator_session.hw_rotate_info[count];
       LayerRect &src_roi = rotate.src_roi;
       LayerRect &dst_roi = rotate.dst_roi;
-      const char *rotate_split[2] = { "Rot-1", "Rot-2" };
+      char rot[8] = { 0 };
       int pipe_id = 0;
 
       if (hw_rotator_session.mode == kRotatorOffline) {
         snprintf(writeback_id, sizeof(writeback_id), "%d", rotate.writeback_id);
         pipe_id = rotate.pipe_id;
       }
-      DumpImpl::AppendString(buffer, length, format, idx, comp_type, rotate_split[count],
+      snprintf(rot, sizeof(rot), "Rot-%d", count + 1);
+      DumpImpl::AppendString(buffer, length, format, idx, comp_type, rot,
                              writeback_id, pipe_id, input_buffer->width,
                              input_buffer->height, buffer_format, INT(src_roi.left),
                              INT(src_roi.top), INT(src_roi.right), INT(src_roi.bottom),
diff --git a/sdm/libs/core/drm/hw_color_manager_drm.cpp b/sdm/libs/core/drm/hw_color_manager_drm.cpp
index 95c25cd..7563647 100644
--- a/sdm/libs/core/drm/hw_color_manager_drm.cpp
+++ b/sdm/libs/core/drm/hw_color_manager_drm.cpp
@@ -861,7 +861,7 @@
       break;
     default:
       DLOGE("Invalid gamut mode %d", sde_gamut->mode);
-      free(mdp_gamut);
+      delete mdp_gamut;
       return kErrorParameters;
   }
 
diff --git a/sdm/libs/core/fb/hw_device.cpp b/sdm/libs/core/fb/hw_device.cpp
index eb0d17b..cac1454 100644
--- a/sdm/libs/core/fb/hw_device.cpp
+++ b/sdm/libs/core/fb/hw_device.cpp
@@ -813,9 +813,11 @@
     const uint32_t max_count = 10;
     char *tokens[max_count] = { NULL };
     if (!ParseLine(line.c_str(), "=\n", tokens, max_count, &token_count)) {
-      if (!strncmp(tokens[0], "panel_name", strlen("panel_name"))) {
-        snprintf(panel_info->panel_name, sizeof(panel_info->panel_name), "%s", tokens[1]);
-        break;
+      if (tokens[0] != NULL) {
+        if (!strncmp(tokens[0], "panel_name", strlen("panel_name"))) {
+           snprintf(panel_info->panel_name, sizeof(panel_info->panel_name), "%s", tokens[1]);
+           break;
+        }
       }
     }
   }
diff --git a/sdm/libs/core/fb/hw_info.cpp b/sdm/libs/core/fb/hw_info.cpp
index f2a13e3..2cdae06 100644
--- a/sdm/libs/core/fb/hw_info.cpp
+++ b/sdm/libs/core/fb/hw_info.cpp
@@ -411,10 +411,12 @@
          string caps;
          while (Sys::getline_(caps_fs, caps)) {
            if (!ParseString(caps.c_str(), tokens, max_count, ":, =\n", &token_count)) {
-             if (!strncmp(tokens[0], "downscale_compression", strlen("downscale_compression"))) {
-               hw_resource->hw_rot_info.downscale_compression = UINT8(atoi(tokens[1]));
-             } else if (!strncmp(tokens[0], "min_downscale", strlen("min_downscale"))) {
-               hw_resource->hw_rot_info.min_downscale = FLOAT(atof(tokens[1]));
+             if (tokens[0] != NULL) {
+               if (!strncmp(tokens[0], "downscale_compression", strlen("downscale_compression"))) {
+                 hw_resource->hw_rot_info.downscale_compression = UINT8(atoi(tokens[1]));
+               } else if (!strncmp(tokens[0], "min_downscale", strlen("min_downscale"))) {
+                 hw_resource->hw_rot_info.min_downscale = FLOAT(atof(tokens[1]));
+               }
              }
            }
          }
diff --git a/sdm/libs/hwc2/hwc_session.cpp b/sdm/libs/hwc2/hwc_session.cpp
index 624105b..e0ac992 100644
--- a/sdm/libs/hwc2/hwc_session.cpp
+++ b/sdm/libs/hwc2/hwc_session.cpp
@@ -271,6 +271,8 @@
 
     int status = hwc_session->Init();
     if (status != 0) {
+      delete hwc_session;
+      hwc_session = NULL;
       return status;
     }