summaryrefslogtreecommitdiffstats
path: root/src/bplist.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/bplist.c')
-rw-r--r--src/bplist.c21
1 files changed, 18 insertions, 3 deletions
diff --git a/src/bplist.c b/src/bplist.c
index 640a5c0..bf8d985 100644
--- a/src/bplist.c
+++ b/src/bplist.c
@@ -27,6 +27,7 @@
27#include <stdlib.h> 27#include <stdlib.h>
28#include <stdio.h> 28#include <stdio.h>
29#include <string.h> 29#include <string.h>
30#include <assert.h>
30 31
31#include <ctype.h> 32#include <ctype.h>
32#include <inttypes.h> 33#include <inttypes.h>
@@ -304,13 +305,19 @@ static plist_t parse_string_node(const char **bnode, uint64_t size)
304static char *plist_utf16_to_utf8(uint16_t *unistr, long len, long *items_read, long *items_written) 305static char *plist_utf16_to_utf8(uint16_t *unistr, long len, long *items_read, long *items_written)
305{ 306{
306 if (!unistr || (len <= 0)) return NULL; 307 if (!unistr || (len <= 0)) return NULL;
307 char *outbuf = (char*)malloc(4*(len+1)); 308 char *outbuf;
308 int p = 0; 309 int p = 0;
309 long i = 0; 310 long i = 0;
310 311
311 uint16_t wc; 312 uint16_t wc;
312 uint32_t w; 313 uint32_t w;
313 int read_lead_surrogate = 0; 314 int read_lead_surrogate = 0;
315
316 outbuf = (char*)malloc(4*(len+1));
317 if (!outbuf) {
318 PLIST_BIN_ERR("%s: Could not allocate %" PRIu64 " bytes\n", __func__, (uint64_t)(4*(len+1)));
319 return NULL;
320 }
314 321
315 while (i < len) { 322 while (i < len) {
316 wc = unistr[i++]; 323 wc = unistr[i++];
@@ -906,6 +913,7 @@ static void serialize_plist(node_t* node, void* data)
906 } 913 }
907 //insert new ref 914 //insert new ref
908 index_val = (uint64_t *) malloc(sizeof(uint64_t)); 915 index_val = (uint64_t *) malloc(sizeof(uint64_t));
916 assert(index_val != NULL);
909 *index_val = current_index; 917 *index_val = current_index;
910 hash_table_insert(ser->ref_table, node, index_val); 918 hash_table_insert(ser->ref_table, node, index_val);
911 919
@@ -1079,7 +1087,7 @@ static int is_ascii_string(char* s, int len)
1079 1087
1080static uint16_t *plist_utf8_to_utf16(char *unistr, long size, long *items_read, long *items_written) 1088static uint16_t *plist_utf8_to_utf16(char *unistr, long size, long *items_read, long *items_written)
1081{ 1089{
1082 uint16_t *outbuf = (uint16_t*)malloc(((size*2)+1)*sizeof(uint16_t)); 1090 uint16_t *outbuf;
1083 int p = 0; 1091 int p = 0;
1084 long i = 0; 1092 long i = 0;
1085 1093
@@ -1090,6 +1098,12 @@ static uint16_t *plist_utf8_to_utf16(char *unistr, long size, long *items_read,
1090 1098
1091 uint32_t w; 1099 uint32_t w;
1092 1100
1101 outbuf = (uint16_t*)malloc(((size*2)+1)*sizeof(uint16_t));
1102 if (!outbuf) {
1103 PLIST_BIN_ERR("%s: Could not allocate %" PRIu64 " bytes\n", __func__, (uint64_t)((size*2)+1)*sizeof(uint16_t));
1104 return NULL;
1105 }
1106
1093 while (i < size) { 1107 while (i < size) {
1094 c0 = unistr[i]; 1108 c0 = unistr[i];
1095 c1 = (i < size-1) ? unistr[i+1] : 0; 1109 c1 = (i < size-1) ? unistr[i+1] : 0;
@@ -1185,6 +1199,7 @@ PLIST_API void plist_to_bin(plist_t plist, char **plist_bin, uint32_t * length)
1185 1199
1186 //write objects and table 1200 //write objects and table
1187 offsets = (uint64_t *) malloc(num_objects * sizeof(uint64_t)); 1201 offsets = (uint64_t *) malloc(num_objects * sizeof(uint64_t));
1202 assert(offsets != NULL);
1188 for (i = 0; i < num_objects; i++) 1203 for (i = 0; i < num_objects; i++)
1189 { 1204 {
1190 1205