Compare commits

..

2 Commits

Author SHA1 Message Date
Avinash Sonawane
76a99a7fcd Replace raw number by its name
PR #4373 <https://github.com/Genymobile/scrcpy/pull/4373>

Signed-off-by: Romain Vimont <rom@rom1v.com>
2023-10-25 16:13:36 +02:00
Avinash Sonawane
68b55ef2fe Replace sprintf() with safer snprintf()
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>
2023-10-25 16:13:34 +02:00
3 changed files with 44 additions and 48 deletions

View File

@@ -216,16 +216,16 @@ 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; char local[4 + 5 + 1]; // tcp:PORT
if (asprintf(&local, "tcp:%" PRIu16, local_port) == -1) { char remote[108 + 14 + 1]; // localabstract:NAME
LOG_OOM();
return false;
}
char *remote; int r = snprintf(local, sizeof(local), "tcp:%" PRIu16, local_port);
if (asprintf(&remote, "localabstract:%s", device_socket_name) == -1) { assert(r >= 0 && (size_t) r < sizeof(local));
LOG_OOM();
free(local); r = snprintf(remote, sizeof(remote), "localabstract:%s",
device_socket_name);
if (r < 0 || (size_t) r >= sizeof(remote)) {
LOGE("Could not write socket name");
return false; return false;
} }
@@ -234,26 +234,22 @@ sc_adb_forward(struct sc_intr *intr, const char *serial, uint16_t local_port,
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; char local[4 + 5 + 1]; // tcp:PORT
if (asprintf(&local, "tcp:%" PRIu16, local_port) == -1) { int r = snprintf(local, sizeof(local), "tcp:%" PRIu16, local_port);
LOG_OOM(); assert(r >= 0 && (size_t) r < sizeof(local));
return false; (void) r;
}
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);
} }
@@ -261,36 +257,34 @@ 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
int r = snprintf(local, sizeof(local), "tcp:%" PRIu16, local_port);
assert(r >= 0 && (size_t) r < sizeof(local));
r = snprintf(remote, sizeof(remote), "localabstract:%s",
device_socket_name);
if (r < 0 || (size_t) r >= sizeof(remote)) {
LOGE("Could not write socket name");
return false;
}
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; char remote[108 + 14 + 1]; // localabstract:NAME
if (asprintf(&remote, "localabstract:%s", device_socket_name) == -1) { int r = snprintf(remote, sizeof(remote), "localabstract:%s",
LOG_OOM(); device_socket_name);
if (r < 0 || (size_t) r >= sizeof(remote)) {
LOGE("Device socket name too long");
return false; return false;
} }
@@ -299,7 +293,6 @@ sc_adb_reverse_remove(struct sc_intr *intr, const char *serial,
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);
} }
@@ -362,18 +355,16 @@ 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; char port_string[5 + 1];
if (asprintf(&port_string, "%" PRIu16, port) == -1) { int r = snprintf(port_string, sizeof(port_string), "%" PRIu16, port);
LOG_OOM(); assert(r >= 0 && (size_t) r < sizeof(port_string));
return false; (void) r;
}
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);
} }

View File

@@ -27,7 +27,8 @@
// keyboard support, though OS could support more keys via modifying the report // keyboard support, though OS could support more keys via modifying the report
// desc. 6 should be enough for scrcpy. // desc. 6 should be enough for scrcpy.
#define HID_KEYBOARD_MAX_KEYS 6 #define HID_KEYBOARD_MAX_KEYS 6
#define HID_KEYBOARD_EVENT_SIZE (HID_KEYBOARD_INDEX_KEYS + HID_KEYBOARD_MAX_KEYS) #define HID_KEYBOARD_EVENT_SIZE \
(HID_KEYBOARD_INDEX_KEYS + HID_KEYBOARD_MAX_KEYS)
#define HID_RESERVED 0x00 #define HID_RESERVED 0x00
#define HID_ERROR_ROLL_OVER 0x01 #define HID_ERROR_ROLL_OVER 0x01

View File

@@ -269,21 +269,25 @@ static void test_parse_integer_with_suffix(void) {
char buf[32]; char buf[32];
sprintf(buf, "%ldk", LONG_MAX / 2000); int r = snprintf(buf, sizeof(buf), "%ldk", LONG_MAX / 2000);
assert(r >= 0 && (size_t) r < sizeof(buf));
ok = sc_str_parse_integer_with_suffix(buf, &value); ok = sc_str_parse_integer_with_suffix(buf, &value);
assert(ok); assert(ok);
assert(value == LONG_MAX / 2000 * 1000); assert(value == LONG_MAX / 2000 * 1000);
sprintf(buf, "%ldm", LONG_MAX / 2000); r = snprintf(buf, sizeof(buf), "%ldm", LONG_MAX / 2000);
assert(r >= 0 && (size_t) r < sizeof(buf));
ok = sc_str_parse_integer_with_suffix(buf, &value); ok = sc_str_parse_integer_with_suffix(buf, &value);
assert(!ok); assert(!ok);
sprintf(buf, "%ldk", LONG_MIN / 2000); r = snprintf(buf, sizeof(buf), "%ldk", LONG_MIN / 2000);
assert(r >= 0 && (size_t) r < sizeof(buf));
ok = sc_str_parse_integer_with_suffix(buf, &value); ok = sc_str_parse_integer_with_suffix(buf, &value);
assert(ok); assert(ok);
assert(value == LONG_MIN / 2000 * 1000); assert(value == LONG_MIN / 2000 * 1000);
sprintf(buf, "%ldm", LONG_MIN / 2000); r = snprintf(buf, sizeof(buf), "%ldm", LONG_MIN / 2000);
assert(r >= 0 && (size_t) r < sizeof(buf));
ok = sc_str_parse_integer_with_suffix(buf, &value); ok = sc_str_parse_integer_with_suffix(buf, &value);
assert(!ok); assert(!ok);
} }