Loading...
--- xnu/xnu-3248.50.21/libkern/c++/OSUnserializeXML.cpp
+++ xnu/xnu-2050.7.9/libkern/c++/OSUnserializeXML.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999-2013 Apple Inc. All rights reserved.
+ * Copyright (c) 1999-2009 Apple Inc. All rights reserved.
*
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@
*
@@ -159,8 +159,6 @@
#include <libkern/c++/OSContainers.h>
#include <libkern/c++/OSLib.h>
-#define MAX_OBJECTS 65535
-
#define YYSTYPE object_t *
#define YYPARSE_PARAM state
#define YYLEX_PARAM (parser_state_t *)state
@@ -172,7 +170,7 @@
struct object *free;
struct object *elements;
OSObject *object;
- OSSymbol *key; // for dictionary
+ OSString *key; // for dictionary
int size;
void *data; // for data
char *string; // for string & symbol
@@ -191,7 +189,6 @@
OSDictionary *tags; // used to remember "ID" tags
OSString **errorString; // parse error with line
OSObject *parsedObject; // resultant object of parsed text
- int parsedObjectCount;
} parser_state_t;
#define STATE ((parser_state_t *)state)
@@ -212,7 +209,6 @@
static object_t *buildArray(parser_state_t *state, object_t *o);
static object_t *buildSet(parser_state_t *state, object_t *o);
static object_t *buildString(parser_state_t *state, object_t *o);
-static object_t *buildSymbol(parser_state_t *state, object_t *o);
static object_t *buildData(parser_state_t *state, object_t *o);
static object_t *buildNumber(parser_state_t *state, object_t *o);
static object_t *buildBoolean(parser_state_t *state, object_t *o);
@@ -261,7 +257,7 @@
/* Line 216 of yacc.c. */
-#line 215 "OSUnserializeXML.tab.c"
+#line 211 "OSUnserializeXML.tab.c"
#ifdef short
# undef short
@@ -551,12 +547,12 @@
};
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
-static const yytype_uint16 yyrline[] =
-{
- 0, 149, 149, 152, 157, 162, 170, 178, 186, 194,
- 202, 210, 218, 237, 240, 243, 246, 247, 262, 271,
- 283, 286, 289, 292, 295, 298, 301, 304, 311, 314,
- 317, 320, 323
+static const yytype_uint8 yyrline[] =
+{
+ 0, 145, 145, 148, 153, 158, 159, 160, 161, 162,
+ 163, 164, 165, 178, 181, 184, 187, 188, 193, 202,
+ 207, 210, 213, 216, 219, 222, 225, 228, 235, 238,
+ 241, 244, 247
};
#endif
@@ -1497,14 +1493,14 @@
switch (yyn)
{
case 2:
-#line 149 "OSUnserializeXML.y"
+#line 145 "OSUnserializeXML.y"
{ yyerror("unexpected end of buffer");
YYERROR;
;}
break;
case 3:
-#line 152 "OSUnserializeXML.y"
+#line 148 "OSUnserializeXML.y"
{ STATE->parsedObject = (yyvsp[(1) - (1)])->object;
(yyvsp[(1) - (1)])->object = 0;
freeObject(STATE, (yyvsp[(1) - (1)]));
@@ -1513,98 +1509,49 @@
break;
case 4:
-#line 157 "OSUnserializeXML.y"
+#line 153 "OSUnserializeXML.y"
{ yyerror("syntax error");
YYERROR;
;}
break;
case 5:
+#line 158 "OSUnserializeXML.y"
+ { (yyval) = buildDictionary(STATE, (yyvsp[(1) - (1)])); ;}
+ break;
+
+ case 6:
+#line 159 "OSUnserializeXML.y"
+ { (yyval) = buildArray(STATE, (yyvsp[(1) - (1)])); ;}
+ break;
+
+ case 7:
+#line 160 "OSUnserializeXML.y"
+ { (yyval) = buildSet(STATE, (yyvsp[(1) - (1)])); ;}
+ break;
+
+ case 8:
+#line 161 "OSUnserializeXML.y"
+ { (yyval) = buildString(STATE, (yyvsp[(1) - (1)])); ;}
+ break;
+
+ case 9:
#line 162 "OSUnserializeXML.y"
- { (yyval) = buildDictionary(STATE, (yyvsp[(1) - (1)]));
-
- STATE->parsedObjectCount++;
- if (STATE->parsedObjectCount > MAX_OBJECTS) {
- yyerror("maximum object count");
- YYERROR;
- }
- ;}
+ { (yyval) = buildData(STATE, (yyvsp[(1) - (1)])); ;}
break;
- case 6:
-#line 170 "OSUnserializeXML.y"
- { (yyval) = buildArray(STATE, (yyvsp[(1) - (1)]));
-
- STATE->parsedObjectCount++;
- if (STATE->parsedObjectCount > MAX_OBJECTS) {
- yyerror("maximum object count");
- YYERROR;
- }
- ;}
+ case 10:
+#line 163 "OSUnserializeXML.y"
+ { (yyval) = buildNumber(STATE, (yyvsp[(1) - (1)])); ;}
break;
- case 7:
-#line 178 "OSUnserializeXML.y"
- { (yyval) = buildSet(STATE, (yyvsp[(1) - (1)]));
-
- STATE->parsedObjectCount++;
- if (STATE->parsedObjectCount > MAX_OBJECTS) {
- yyerror("maximum object count");
- YYERROR;
- }
- ;}
+ case 11:
+#line 164 "OSUnserializeXML.y"
+ { (yyval) = buildBoolean(STATE, (yyvsp[(1) - (1)])); ;}
break;
- case 8:
-#line 186 "OSUnserializeXML.y"
- { (yyval) = buildString(STATE, (yyvsp[(1) - (1)]));
-
- STATE->parsedObjectCount++;
- if (STATE->parsedObjectCount > MAX_OBJECTS) {
- yyerror("maximum object count");
- YYERROR;
- }
- ;}
- break;
-
- case 9:
-#line 194 "OSUnserializeXML.y"
- { (yyval) = buildData(STATE, (yyvsp[(1) - (1)]));
-
- STATE->parsedObjectCount++;
- if (STATE->parsedObjectCount > MAX_OBJECTS) {
- yyerror("maximum object count");
- YYERROR;
- }
- ;}
- break;
-
- case 10:
-#line 202 "OSUnserializeXML.y"
- { (yyval) = buildNumber(STATE, (yyvsp[(1) - (1)]));
-
- STATE->parsedObjectCount++;
- if (STATE->parsedObjectCount > MAX_OBJECTS) {
- yyerror("maximum object count");
- YYERROR;
- }
- ;}
- break;
-
- case 11:
-#line 210 "OSUnserializeXML.y"
- { (yyval) = buildBoolean(STATE, (yyvsp[(1) - (1)]));
-
- STATE->parsedObjectCount++;
- if (STATE->parsedObjectCount > MAX_OBJECTS) {
- yyerror("maximum object count");
- YYERROR;
- }
- ;}
- break;
-
case 12:
-#line 218 "OSUnserializeXML.y"
+#line 165 "OSUnserializeXML.y"
{ (yyval) = retrieveObject(STATE, (yyvsp[(1) - (1)])->idref);
if ((yyval)) {
(yyval)->object->retain();
@@ -1613,50 +1560,34 @@
YYERROR;
}
freeObject(STATE, (yyvsp[(1) - (1)]));
-
- STATE->parsedObjectCount++;
- if (STATE->parsedObjectCount > MAX_OBJECTS) {
- yyerror("maximum object count");
- YYERROR;
- }
;}
break;
case 13:
-#line 237 "OSUnserializeXML.y"
+#line 178 "OSUnserializeXML.y"
{ (yyval) = (yyvsp[(1) - (2)]);
(yyval)->elements = NULL;
;}
break;
case 14:
-#line 240 "OSUnserializeXML.y"
+#line 181 "OSUnserializeXML.y"
{ (yyval) = (yyvsp[(1) - (3)]);
(yyval)->elements = (yyvsp[(2) - (3)]);
;}
break;
case 17:
-#line 247 "OSUnserializeXML.y"
+#line 188 "OSUnserializeXML.y"
{ (yyval) = (yyvsp[(2) - (2)]);
(yyval)->next = (yyvsp[(1) - (2)]);
-
- object_t *o;
- o = (yyval)->next;
- while (o) {
- if (o->key == (yyval)->key) {
- yyerror("duplicate dictionary key");
- YYERROR;
- }
- o = o->next;
- }
;}
break;
case 18:
-#line 262 "OSUnserializeXML.y"
+#line 193 "OSUnserializeXML.y"
{ (yyval) = (yyvsp[(1) - (2)]);
- (yyval)->key = (OSSymbol *)(yyval)->object;
+ (yyval)->key = (OSString *)(yyval)->object;
(yyval)->object = (yyvsp[(2) - (2)])->object;
(yyval)->next = NULL;
(yyvsp[(2) - (2)])->object = 0;
@@ -1665,54 +1596,47 @@
break;
case 19:
-#line 271 "OSUnserializeXML.y"
- { (yyval) = buildSymbol(STATE, (yyvsp[(1) - (1)]));
-
-// STATE->parsedObjectCount++;
-// if (STATE->parsedObjectCount > MAX_OBJECTS) {
-// yyerror("maximum object count");
-// YYERROR;
-// }
- ;}
+#line 202 "OSUnserializeXML.y"
+ { (yyval) = buildString(STATE, (yyvsp[(1) - (1)])); ;}
break;
case 20:
-#line 283 "OSUnserializeXML.y"
+#line 207 "OSUnserializeXML.y"
{ (yyval) = (yyvsp[(1) - (2)]);
(yyval)->elements = NULL;
;}
break;
case 21:
-#line 286 "OSUnserializeXML.y"
+#line 210 "OSUnserializeXML.y"
{ (yyval) = (yyvsp[(1) - (3)]);
(yyval)->elements = (yyvsp[(2) - (3)]);
;}
break;
case 23:
-#line 292 "OSUnserializeXML.y"
+#line 216 "OSUnserializeXML.y"
{ (yyval) = (yyvsp[(1) - (2)]);
(yyval)->elements = NULL;
;}
break;
case 24:
-#line 295 "OSUnserializeXML.y"
+#line 219 "OSUnserializeXML.y"
{ (yyval) = (yyvsp[(1) - (3)]);
(yyval)->elements = (yyvsp[(2) - (3)]);
;}
break;
case 26:
-#line 301 "OSUnserializeXML.y"
+#line 225 "OSUnserializeXML.y"
{ (yyval) = (yyvsp[(1) - (1)]);
(yyval)->next = NULL;
;}
break;
case 27:
-#line 304 "OSUnserializeXML.y"
+#line 228 "OSUnserializeXML.y"
{ (yyval) = (yyvsp[(2) - (2)]);
(yyval)->next = (yyvsp[(1) - (2)]);
;}
@@ -1720,7 +1644,7 @@
/* Line 1267 of yacc.c. */
-#line 1671 "OSUnserializeXML.tab.c"
+#line 1595 "OSUnserializeXML.tab.c"
default: break;
}
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -1934,7 +1858,7 @@
}
-#line 326 "OSUnserializeXML.y"
+#line 250 "OSUnserializeXML.y"
int
@@ -2736,21 +2660,6 @@
};
object_t *
-buildSymbol(parser_state_t *state, object_t *o)
-{
- OSSymbol *symbol;
-
- symbol = (OSSymbol *)OSSymbol::withCString(o->string);
- if (o->idref >= 0) rememberObject(state, o->idref, symbol);
-
- free(o->string);
- o->string = 0;
- o->object = symbol;
-
- return o;
-};
-
-object_t *
buildData(parser_state_t *state, object_t *o)
{
OSData *data;
@@ -2791,10 +2700,9 @@
OSUnserializeXML(const char *buffer, OSString **errorString)
{
OSObject *object;
-
- if (!buffer) return 0;
parser_state_t *state = (parser_state_t *)malloc(sizeof(parser_state_t));
- if (!state) return 0;
+
+ if ((!state) || (!buffer)) return 0;
// just in case
if (errorString) *errorString = NULL;
@@ -2807,7 +2715,6 @@
state->tags = OSDictionary::withCapacity(128);
state->errorString = errorString;
state->parsedObject = 0;
- state->parsedObjectCount = 0;
(void)yyparse((void *)state);
@@ -2818,22 +2725,6 @@
free(state);
return object;
-}
-
-#include <libkern/OSSerializeBinary.h>
-
-OSObject*
-OSUnserializeXML(const char *buffer, size_t bufferSize, OSString **errorString)
-{
- if (!buffer) return (0);
- if (bufferSize < sizeof(kOSSerializeBinarySignature)) return (0);
-
- if (!strcmp(kOSSerializeBinarySignature, buffer)) return OSUnserializeBinary(buffer, bufferSize, errorString);
-
- // XML must be null terminated
- if (buffer[bufferSize - 1]) return 0;
-
- return OSUnserializeXML(buffer, errorString);
}