Replace sprintf() with asprintf()
Pre-computing the maximum target size is too fragile, the micro-optimization does not worth it. PR #4373 <https://github.com/Genymobile/scrcpy/pull/4373> Co-authored-by: Romain Vimont <rom@rom1v.com> Signed-off-by: Romain Vimont <rom@rom1v.com>
This commit is contained in:
committed by
Romain Vimont
parent
bc8913e12b
commit
0ab96c4ca6
@@ -216,30 +216,44 @@ sc_adb_kill_server(struct sc_intr *intr, unsigned flags) {
|
|||||||
bool
|
bool
|
||||||
sc_adb_forward(struct sc_intr *intr, const char *serial, uint16_t local_port,
|
sc_adb_forward(struct sc_intr *intr, const char *serial, uint16_t local_port,
|
||||||
const char *device_socket_name, unsigned flags) {
|
const char *device_socket_name, unsigned flags) {
|
||||||
char local[4 + 5 + 1]; // tcp:PORT
|
char *local;
|
||||||
char remote[108 + 14 + 1]; // localabstract:NAME
|
if (asprintf(&local, "tcp:%" PRIu16, local_port) == -1) {
|
||||||
sprintf(local, "tcp:%" PRIu16, local_port);
|
LOG_OOM();
|
||||||
snprintf(remote, sizeof(remote), "localabstract:%s", device_socket_name);
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *remote;
|
||||||
|
if (asprintf(&remote, "localabstract:%s", device_socket_name) == -1) {
|
||||||
|
LOG_OOM();
|
||||||
|
free(local);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
assert(serial);
|
assert(serial);
|
||||||
const char *const argv[] =
|
const char *const argv[] =
|
||||||
SC_ADB_COMMAND("-s", serial, "forward", local, remote);
|
SC_ADB_COMMAND("-s", serial, "forward", local, remote);
|
||||||
|
|
||||||
sc_pid pid = sc_adb_execute(argv, flags);
|
sc_pid pid = sc_adb_execute(argv, flags);
|
||||||
|
free(remote);
|
||||||
|
free(local);
|
||||||
return process_check_success_intr(intr, pid, "adb forward", flags);
|
return process_check_success_intr(intr, pid, "adb forward", flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
sc_adb_forward_remove(struct sc_intr *intr, const char *serial,
|
sc_adb_forward_remove(struct sc_intr *intr, const char *serial,
|
||||||
uint16_t local_port, unsigned flags) {
|
uint16_t local_port, unsigned flags) {
|
||||||
char local[4 + 5 + 1]; // tcp:PORT
|
char *local;
|
||||||
sprintf(local, "tcp:%" PRIu16, local_port);
|
if (asprintf(&local, "tcp:%" PRIu16, local_port) == -1) {
|
||||||
|
LOG_OOM();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
assert(serial);
|
assert(serial);
|
||||||
const char *const argv[] =
|
const char *const argv[] =
|
||||||
SC_ADB_COMMAND("-s", serial, "forward", "--remove", local);
|
SC_ADB_COMMAND("-s", serial, "forward", "--remove", local);
|
||||||
|
|
||||||
sc_pid pid = sc_adb_execute(argv, flags);
|
sc_pid pid = sc_adb_execute(argv, flags);
|
||||||
|
free(local);
|
||||||
return process_check_success_intr(intr, pid, "adb forward --remove", flags);
|
return process_check_success_intr(intr, pid, "adb forward --remove", flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -247,29 +261,45 @@ bool
|
|||||||
sc_adb_reverse(struct sc_intr *intr, const char *serial,
|
sc_adb_reverse(struct sc_intr *intr, const char *serial,
|
||||||
const char *device_socket_name, uint16_t local_port,
|
const char *device_socket_name, uint16_t local_port,
|
||||||
unsigned flags) {
|
unsigned flags) {
|
||||||
char local[4 + 5 + 1]; // tcp:PORT
|
|
||||||
char remote[108 + 14 + 1]; // localabstract:NAME
|
|
||||||
sprintf(local, "tcp:%" PRIu16, local_port);
|
|
||||||
snprintf(remote, sizeof(remote), "localabstract:%s", device_socket_name);
|
|
||||||
assert(serial);
|
assert(serial);
|
||||||
|
|
||||||
|
char *local;
|
||||||
|
if (asprintf(&local, "tcp:%" PRIu16, local_port) == -1) {
|
||||||
|
LOG_OOM();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *remote;
|
||||||
|
if (asprintf(&remote, "localabstract:%s", device_socket_name) == -1) {
|
||||||
|
LOG_OOM();
|
||||||
|
free(local);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
const char *const argv[] =
|
const char *const argv[] =
|
||||||
SC_ADB_COMMAND("-s", serial, "reverse", remote, local);
|
SC_ADB_COMMAND("-s", serial, "reverse", remote, local);
|
||||||
|
|
||||||
sc_pid pid = sc_adb_execute(argv, flags);
|
sc_pid pid = sc_adb_execute(argv, flags);
|
||||||
|
free(remote);
|
||||||
|
free(local);
|
||||||
return process_check_success_intr(intr, pid, "adb reverse", flags);
|
return process_check_success_intr(intr, pid, "adb reverse", flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
sc_adb_reverse_remove(struct sc_intr *intr, const char *serial,
|
sc_adb_reverse_remove(struct sc_intr *intr, const char *serial,
|
||||||
const char *device_socket_name, unsigned flags) {
|
const char *device_socket_name, unsigned flags) {
|
||||||
char remote[108 + 14 + 1]; // localabstract:NAME
|
char *remote;
|
||||||
snprintf(remote, sizeof(remote), "localabstract:%s", device_socket_name);
|
if (asprintf(&remote, "localabstract:%s", device_socket_name) == -1) {
|
||||||
|
LOG_OOM();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
assert(serial);
|
assert(serial);
|
||||||
const char *const argv[] =
|
const char *const argv[] =
|
||||||
SC_ADB_COMMAND("-s", serial, "reverse", "--remove", remote);
|
SC_ADB_COMMAND("-s", serial, "reverse", "--remove", remote);
|
||||||
|
|
||||||
sc_pid pid = sc_adb_execute(argv, flags);
|
sc_pid pid = sc_adb_execute(argv, flags);
|
||||||
|
free(remote);
|
||||||
return process_check_success_intr(intr, pid, "adb reverse --remove", flags);
|
return process_check_success_intr(intr, pid, "adb reverse --remove", flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -332,14 +362,18 @@ sc_adb_install(struct sc_intr *intr, const char *serial, const char *local,
|
|||||||
bool
|
bool
|
||||||
sc_adb_tcpip(struct sc_intr *intr, const char *serial, uint16_t port,
|
sc_adb_tcpip(struct sc_intr *intr, const char *serial, uint16_t port,
|
||||||
unsigned flags) {
|
unsigned flags) {
|
||||||
char port_string[5 + 1];
|
char *port_string;
|
||||||
sprintf(port_string, "%" PRIu16, port);
|
if (asprintf(&port_string, "%" PRIu16, port) == -1) {
|
||||||
|
LOG_OOM();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
assert(serial);
|
assert(serial);
|
||||||
const char *const argv[] =
|
const char *const argv[] =
|
||||||
SC_ADB_COMMAND("-s", serial, "tcpip", port_string);
|
SC_ADB_COMMAND("-s", serial, "tcpip", port_string);
|
||||||
|
|
||||||
sc_pid pid = sc_adb_execute(argv, flags);
|
sc_pid pid = sc_adb_execute(argv, flags);
|
||||||
|
free(port_string);
|
||||||
return process_check_success_intr(intr, pid, "adb tcpip", flags);
|
return process_check_success_intr(intr, pid, "adb tcpip", flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user