tinycompress: Fix error handling in plugins. am: fc8976c893 am: 961c9afd6b

Original change: https://android-review.googlesource.com/c/platform/external/tinycompress/+/1551055

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I19206f006ba5de110af0edf66b501b8bb15867e8
diff --git a/compress_plugin.c b/compress_plugin.c
index d445ae9..24d72ee 100644
--- a/compress_plugin.c
+++ b/compress_plugin.c
@@ -1,6 +1,6 @@
 /* compress_plugin.c
 **
-** Copyright (c) 2019, The Linux Foundation. All rights reserved.
+** Copyright (c) 2019-2020, The Linux Foundation. All rights reserved.
 **
 ** Redistribution and use in source and binary forms, with or without
 ** modification, are permitted provided that the following conditions are
@@ -333,10 +333,9 @@
 			unsigned int flags, void **data, void *node)
 {
 	struct compress_plug_data *plug_data;
-	const char *err = NULL;
 	void *dl_hdl;
 	int rc = 0;
-	char *so_name, *open_fn, token[80], *name;
+	char *so_name, *open_fn, token[80], *name, *token_saveptr;
 
 	plug_data = calloc(1, sizeof(*plug_data));
 	if (!plug_data) {
@@ -361,22 +360,25 @@
 	}
 
 	sscanf(so_name, "lib%s", token);
-	name = strtok(token, ".");
+	token_saveptr = token;
+	name = strtok_r(token, ".", &token_saveptr);
+	if (!name) {
+		fprintf(stderr, "%s: invalid library name\n", __func__);
+		goto err_open_fn;
+	}
 	open_fn = calloc(1, strlen(name) + strlen("_open") + 1);
 	if (!open_fn) {
 		rc = -ENOMEM;
 		goto err_open_fn;
 	}
 
-	strncpy(open_fn, name, strlen(name) + 1);
-	strcat(open_fn, "_open");
+	strlcpy(open_fn, name, strlen(name) + 1);
+	strlcat(open_fn, "_open", strlen(name) + strlen("_open") + 1);
 
 	plug_data->plugin_open_fn = dlsym(dl_hdl, open_fn);
-	err = dlerror();
-
-	if (err) {
+	if (!plug_data->plugin_open_fn) {
 		fprintf(stderr, "%s: dlsym to open fn failed, err = '%s'\n",
-				__func__, err);
+				__func__, dlerror());
 		goto err_dlsym;
 	}