| 6337 | } |
| 6338 | |
| 6339 | static enum XML_Error |
| 6340 | processEntity(XML_Parser parser, ENTITY *entity, XML_Bool betweenDecl, |
| 6341 | enum EntityType type) { |
| 6342 | OPEN_INTERNAL_ENTITY *openEntity, **openEntityList, **freeEntityList; |
| 6343 | switch (type) { |
| 6344 | case ENTITY_INTERNAL: |
| 6345 | parser->m_processor = internalEntityProcessor; |
| 6346 | openEntityList = &parser->m_openInternalEntities; |
| 6347 | freeEntityList = &parser->m_freeInternalEntities; |
| 6348 | break; |
| 6349 | case ENTITY_ATTRIBUTE: |
| 6350 | openEntityList = &parser->m_openAttributeEntities; |
| 6351 | freeEntityList = &parser->m_freeAttributeEntities; |
| 6352 | break; |
| 6353 | case ENTITY_VALUE: |
| 6354 | openEntityList = &parser->m_openValueEntities; |
| 6355 | freeEntityList = &parser->m_freeValueEntities; |
| 6356 | break; |
| 6357 | /* default case serves merely as a safety net in case of a |
| 6358 | * wrong entityType. Therefore we exclude the following lines |
| 6359 | * from the test coverage. |
| 6360 | * |
| 6361 | * LCOV_EXCL_START |
| 6362 | */ |
| 6363 | default: |
| 6364 | // Should not reach here |
| 6365 | assert(0); |
| 6366 | /* LCOV_EXCL_STOP */ |
| 6367 | } |
| 6368 | |
| 6369 | if (*freeEntityList) { |
| 6370 | openEntity = *freeEntityList; |
| 6371 | *freeEntityList = openEntity->next; |
| 6372 | } else { |
| 6373 | openEntity = MALLOC(parser, sizeof(OPEN_INTERNAL_ENTITY)); |
| 6374 | if (! openEntity) |
| 6375 | return XML_ERROR_NO_MEMORY; |
| 6376 | } |
| 6377 | entity->open = XML_TRUE; |
| 6378 | entity->hasMore = XML_TRUE; |
| 6379 | #if XML_GE == 1 |
| 6380 | entityTrackingOnOpen(parser, entity, __LINE__); |
| 6381 | #endif |
| 6382 | entity->processed = 0; |
| 6383 | openEntity->next = *openEntityList; |
| 6384 | *openEntityList = openEntity; |
| 6385 | openEntity->entity = entity; |
| 6386 | openEntity->type = type; |
| 6387 | openEntity->startTagLevel = parser->m_tagLevel; |
| 6388 | openEntity->betweenDecl = betweenDecl; |
| 6389 | openEntity->internalEventPtr = NULL; |
| 6390 | openEntity->internalEventEndPtr = NULL; |
| 6391 | |
| 6392 | // Only internal entities make use of the reenter flag |
| 6393 | // therefore no need to set it for other entity types |
| 6394 | if (type == ENTITY_INTERNAL) { |
| 6395 | triggerReenter(parser); |
| 6396 | } |
no test coverage detected
searching dependent graphs…