summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/conf.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/conf.c b/src/conf.c
index 5d2411d..2f0968d 100644
--- a/src/conf.c
+++ b/src/conf.c
@@ -34,6 +34,7 @@
34#include <libgen.h> 34#include <libgen.h>
35#include <sys/stat.h> 35#include <sys/stat.h>
36#include <errno.h> 36#include <errno.h>
37#include <ctype.h>
37 38
38#include <libimobiledevice-glue/utils.h> 39#include <libimobiledevice-glue/utils.h>
39#include <plist/plist.h> 40#include <plist/plist.h>
@@ -425,13 +426,19 @@ int config_set_device_record(const char *udid, char* record_data, uint64_t recor
425 if (!udid || !record_data || record_size < 8) 426 if (!udid || !record_data || record_size < 8)
426 return -EINVAL; 427 return -EINVAL;
427 428
428 plist_t plist = NULL; 429 /* verify udid input */
429 if (memcmp(record_data, "bplist00", 8) == 0) { 430 const char* u = udid;
430 plist_from_bin(record_data, record_size, &plist); 431 while (*u != '\0') {
431 } else { 432 if (!isalnum(*u) && (*u != '-')) {
432 plist_from_xml(record_data, record_size, &plist); 433 usbmuxd_log(LL_ERROR, "ERROR: %s: udid contains invalid character.\n", __func__);
434 return -EINVAL;
435 }
436 u++;
433 } 437 }
434 438
439 plist_t plist = NULL;
440 plist_from_memory(record_data, record_size, &plist, NULL);
441
435 if (!plist || plist_get_node_type(plist) != PLIST_DICT) { 442 if (!plist || plist_get_node_type(plist) != PLIST_DICT) {
436 if (plist) 443 if (plist)
437 plist_free(plist); 444 plist_free(plist);