Merge "Fix command injection on screencap" into rvc-dev
This commit is contained in:
@@ -24,6 +24,7 @@
|
|||||||
#include <linux/fb.h>
|
#include <linux/fb.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
|
#include <sys/wait.h>
|
||||||
|
|
||||||
#include <binder/ProcessState.h>
|
#include <binder/ProcessState.h>
|
||||||
|
|
||||||
@@ -99,11 +100,38 @@ static uint32_t dataSpaceToInt(ui::Dataspace d)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static status_t notifyMediaScanner(const char* fileName) {
|
static status_t notifyMediaScanner(const char* fileName) {
|
||||||
String8 cmd("am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d file://");
|
std::string filePath("file://");
|
||||||
cmd.append(fileName);
|
filePath.append(fileName);
|
||||||
cmd.append(" > /dev/null");
|
char *cmd[] = {
|
||||||
int result = system(cmd.string());
|
(char*) "am",
|
||||||
if (result < 0) {
|
(char*) "broadcast",
|
||||||
|
(char*) "am",
|
||||||
|
(char*) "android.intent.action.MEDIA_SCANNER_SCAN_FILE",
|
||||||
|
(char*) "-d",
|
||||||
|
&filePath[0],
|
||||||
|
nullptr
|
||||||
|
};
|
||||||
|
|
||||||
|
int status;
|
||||||
|
int pid = fork();
|
||||||
|
if (pid < 0){
|
||||||
|
fprintf(stderr, "Unable to fork in order to send intent for media scanner.\n");
|
||||||
|
return UNKNOWN_ERROR;
|
||||||
|
}
|
||||||
|
if (pid == 0){
|
||||||
|
int fd = open("/dev/null", O_WRONLY);
|
||||||
|
if (fd < 0){
|
||||||
|
fprintf(stderr, "Unable to open /dev/null for media scanner stdout redirection.\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
dup2(fd, 1);
|
||||||
|
int result = execvp(cmd[0], cmd);
|
||||||
|
close(fd);
|
||||||
|
exit(result);
|
||||||
|
}
|
||||||
|
wait(&status);
|
||||||
|
|
||||||
|
if (status < 0) {
|
||||||
fprintf(stderr, "Unable to broadcast intent for media scanner.\n");
|
fprintf(stderr, "Unable to broadcast intent for media scanner.\n");
|
||||||
return UNKNOWN_ERROR;
|
return UNKNOWN_ERROR;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user