diff --git a/plugins/modbus/modbus.c b/plugins/modbus/modbus.c index e3e0f427..89456ac7 100644 --- a/plugins/modbus/modbus.c +++ b/plugins/modbus/modbus.c @@ -182,7 +182,7 @@ int modbus_m_write_req(char *buf, uint8_t device_address, uint8_t * data8 = (uint8_t *) &request[1]; uint16_t *data16 = (uint16_t *) &request[1]; uint32_t *data32 = (uint32_t *) &request[1]; - uint16_t *crc; + uint16_t *crc = NULL; uint16_t len = sizeof(*code) + sizeof(*request) + sizeof(*crc); diff --git a/plugins/modbus/modbus_point.c b/plugins/modbus/modbus_point.c index 5f08f117..e68f2e62 100644 --- a/plugins/modbus/modbus_point.c +++ b/plugins/modbus/modbus_point.c @@ -414,8 +414,8 @@ static void insert_point(modbus_point_context_t *ctx, modbus_point_t *point) static void insert_cmd(modbus_point_context_t *ctx, modbus_point_t *point) { - bool exist = false; - modbus_function_e function; + bool exist = false; + modbus_function_e function = 0; switch (point->area) { case MODBUS_AREA_COIL: diff --git a/plugins/mqtt/command/read_write.c b/plugins/mqtt/command/read_write.c index a0f7fdd6..0ba90ace 100644 --- a/plugins/mqtt/command/read_write.c +++ b/plugins/mqtt/command/read_write.c @@ -331,7 +331,7 @@ int command_rw_write_request(neu_plugin_t *plugin, neu_json_mqtt_t *mqtt, neu_datatag_table_t *table = neu_system_get_datatags_table(plugin, node_id); neu_int_val_t int_val; - neu_data_val_t * val; + neu_data_val_t * val = NULL; union neu_json_value value = write_req->value; neu_datatag_t * tag = neu_datatag_tbl_get_by_name(table, write_req->tag_name); diff --git a/plugins/mqtt/util.c b/plugins/mqtt/util.c index 53bf71a5..604fad86 100644 --- a/plugins/mqtt/util.c +++ b/plugins/mqtt/util.c @@ -177,10 +177,25 @@ int mqtt_option_init(neu_config_t *config, neu_mqtt_option_t *option) return -1; } - char workdir[PATH_MAX + 1] = { 0 }; - getcwd(workdir, sizeof(workdir)); - sprintf(ca_file, "%s/%s/%s", workdir, MQTT_CERT_PATH, MQTT_CA_FILE); - sprintf(ca_path, "%s/%s", workdir, MQTT_CERT_PATH); + char workdir[PATH_MAX + 1] = { 0 }; + char *ret_dir = getcwd(workdir, sizeof(workdir)); + if (NULL == ret_dir) { + free(ca.v.val_str); + return -1; + } + ret = snprintf(ca_file, sizeof(ca_file), "%s/%s/%s", workdir, + MQTT_CERT_PATH, MQTT_CA_FILE); + if (ret < 0) { + free(ca.v.val_str); + return -1; + } + + ret = snprintf(ca_path, sizeof(ca_path), "%s/%s", workdir, + MQTT_CERT_PATH); + if (ret < 0) { + free(ca.v.val_str); + return -1; + } ret = b64_file_store(ca.v.val_str, ca_file); free(ca.v.val_str); @@ -192,12 +207,20 @@ int mqtt_option_init(neu_config_t *config, neu_mqtt_option_t *option) } if (0 == strcmp(option->connection, "ssl://")) { - char workdir[PATH_MAX + 1] = { 0 }; - getcwd(workdir, sizeof(workdir)); + char workdir[PATH_MAX + 1] = { 0 }; + char *ret_dir = getcwd(workdir, sizeof(workdir)); + if (NULL == ret_dir) { + return -1; + } if (NULL != cert.v.val_str && 0 < strlen(cert.v.val_str)) { - sprintf(cert_file, "%s/%s/%s", workdir, MQTT_CERT_PATH, - MQTT_CERT_FILE); + ret = snprintf(cert_file, sizeof(cert_file), "%s/%s/%s", workdir, + MQTT_CERT_PATH, MQTT_CERT_FILE); + if (ret < 0) { + free(cert.v.val_str); + cert.v.val_str = NULL; + return -1; + } ret = b64_file_store(cert.v.val_str, cert_file); free(cert.v.val_str); @@ -209,8 +232,13 @@ int mqtt_option_init(neu_config_t *config, neu_mqtt_option_t *option) } if (NULL != key.v.val_str && 0 < strlen(key.v.val_str)) { - sprintf(key_file, "%s/%s/%s", workdir, MQTT_CERT_PATH, - MQTT_KEY_FILE); + ret = snprintf(key_file, sizeof(key_file), "%s/%s/%s", workdir, + MQTT_CERT_PATH, MQTT_KEY_FILE); + if (ret < 0) { + free(key.v.val_str); + key.v.val_str = NULL; + return -1; + } ret = b64_file_store(key.v.val_str, key_file); free(key.v.val_str); diff --git a/plugins/restful/log_handle.c b/plugins/restful/log_handle.c index faec6afe..4681a0b5 100644 --- a/plugins/restful/log_handle.c +++ b/plugins/restful/log_handle.c @@ -148,7 +148,11 @@ static inline bool validate_cache(FILE *fp, int level, uint64_t since, // check against file modification, maybe due to log rotation fseek(fp, g_log_cache_.offset_end, SEEK_SET); - fgets(buf, sizeof(buf), fp); + char *ret = fgets(buf, sizeof(buf), fp); + if (NULL == ret) { + return false; + } + if (NULL != strptime(buf, LOG_TIME_FMT, &tm)) { ts = mktime(&tm); if (ts == g_log_cache_.time) { diff --git a/plugins/sample/plugin_sample_app.c b/plugins/sample/plugin_sample_app.c index 3b9efcf9..f940b23a 100644 --- a/plugins/sample/plugin_sample_app.c +++ b/plugins/sample/plugin_sample_app.c @@ -206,8 +206,8 @@ static void *sample_app_work_loop(void *arg) /* example of get group configs */ neu_cmd_get_grp_configs_t get_grps_cmd; neu_reqresp_grp_configs_t *resp_grps; - neu_taggrp_config_t * grp_config; - result = NULL; + neu_taggrp_config_t * grp_config = NULL; + result = NULL; get_grps_cmd.node_id = dst_node_id; sync_cmd.req_type = NEU_REQRESP_GET_GRP_CONFIGS; diff --git a/src/base/neu_tag.c b/src/base/neu_tag.c index 2ee85c55..02fa9922 100644 --- a/src/base/neu_tag.c +++ b/src/base/neu_tag.c @@ -412,7 +412,7 @@ int neu_datatag_string_etoh(char *str, int len) t[i] = str[i * 2]; } memset(str, 0, len); - strncpy(str, t, strlen(t)); + strncpy(str, t, strlen(str)); free(t); return len / 2; @@ -426,7 +426,7 @@ int neu_datatag_string_dtoh(char *str, int len) t[i] = str[i * 2 + 1]; } memset(str, 0, len); - strncpy(str, t, strlen(t)); + strncpy(str, t, strlen(str)); free(t); return len / 2; diff --git a/src/base/tag_table.c b/src/base/tag_table.c index 800a2f77..218533ac 100644 --- a/src/base/tag_table.c +++ b/src/base/tag_table.c @@ -113,7 +113,8 @@ int neu_tag_table_add(neu_tag_table_t *tbl, neu_tag_t *tag) elem = calloc(1, sizeof(struct tag_elem)); elem->tag = *tag; - strncpy(elem->name, tag->name, strlen(tag->name)); + strncpy(elem->name, tag->name, sizeof(elem->name)); + HASH_ADD_STR(tbl->tags, name, elem); update_timestamp(tbl); diff --git a/src/daemon.c b/src/daemon.c index b6e372b4..ed52b5cf 100644 --- a/src/daemon.c +++ b/src/daemon.c @@ -17,6 +17,7 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **/ +#include #include #include #include @@ -37,6 +38,7 @@ void daemonize() pid_t pid; struct rlimit rl; struct sigaction sa; + int ret = -1; // clear file creation mask umask(0); @@ -75,8 +77,10 @@ void daemonize() // attach file descriptors 0, 1 and 2 to /dev/null open("/dev/null", O_RDWR); - dup(0); - dup(0); + ret = dup(0); + assert(ret != -1); + ret = dup(0); + assert(ret != -1); } static inline int lock_file(int fd) @@ -91,8 +95,10 @@ static inline int lock_file(int fd) int neuron_already_running() { - int fd = -1; - char buf[16] = { 0 }; + int fd = -1; + char buf[16] = { 0 }; + int ret = -1; + ssize_t size = -1; fd = open(NEURON_DAEMON_LOCK_FNAME, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); @@ -111,8 +117,12 @@ int neuron_already_running() } // write process id to file - ftruncate(fd, 0); + ret = ftruncate(fd, 0); + assert(ret != -1); + snprintf(buf, sizeof(buf), "%ld", (long) getpid()); - write(fd, buf, strlen(buf) + 1); + size = write(fd, buf, strlen(buf) + 1); + assert(size != -1); + return 0; } diff --git a/src/event/event_linux.c b/src/event/event_linux.c index 9c034be8..84c49f79 100644 --- a/src/event/event_linux.c +++ b/src/event/event_linux.c @@ -16,6 +16,7 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **/ +#include #include #include #include @@ -95,7 +96,8 @@ static void *event_loop(void *arg) if ((event.events & EPOLLIN) == EPOLLIN) { uint64_t t; - read(data->fd, &t, sizeof(t)); + ssize_t size = read(data->fd, &t, sizeof(t)); + assert(size != -1); ret = data->callback.timer(data->usr_data); } diff --git a/src/parser/neu_json_fn.c b/src/parser/neu_json_fn.c index a07f0c9c..ff5154b6 100644 --- a/src/parser/neu_json_fn.c +++ b/src/parser/neu_json_fn.c @@ -188,7 +188,7 @@ neu_data_val_t *neu_parse_write_req_to_val(neu_json_write_req_t *req, neu_fixed_array_t *array = neu_fixed_array_new(1, sizeof(neu_int_val_t)); neu_int_val_t iv; - neu_data_val_t *v; + neu_data_val_t *v = NULL; switch (tag->type) { case NEU_DTYPE_UINT8: diff --git a/src/utils/neu_jwt.c b/src/utils/neu_jwt.c index 2f7604e6..9b7c61f7 100644 --- a/src/utils/neu_jwt.c +++ b/src/utils/neu_jwt.c @@ -107,7 +107,7 @@ int neu_jwt_new(char **token) } *token = str_jwt; - strncpy(token_local, *token, strlen(*token)); + strncpy(token_local, *token, sizeof(token_local) - 1); jwt_free(jwt);