Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2828cdc7 authored by T.J. Mercier's avatar T.J. Mercier
Browse files

Fix system_server SIGABRT due to non-UTF-8 process name in /proc/PID/stat

It is possible for process names to include non-printable characters.
When that is the case, the second column (comm) of /proc/PID/stat output
includes '�' characters which are fed directly into NewStringUTF.
NewStringUTF detects the non-UTF-8 characters and aborts. Fix this by
replacing all non-printable characters with question marks '?' before
calling NewStringUTF.

Bug: 351917521
Bug: 361017804
Test: adb wait-for-device shell 'echo -ne "\x9C\x88foo" > /proc/$$/comm; sleep 9999'
Change-Id: I040c8640e441c4545747edb5870a746892d1b09c
parent f3507faa
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@

#include <algorithm>
#include <array>
#include <cctype>
#include <cstring>
#include <limits>
#include <memory>
@@ -1004,6 +1005,8 @@ jboolean android_os_Process_parseProcLineArray(JNIEnv* env, jobject clazz,
                }
            }
            if ((mode&PROC_OUT_STRING) != 0 && di < NS) {
                std::replace_if(buffer+start, buffer+end,
                                [](unsigned char c){ return !std::isprint(c); }, '?');
                jstring str = env->NewStringUTF(buffer+start);
                env->SetObjectArrayElement(outStrings, di, str);
            }