From: George Chan <[email protected]>

With some manual testing, when bootargs and/or cmdline from android boot
image is absent there will be some unhandled behavior happened.

So add null check to all these const char values.

Signed-off-by: George Chan <[email protected]>
---
 boot/image-android.c | 27 +++++++++++++++++----------
 1 file changed, 17 insertions(+), 10 deletions(-)

diff --git a/boot/image-android.c b/boot/image-android.c
index 26e2fc21929..422f254c78d 100644
--- a/boot/image-android.c
+++ b/boot/image-android.c
@@ -299,15 +299,20 @@ int android_image_modify_bootargs_env(const char *cmd, 
const char *cmd_extra) {
        char *newbootargs;
        int len = 0;
 
-       if (bootargs)
-               len += strlen(bootargs);
-
-       if (cmd && *cmd)
+       if (cmd != NULL && cmd && *cmd)
                len += strlen(cmd) + (len ? 1 : 0); /* +1 for extra space */
 
-       if (cmd_extra && *cmd_extra)
+       if (cmd_extra != NULL && cmd_extra && *cmd_extra)
                len += strlen(cmd_extra) + (len ? 1 : 0); /* +1 for extra space 
*/
 
+       if (len <=2) {
+               puts("Error: neither bootargs, ccmdline or cmdline_extra 
found!\n");
+               return 0;
+       }
+
+       if (bootargs != NULL && bootargs && *bootargs)
+               len += strlen(bootargs);
+
        newbootargs = malloc(len + 2); /* +2 for 2x '\0' */
 
        if (!newbootargs) {
@@ -317,22 +322,24 @@ int android_image_modify_bootargs_env(const char *cmd, 
const char *cmd_extra) {
 
        *newbootargs = '\0'; /* set to Null in case no components below are 
present */
 
-       if (bootargs && 
!IS_ENABLED(CONFIG_ANDROID_BOOT_IMAGE_PREPEND_ENV_BOOTARGS))
-               strcpy(newbootargs, bootargs);
+       if (bootargs != NULL && bootargs && *bootargs
+           && !IS_ENABLED(CONFIG_ANDROID_BOOT_IMAGE_PREPEND_ENV_BOOTARGS))
+               strcat(newbootargs, bootargs);
 
-       if (cmd && *cmd) {
+       if (cmd != NULL && cmd && *cmd) {
                if (*newbootargs) /* If there is something in newbootargs, a 
space is needed */
                                strcat(newbootargs, " ");
                strcat(newbootargs, cmd);
        }
 
-       if (cmd_extra && *cmd_extra) {
+       if (cmd_extra != NULL && cmd_extra && *cmd_extra) {
                if (*newbootargs) /* If there is something in newbootargs, a 
space is needed */
                                strcat(newbootargs, " ");
                strcat(newbootargs, cmd_extra);
        }
 
-       if (bootargs && 
IS_ENABLED(CONFIG_ANDROID_BOOT_IMAGE_PREPEND_ENV_BOOTARGS)) {
+       if (bootargs != NULL && bootargs && *bootargs
+           && IS_ENABLED(CONFIG_ANDROID_BOOT_IMAGE_PREPEND_ENV_BOOTARGS)) {
                if (*newbootargs) /* If there is something in newbootargs, a 
space is needed */
                                strcat(newbootargs, " ");
                strcat(newbootargs, bootargs);

-- 
2.43.0


Reply via email to