diff options
author | Jessica Wagantall <jwagantall@cyngn.com> | 2016-10-06 11:50:35 -0700 |
---|---|---|
committer | Jessica Wagantall <jwagantall@cyngn.com> | 2016-10-06 11:50:35 -0700 |
commit | 7e1cf25bc3f0b5af9106bc09989d63e5c8c46c37 (patch) | |
tree | dc65d06c50a24c187776551c53e7c5829c92b63d | |
parent | cc607cbac851847af5fdc0f67905b04906954fc4 (diff) | |
parent | e30579f3359eba93019171861f32bbf4c72313d1 (diff) | |
download | system_core-7e1cf25bc3f0b5af9106bc09989d63e5c8c46c37.zip system_core-7e1cf25bc3f0b5af9106bc09989d63e5c8c46c37.tar.gz system_core-7e1cf25bc3f0b5af9106bc09989d63e5c8c46c37.tar.bz2 |
Merge tag 'android-6.0.1_r72' into HEAD
Android 6.0.1 Release 72 (M4B30X)
# gpg: Signature made Tue 04 Oct 2016 09:47:47 AM PDT using DSA key ID 9AB10E78
# gpg: Can't check signature: public key not found
-rw-r--r-- | include/sysutils/FrameworkListener.h | 1 | ||||
-rw-r--r-- | libsysutils/src/FrameworkListener.cpp | 17 |
2 files changed, 15 insertions, 3 deletions
diff --git a/include/sysutils/FrameworkListener.h b/include/sysutils/FrameworkListener.h index 18049cd..2137069 100644 --- a/include/sysutils/FrameworkListener.h +++ b/include/sysutils/FrameworkListener.h @@ -32,6 +32,7 @@ private: int mCommandCount; bool mWithSeq; FrameworkCommandCollection *mCommands; + bool mSkipToNextNullByte; public: FrameworkListener(const char *socketName); diff --git a/libsysutils/src/FrameworkListener.cpp b/libsysutils/src/FrameworkListener.cpp index e7b3dd6..579ead9 100644 --- a/libsysutils/src/FrameworkListener.cpp +++ b/libsysutils/src/FrameworkListener.cpp @@ -49,6 +49,7 @@ void FrameworkListener::init(const char *socketName UNUSED, bool withSeq) { errorRate = 0; mCommandCount = 0; mWithSeq = withSeq; + mSkipToNextNullByte = false; } bool FrameworkListener::onDataAvailable(SocketClient *c) { @@ -59,10 +60,15 @@ bool FrameworkListener::onDataAvailable(SocketClient *c) { if (len < 0) { SLOGE("read() failed (%s)", strerror(errno)); return false; - } else if (!len) + } else if (!len) { return false; - if(buffer[len-1] != '\0') + } else if (buffer[len-1] != '\0') { SLOGW("String is not zero-terminated"); + android_errorWriteLog(0x534e4554, "29831647"); + c->sendMsg(500, "Command too large for buffer", false); + mSkipToNextNullByte = true; + return false; + } int offset = 0; int i; @@ -70,11 +76,16 @@ bool FrameworkListener::onDataAvailable(SocketClient *c) { for (i = 0; i < len; i++) { if (buffer[i] == '\0') { /* IMPORTANT: dispatchCommand() expects a zero-terminated string */ - dispatchCommand(c, buffer + offset); + if (mSkipToNextNullByte) { + mSkipToNextNullByte = false; + } else { + dispatchCommand(c, buffer + offset); + } offset = i + 1; } } + mSkipToNextNullByte = false; return true; } |