From 7e5af23ace032ce878035d307839451c01d815f1 Mon Sep 17 00:00:00 2001 From: yury Date: Tue, 4 Jun 2013 15:21:29 +0000 Subject: [PATCH] * Android: There are cases when libc "environ" var may be NULL. Check for such case and provide fake valid environment. Bug #24519. git-svn-id: trunk@24804 - --- rtl/android/arm/dllprt0.as | 7 +++++++ rtl/android/i386/dllprt0.as | 9 +++++++++ 2 files changed, 16 insertions(+) diff --git a/rtl/android/arm/dllprt0.as b/rtl/android/arm/dllprt0.as index bc994155f0..e6fd5208c8 100644 --- a/rtl/android/arm/dllprt0.as +++ b/rtl/android/arm/dllprt0.as @@ -31,6 +31,9 @@ FPC_SHARED_LIB_START: /* Get environment info from libc */ ldr ip,=environ ldr r0,[ip] + /* Check if environment is NULL */ + cmp r0,#0 + ldreq r0,=EmptyEnv ldr ip,=operatingsystem_parameter_envp str r0,[ip] @@ -69,6 +72,10 @@ EmptyCmdLine: .long EmptyCmdStr EmptyCmdStr: .ascii "\0" +EmptyEnv: + .long 0 + .long 0 + .long 0 /* --------------------------------------------------------- */ .section .init_array, "aw" diff --git a/rtl/android/i386/dllprt0.as b/rtl/android/i386/dllprt0.as index 605c913d99..9a5351fa6a 100644 --- a/rtl/android/i386/dllprt0.as +++ b/rtl/android/i386/dllprt0.as @@ -30,6 +30,11 @@ FPC_SHARED_LIB_START: /* Get environment info from libc */ movl environ,%eax + /* Check if environment is NULL */ + cmpl %eax,0 + jne env_ok + leal EmptyEnv,%eax +env_ok: movl %eax,operatingsystem_parameter_envp /* Register exit handler. It is called only when the main process terminates */ @@ -66,6 +71,10 @@ EmptyCmdLine: .long EmptyCmdStr EmptyCmdStr: .ascii "\0" +EmptyEnv: + .long 0 + .long 0 + .long 0 /* --------------------------------------------------------- */ .section .init_array, "aw"