using ::android::base::Dirname; using ::android::base::ParseInt; using ::android::base::ReadFileToString; using ::android::base::Result; using ::android::base::SetProperty; using ::android::base::Trim;
Result<void> ValidateAbsoluteNormalPath(const std::string& path_str) { if (path_str.empty()) { return Errorf("Path is empty");
} if (path_str.find('\0') != std::string::npos) { return Errorf("Path '{}' has invalid character '\\0'", path_str);
} // Java entering native through JNI requires converting the jstring type to string type. // The '\u0000' in Java will be encoded as' 0xC0 0x80 ', and this situation needs to be // intercepted
constexpr constchar* kOverlongNull = "\xC0\x80"; if (path_str.find(kOverlongNull) != std::string::npos) { return Errorf("Path '{}' has overlong UTF-8 encoded NUL (\\xC0\\x80)", path_str);
}
std::filesystem::path path(path_str); if (!path.is_absolute()) { return Errorf("Path '{}' is not an absolute path", path_str);
} if (path.lexically_normal() != path_str) { return Errorf("Path '{}' is not in normal form", path_str);
} return {};
}
Result<void> ValidatePathElementSubstring(const std::string& path_element_substring, const std::string& name) { if (path_element_substring.empty()) { return Errorf("{} is empty", name);
} if (path_element_substring.find('/') != std::string::npos) { return Errorf("{} '{}' has invalid character '/'", name, path_element_substring);
} if (path_element_substring.find('\0') != std::string::npos) { return Errorf("{} '{}' has invalid character '\\0'", name, path_element_substring);
} return {};
}
extern"C" JNIEXPORT int JNICALL Java_com_android_server_art_ArtJni_setPipeSizeNative(JNIEnv* env,
jobject,
jobject j_fd,
jint size) { int fd = jniGetFDFromFileDescriptor(env, j_fd);
std::string max_size_str; if (!ReadFileToString("/proc/sys/fs/pipe-max-size", &max_size_str)) {
jniThrowIOException(env, errno); return0;
}
int max_size; if (!ParseInt(Trim(max_size_str), &max_size)) {
jniThrowException(env, "java/io/IOException", "Failed to parse /proc/sys/fs/pipe-max-size"); return0;
}
int ret = fcntl(fd, F_SETPIPE_SZ, std::min(size, max_size)); if (ret < 0) {
jniThrowErrnoException(env, "fcntl", errno); return0;
}
return ret;
}
} // namespace service
} // namespace art
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-06-29)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.