Loading...
libkern/c++/OSUnserializeXML.cpp xnu-3248.50.21 xnu-1504.15.3
--- xnu/xnu-3248.50.21/libkern/c++/OSUnserializeXML.cpp
+++ xnu/xnu-1504.15.3/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);
 }