diff options
| author | 2008-12-13 18:10:39 +0100 | |
|---|---|---|
| committer | 2008-12-13 18:10:39 +0100 | |
| commit | 2a514976045c878766dc6975d03b1b3eb1a86eed (patch) | |
| tree | 340134ccf72ffa2ca4a47e98a7a985f5a6acb2b2 | |
| parent | 3f0dfcf5f77659877f57c00f307ed46a96d0d0d1 (diff) | |
| download | libplist-2a514976045c878766dc6975d03b1b3eb1a86eed.tar.gz libplist-2a514976045c878766dc6975d03b1b3eb1a86eed.tar.bz2 | |
Fix node length while parsing XML.
| -rw-r--r-- | src/plist.c | 7 | ||||
| -rw-r--r-- | src/xplist.c | 6 |
2 files changed, 9 insertions, 4 deletions
diff --git a/src/plist.c b/src/plist.c index 81cdfc5..1fafd94 100644 --- a/src/plist.c +++ b/src/plist.c | |||
| @@ -75,7 +75,7 @@ plist_t plist_new_array() | |||
| 75 | plist_t plist_add_sub_element(plist_t node, plist_type type, void *value, uint64_t length) | 75 | plist_t plist_add_sub_element(plist_t node, plist_type type, void *value, uint64_t length) |
| 76 | { | 76 | { |
| 77 | //only structured types are allowed to have nulll value | 77 | //only structured types are allowed to have nulll value |
| 78 | if (!value && (type == PLIST_DICT || type == PLIST_ARRAY)) { | 78 | if (value || (!value && (type == PLIST_DICT || type == PLIST_ARRAY))) { |
| 79 | //now handle value | 79 | //now handle value |
| 80 | plist_data_t data = plist_new_plist_data(); | 80 | plist_data_t data = plist_new_plist_data(); |
| 81 | data->type = type; | 81 | data->type = type; |
| @@ -91,6 +91,7 @@ plist_t plist_add_sub_element(plist_t node, plist_type type, void *value, uint64 | |||
| 91 | case PLIST_REAL: | 91 | case PLIST_REAL: |
| 92 | data->realval = *((double *) value); | 92 | data->realval = *((double *) value); |
| 93 | break; | 93 | break; |
| 94 | case PLIST_KEY: | ||
| 94 | case PLIST_STRING: | 95 | case PLIST_STRING: |
| 95 | data->strval = strdup((char *) value); | 96 | data->strval = strdup((char *) value); |
| 96 | break; | 97 | break; |
| @@ -209,15 +210,13 @@ void plist_get_type_and_value(plist_t node, plist_type * type, void *value, uint | |||
| 209 | case PLIST_REAL: | 210 | case PLIST_REAL: |
| 210 | *((double *) value) = data->realval; | 211 | *((double *) value) = data->realval; |
| 211 | break; | 212 | break; |
| 213 | case PLIST_KEY: | ||
| 212 | case PLIST_STRING: | 214 | case PLIST_STRING: |
| 213 | *((char **) value) = strdup(data->strval); | 215 | *((char **) value) = strdup(data->strval); |
| 214 | break; | 216 | break; |
| 215 | case PLIST_UNICODE: | 217 | case PLIST_UNICODE: |
| 216 | *((wchar_t **) value) = wcsdup(data->unicodeval); | 218 | *((wchar_t **) value) = wcsdup(data->unicodeval); |
| 217 | break; | 219 | break; |
| 218 | case PLIST_KEY: | ||
| 219 | *((char **) value) = strdup(data->strval); | ||
| 220 | break; | ||
| 221 | case PLIST_DATA: | 220 | case PLIST_DATA: |
| 222 | case PLIST_ARRAY: | 221 | case PLIST_ARRAY: |
| 223 | case PLIST_DICT: | 222 | case PLIST_DICT: |
diff --git a/src/xplist.c b/src/xplist.c index 6c27375..9a5698c 100644 --- a/src/xplist.c +++ b/src/xplist.c | |||
| @@ -230,12 +230,14 @@ void xml_to_node(xmlNodePtr xml_node, plist_t * plist_node) | |||
| 230 | if (!xmlStrcmp(node->name, "true")) { | 230 | if (!xmlStrcmp(node->name, "true")) { |
| 231 | data->boolval = 1; | 231 | data->boolval = 1; |
| 232 | data->type = PLIST_BOOLEAN; | 232 | data->type = PLIST_BOOLEAN; |
| 233 | data->length = 1; | ||
| 233 | continue; | 234 | continue; |
| 234 | } | 235 | } |
| 235 | 236 | ||
| 236 | if (!xmlStrcmp(node->name, "false")) { | 237 | if (!xmlStrcmp(node->name, "false")) { |
| 237 | data->boolval = 0; | 238 | data->boolval = 0; |
| 238 | data->type = PLIST_BOOLEAN; | 239 | data->type = PLIST_BOOLEAN; |
| 240 | data->length = 1; | ||
| 239 | continue; | 241 | continue; |
| 240 | } | 242 | } |
| 241 | 243 | ||
| @@ -243,6 +245,7 @@ void xml_to_node(xmlNodePtr xml_node, plist_t * plist_node) | |||
| 243 | char *strval = xmlNodeGetContent(node); | 245 | char *strval = xmlNodeGetContent(node); |
| 244 | data->intval = g_ascii_strtoull(strval, NULL, 0); | 246 | data->intval = g_ascii_strtoull(strval, NULL, 0); |
| 245 | data->type = PLIST_UINT; | 247 | data->type = PLIST_UINT; |
| 248 | data->length = 8; | ||
| 246 | continue; | 249 | continue; |
| 247 | } | 250 | } |
| 248 | 251 | ||
| @@ -250,6 +253,7 @@ void xml_to_node(xmlNodePtr xml_node, plist_t * plist_node) | |||
| 250 | char *strval = xmlNodeGetContent(node); | 253 | char *strval = xmlNodeGetContent(node); |
| 251 | data->realval = atof(strval); | 254 | data->realval = atof(strval); |
| 252 | data->type = PLIST_REAL; | 255 | data->type = PLIST_REAL; |
| 256 | data->length = 8; | ||
| 253 | continue; | 257 | continue; |
| 254 | } | 258 | } |
| 255 | 259 | ||
| @@ -259,12 +263,14 @@ void xml_to_node(xmlNodePtr xml_node, plist_t * plist_node) | |||
| 259 | if (!xmlStrcmp(node->name, "string")) { | 263 | if (!xmlStrcmp(node->name, "string")) { |
| 260 | data->strval = strdup(xmlNodeGetContent(node)); | 264 | data->strval = strdup(xmlNodeGetContent(node)); |
| 261 | data->type = PLIST_STRING; | 265 | data->type = PLIST_STRING; |
| 266 | data->length = strlen(data->strval); | ||
| 262 | continue; | 267 | continue; |
| 263 | } | 268 | } |
| 264 | 269 | ||
| 265 | if (!xmlStrcmp(node->name, "key")) { | 270 | if (!xmlStrcmp(node->name, "key")) { |
| 266 | data->strval = strdup(xmlNodeGetContent(node)); | 271 | data->strval = strdup(xmlNodeGetContent(node)); |
| 267 | data->type = PLIST_KEY; | 272 | data->type = PLIST_KEY; |
| 273 | data->length = strlen(data->strval); | ||
| 268 | continue; | 274 | continue; |
| 269 | } | 275 | } |
| 270 | 276 | ||
