]> granicus.if.org Git - libexpat/commitdiff
Review 2017-03-13: construct test string to avoid magic numbers
authorRhodri James <rhodri@kynesim.co.uk>
Wed, 15 Mar 2017 12:54:32 +0000 (12:54 +0000)
committerSebastian Pipping <sebastian@pipping.org>
Sat, 22 Jul 2017 19:50:58 +0000 (21:50 +0200)
expat/tests/runtests.c

index 10e781cfdb4c0eab7af37be0b1e1a37747ab80fd..38a1b3cebf65d2c1180a4da753ff42960c942beb 100644 (file)
@@ -3692,6 +3692,12 @@ END_TEST
 #undef POST_ERROR_STR
 
 /* Test position information in handler */
+typedef struct ByteTestData {
+    int start_element_len;
+    int cdata_len;
+    int total_string_len;
+} ByteTestData;
+
 static void
 byte_character_handler(void *userData,
                        const XML_Char *s,
@@ -3700,17 +3706,21 @@ byte_character_handler(void *userData,
 #ifdef XML_CONTEXT_BYTES
     int offset, size;
     const char *buffer;
-    intptr_t buflen = (intptr_t)userData;
+    ByteTestData *data = (ByteTestData *)userData;
 
     buffer = XML_GetInputContext(parser, &offset, &size);
     if (buffer == NULL)
         fail("Failed to get context buffer");
+    if (offset != data->start_element_len)
+        fail("Context offset in unexpected position");
+    if (len != data->cdata_len)
+        fail("CDATA length reported incorrectly");
+    if (size != data->total_string_len)
+        fail("Context size is not full buffer");
     if (XML_GetCurrentByteIndex(parser) != offset)
         fail("Character byte index incorrect");
     if (XML_GetCurrentByteCount(parser) != len)
         fail("Character byte count incorrect");
-    if (buflen != size)
-        fail("Buffer length incorrect");
     if (s != buffer + offset)
         fail("Buffer position incorrect");
 #else
@@ -3720,21 +3730,31 @@ byte_character_handler(void *userData,
 #endif
 }
 
+#define START_ELEMENT "<e>"
+#define CDATA_TEXT    "Hello"
+#define END_ELEMENT   "</e>"
 START_TEST(test_byte_info_at_cdata)
 {
-    const char *text = "<doc>Hello</doc>";
+    const char *text = START_ELEMENT CDATA_TEXT END_ELEMENT;
     int offset, size;
+    ByteTestData data;
 
     /* Check initial context is empty */
     if (XML_GetInputContext(parser, &offset, &size) != NULL)
         fail("Unexpected context at start of parse");
 
+    data.start_element_len = strlen(START_ELEMENT);
+    data.cdata_len = strlen(CDATA_TEXT);
+    data.total_string_len = strlen(text);
     XML_SetCharacterDataHandler(parser, byte_character_handler);
-    XML_SetUserData(parser, (void *)strlen(text));
+    XML_SetUserData(parser, &data);
     if (XML_Parse(parser, text, strlen(text), XML_TRUE) != XML_STATUS_OK)
         xml_failure(parser);
 }
 END_TEST
+#undef START_ELEMENT
+#undef CDATA_TEXT
+#undef END_ELEMENT
 
 /* Test predefined entities are correctly recognised */
 START_TEST(test_predefined_entities)