diff --git a/external/android-emugl/host/tools/emugen/ApiGen.cpp b/external/android-emugl/host/tools/emugen/ApiGen.cpp index f912cb54b1061ee5c3b75993cb7c83d9b6632934..142bf0e479386244e06474db667235e6c740c13e 100644 --- a/external/android-emugl/host/tools/emugen/ApiGen.cpp +++ b/external/android-emugl/host/tools/emugen/ApiGen.cpp @@ -21,6 +21,8 @@ #include #include +#include + /* Define this to 1 to enable support for the 'isLarge' variable flag * that instructs the encoder to send large data buffers by a direct * write through the pipe (i.e. without copying it into a temporary @@ -286,9 +288,15 @@ int ApiGen::genOpcodes(const std::string &filename) } int ApiGen::genAttributesTemplate(const std::string &filename ) { - FILE *fp = fopen(filename.c_str(), "wt"); + const char* untrustPath = filename.c_str(); + char path[PATH_MAX] = {0}; + if(realpath(untrustPath, path) == NULL) { + return -1; + } + + FILE *fp = fopen(path, "wt"); if (fp == NULL) { - perror(filename.c_str()); + perror(path); return -1; } @@ -454,9 +462,15 @@ static void writeEncodingChecksumValidatorOnReturn(const char* funcName, FILE* f int ApiGen::genEncoderImpl(const std::string &filename) { - FILE *fp = fopen(filename.c_str(), "wt"); + const char* untrustPath = filename.c_str(); + char path[PATH_MAX] = {0}; + if(realpath(untrustPath, path) == NULL) { + return -1; + } + + FILE *fp = fopen(path, "wt"); if (fp == NULL) { - perror(filename.c_str()); + perror(path); return -1; } @@ -1333,6 +1347,8 @@ int ApiGen::readAttributes(const std::string & attribFilename) break; } } + + fclose(fp); return 0; } diff --git a/external/android-emugl/shared/OpenglCodecCommon/ChecksumCalculatorThreadInfo.cpp b/external/android-emugl/shared/OpenglCodecCommon/ChecksumCalculatorThreadInfo.cpp index e92ab594d75dca60701fbbae1703b08327bb85c3..3c48f455adb6126332bf2ad503040a2f3b509081 100644 --- a/external/android-emugl/shared/OpenglCodecCommon/ChecksumCalculatorThreadInfo.cpp +++ b/external/android-emugl/shared/OpenglCodecCommon/ChecksumCalculatorThreadInfo.cpp @@ -59,35 +59,55 @@ ChecksumCalculatorThreadInfo::~ChecksumCalculatorThreadInfo() { } uint32_t ChecksumCalculatorThreadInfo::getVersion() { - return getChecksumCalculatorThreadInfo()->m_protocol.getVersion(); + uint32_t ret = 0; + if(getChecksumCalculatorThreadInfo() != nullptr) { + ret = getChecksumCalculatorThreadInfo()->m_protocol.getVersion(); + } + return ret; } bool ChecksumCalculatorThreadInfo::setVersion(uint32_t version) { - return getChecksumCalculatorThreadInfo()->m_protocol.setVersion(version); + bool ret = false; + if(getChecksumCalculatorThreadInfo() != nullptr) { + ret = getChecksumCalculatorThreadInfo()->m_protocol.setVersion(version); + } + return ret; } size_t ChecksumCalculatorThreadInfo::checksumByteSize() { - return getChecksumCalculatorThreadInfo()->m_protocol.checksumByteSize(); + size_t ret = 0; + if(getChecksumCalculatorThreadInfo() != nullptr) { + ret = getChecksumCalculatorThreadInfo()->m_protocol.checksumByteSize(); + } + return ret; } bool ChecksumCalculatorThreadInfo::writeChecksum(const void* buf, size_t bufLen, void* outputChecksum, size_t outputChecksumLen) { - ChecksumCalculator& protocol = - getChecksumCalculatorThreadInfo()->m_protocol; - protocol.addBuffer(buf, bufLen); - return protocol.writeChecksum(outputChecksum, outputChecksumLen); + bool ret = false; + if(getChecksumCalculatorThreadInfo() != nullptr) { + ChecksumCalculator& protocol = + getChecksumCalculatorThreadInfo()->m_protocol; + protocol.addBuffer(buf, bufLen); + ret = protocol.writeChecksum(outputChecksum, outputChecksumLen); + } + return ret; } bool ChecksumCalculatorThreadInfo::validate(const void* buf, size_t bufLen, void* checksum, size_t checksumLen) { - ChecksumCalculator& protocol = - getChecksumCalculatorThreadInfo()->m_protocol; - protocol.addBuffer(buf, bufLen); - return protocol.validate(checksum, checksumLen); + bool ret = false; + if(getChecksumCalculatorThreadInfo() != nullptr) { + ChecksumCalculator& protocol = + getChecksumCalculatorThreadInfo()->m_protocol; + protocol.addBuffer(buf, bufLen); + ret = protocol.validate(checksum, checksumLen); + } + return ret; } void ChecksumCalculatorThreadInfo::validOrDie(const void* buf, diff --git a/src/anbox/cmds/check_features.h b/src/anbox/cmds/check_features.h index 8402ca6b5820968827f7d478125bc4894a939f3b..d00224198fcac23c2729437a15a78fd5d7b4eb85 100644 --- a/src/anbox/cmds/check_features.h +++ b/src/anbox/cmds/check_features.h @@ -29,6 +29,7 @@ namespace cmds { class CheckFeatures : public cli::CommandWithFlagsAndAction { public: CheckFeatures(); + ~CheckFeatures(){} private: bool sanity_check_for_features(); diff --git a/src/anbox/graphics/emugl/Renderer.cpp b/src/anbox/graphics/emugl/Renderer.cpp index 5822c627baf318c43d6019625dd1b19b756534a2..96bcc159a9ab2a74efbf68dfd436ac6a95e8d8ee 100644 --- a/src/anbox/graphics/emugl/Renderer.cpp +++ b/src/anbox/graphics/emugl/Renderer.cpp @@ -460,7 +460,11 @@ HandleType Renderer::createWindowSurface(int p_config, int p_width, ret = genHandle(); m_windows[ret] = std::pair(win, 0); RenderThreadInfo *tinfo = RenderThreadInfo::get(); - tinfo->m_windowSet.insert(ret); + if (tinfo) { + tinfo->m_windowSet.insert(ret); + }else{ + ERROR("tinfo == nullptr!!!"); + } } return ret;