You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@xerces.apache.org by "Boris Kolpackov (JIRA)" <xe...@xml.apache.org> on 2008/10/23 14:28:44 UTC
[jira] Commented: (XERCESC-1834) Memory leak using SAX2 with XML
Schema validation
[ https://issues.apache.org/jira/browse/XERCESC-1834?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12642148#action_12642148 ]
Boris Kolpackov commented on XERCESC-1834:
------------------------------------------
I confirmed the leaks with:
SAX2Count -v=always -f test.xml
If I remove -f (full schema checking), I only get 1 leak instead of 4. The problem seems to be with maxOccurs="255". If I change it to unbounded, the leaks go away.
> Memory leak using SAX2 with XML Schema validation
> -------------------------------------------------
>
> Key: XERCESC-1834
> URL: https://issues.apache.org/jira/browse/XERCESC-1834
> Project: Xerces-C++
> Issue Type: Bug
> Components: Validating Parser (XML Schema)
> Affects Versions: 3.0.0
> Environment: MS Windows XP SP3, VS 2005
> Reporter: David Kelvin
> Priority: Minor
> Attachments: test.xml, test.xsd
>
>
> XML schema with certain elements included causes 4 memory leaks per invocation (every XML file import invokes parsing twice - once to ensure it validates completely, second to import if validation successful).
> SAX2 interface being used with the following features & properties:
> // Set non-default features
> pSAX2Parser->setFeature(XMLUni::fgSAX2CoreNameSpacePrefixes, true);
> pSAX2Parser->setFeature(XMLUni::fgSAX2CoreValidation, true);
> pSAX2Parser->setFeature(XMLUni::fgXercesDynamic, false);
> pSAX2Parser->setFeature(XMLUni::fgXercesSchemaFullChecking, true);
> pSAX2Parser->setFeature(XMLUni::fgXercesLoadExternalDTD, false);
> pSAX2Parser->setFeature(XMLUni::fgXercesSkipDTDValidation, true);
>
> // Set properties
> pSAX2Parser->setProperty(XMLUni::fgXercesSchemaExternalNoNameSpaceSchemaLocation,
> (void *)strXSDFileName.c_str());
> pSAX2Parser->setProperty(XMLUni::fgXercesScannerName,
> (void *)XMLUni::fgSGXMLScanner);
> pSAX2Parser->setInputBufferSize(4096);
> In the following XML Schema, the problem exists if the element "history_entries" (lines 202-216 inclusive) is present in the schema. A sample XML file is also present (couldn't find a way to attach files).
> From debug output:
> {21570} normal block at 0x0137ED00, 22 bytes long.
> Data: < > 12 00 00 00 00 00 CD CD CD CD CD CD CD CD CD CD
> {21569} normal block at 0x01382390, 48 bytes long.
> Data: <, h i s t o r > 2C 00 00 00 68 00 69 00 73 00 74 00 6F 00 72 00
> {21568} normal block at 0x013800D0, 48 bytes long.
> Data: <, z > 2C 00 00 00 E0 D8 12 00 CD CD CD CD 14 07 7A 00
> {21567} normal block at 0x0137FEB0, 52 bytes long.
> Data: <0 H-z > 30 00 00 00 E0 D8 12 00 CD CD CD CD 48 2D 7A 00
> {13007} normal block at 0x013A0950, 22 bytes long.
> Data: < > 12 00 00 00 00 00 CD CD CD CD CD CD CD CD CD CD
> {13006} normal block at 0x0139FF50, 48 bytes long.
> Data: <, h i s t o r > 2C 00 00 00 68 00 69 00 73 00 74 00 6F 00 72 00
> {13005} normal block at 0x0139F8D0, 48 bytes long.
> Data: <, z > 2C 00 00 00 E0 D8 12 00 CD CD CD CD 14 07 7A 00
> {13004} normal block at 0x013B8718, 52 bytes long.
> Data: <0 H-z > 30 00 00 00 E0 D8 12 00 CD CD CD CD 48 2D 7A 00
> XML Schema:
> ---START---
> <?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
> <xs:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="3.15">
> <xs:annotation>
> <xs:documentation xml:lang="en">
> This XML Schema corresponds to V3.15 of Password Safe.
> As each new version is a 'superset' of previous versions, the current version of Password Safe
> will be able to import XML files created by all prior versions.
> However, in V3.13 element 'ltime' has been replaced by 'xtime' for the Password Expiry Time.
> Either is currently allowed, although future updates may remove the 'ltime' choice and therefore
> errors will be issued during XML Import if the 'ltime' element is present in the XML file.
> </xs:documentation>
> </xs:annotation>
> <!-- Special types to allow easier processing of Password Safe data -->
> <xs:simpleType name="characterType">
> <xs:restriction base="xs:string">
> <xs:length value="1" />
> </xs:restriction>
> </xs:simpleType>
> <xs:simpleType name="uuidType">
> <xs:restriction base="xs:hexBinary">
> <xs:length value="16" fixed="true" />
> </xs:restriction>
> </xs:simpleType>
> <xs:simpleType name="stringType">
> <xs:restriction base="xs:string">
> <xs:whiteSpace value="preserve" />
> </xs:restriction>
> </xs:simpleType>
> <xs:complexType name="datetimestampType">
> <xs:sequence>
> <xs:element name="date" type="xs:date" minOccurs="1" maxOccurs="1"/>
> <xs:element name="time" type="xs:time" minOccurs="1" maxOccurs="1"/>
> </xs:sequence>
> </xs:complexType>
> <xs:simpleType name="expirydaysType">
> <xs:restriction base="xs:integer">
> <xs:minInclusive value="1" />
> <xs:maxInclusive value="3650" />
> </xs:restriction>
> </xs:simpleType>
> <xs:simpleType name="fieldType">
> <xs:restriction base="xs:integer">
> <xs:minInclusive value="18" />
> <xs:maxExclusive value="255" />
> </xs:restriction>
> </xs:simpleType>
> <xs:simpleType name="numhashType">
> <xs:restriction base="xs:integer">
> <xs:minInclusive value="2048" />
> </xs:restriction>
> </xs:simpleType>
> <xs:simpleType name="fileuuidType">
> <xs:restriction base="xs:string">
> <xs:pattern value="[0-9a-zA-Z]{8}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{4}-[0-9a-zAZ]{12}" />
> </xs:restriction>
> </xs:simpleType>
> <xs:simpleType name="boolType">
> <xs:restriction base="xs:integer">
> <xs:minInclusive value="0" />
> <xs:maxInclusive value="1" />
> </xs:restriction>
> </xs:simpleType>
> <xs:simpleType name="passwordlengthType">
> <xs:restriction base="xs:integer">
> <xs:minInclusive value="4" />
> <xs:maxInclusive value="1024" />
> </xs:restriction>
> </xs:simpleType>
> <xs:simpleType name="passwordlengthType2">
> <xs:restriction base="xs:integer">
> <xs:minInclusive value="0" />
> <xs:maxInclusive value="1024" />
> </xs:restriction>
> </xs:simpleType>
> <xs:simpleType name="timeoutType">
> <xs:restriction base="xs:integer">
> <xs:minInclusive value="1" />
> <xs:maxInclusive value="120" />
> </xs:restriction>
> </xs:simpleType>
> <xs:simpleType name="displaystatusType">
> <xs:restriction base="xs:string">
> <xs:enumeration value="AllCollapsed" />
> <xs:enumeration value="AllExpanded" />
> <xs:enumeration value="AsPerLastSave" />
> </xs:restriction>
> </xs:simpleType>
> <xs:simpleType name="pwhistoryType">
> <xs:restriction base="xs:integer">
> <xs:minInclusive value="0" />
> <xs:maxInclusive value="255" />
> </xs:restriction>
> </xs:simpleType>
> <!-- End of Special types -->
> <!-- Start of proper Password Safe validation XSD -->
> <xs:element name="passwordsafe">
> <!-- Start Database -->
> <xs:complexType>
> <xs:sequence>
> <!-- Start Database Preferences -->
> <xs:element name="NumberHashIterations" type="numhashType" minOccurs="0" maxOccurs="1" />
> <xs:element name="Preferences" minOccurs="0" maxOccurs="1">
> <xs:complexType>
> <xs:all>
> <!-- Boolean Preferences -->
> <xs:element name="DisplayExpandedAddEditDlg" type="boolType" minOccurs="0" maxOccurs="1" />
> <xs:element name="MaintainDateTimeStamps" type="boolType" minOccurs="0" maxOccurs="1" />
> <xs:element name="PWUseDigits" type="boolType" minOccurs="0" maxOccurs="1" />
> <xs:element name="PWUseEasyVision" type="boolType" minOccurs="0" maxOccurs="1" />
> <xs:element name="PWUseHexDigits" type="boolType" minOccurs="0" maxOccurs="1" />
> <xs:element name="PWUseLowercase" type="boolType" minOccurs="0" maxOccurs="1" />
> <xs:element name="PWUseSymbols" type="boolType" minOccurs="0" maxOccurs="1" />
> <xs:element name="PWUseUppercase" type="boolType" minOccurs="0" maxOccurs="1" />
> <xs:element name="PWMakePronounceable" type="boolType" minOccurs="0" maxOccurs="1" />
> <xs:element name="SaveImmediately" type="boolType" minOccurs="0" maxOccurs="1" />
> <xs:element name="SavePasswordHistory" type="boolType" minOccurs="0" maxOccurs="1" />
> <xs:element name="ShowNotesDefault" type="boolType" minOccurs="0" maxOccurs="1" />
> <xs:element name="ShowPWDefault" type="boolType" minOccurs="0" maxOccurs="1" />
> <xs:element name="ShowPasswordInTree" type="boolType" minOccurs="0" maxOccurs="1" />
> <xs:element name="ShowUsernameInTree" type="boolType" minOccurs="0" maxOccurs="1" />
> <xs:element name="SortAscending" type="boolType" minOccurs="0" maxOccurs="1" />
> <xs:element name="UseDefaultUser" type="boolType" minOccurs="0" maxOccurs="1" />
>
> <!-- Integer Preferences -->
> <xs:element name="PWDefaultLength" type="passwordlengthType" minOccurs="0" maxOccurs="1" />
> <xs:element name="IdleTimeout" type="timeoutType" minOccurs="0" maxOccurs="1" />
> <xs:element name="TreeDisplayStatusAtOpen" type="displaystatusType" minOccurs="0" maxOccurs="1" />
> <xs:element name="NumPWHistoryDefault" type="pwhistoryType" minOccurs="0" maxOccurs="1" />
> <xs:element name="PWDigitMinLength" type="passwordlengthType2" minOccurs="0" maxOccurs="1" />
> <xs:element name="PWLowercaseMinLength" type="passwordlengthType2" minOccurs="0" maxOccurs="1" />
> <xs:element name="PWSymbolMinLength" type="passwordlengthType2" minOccurs="0" maxOccurs="1" />
> <xs:element name="PWUppercaseMinLength" type="passwordlengthType2" minOccurs="0" maxOccurs="1" />
>
> <!-- String Preferences -->
> <xs:element name="DefaultUsername" type="stringType" minOccurs="0" maxOccurs="1" />
> <xs:element name="DefaultAutotypeString" type="stringType" minOccurs="0" maxOccurs="1" />
> </xs:all>
> </xs:complexType>
> <!-- End Database Preferences -->
> </xs:element>
> <xs:element name="unknownheaderfields" minOccurs="0" maxOccurs="1">
> <!-- Start Database Unknown Fields -->
> <xs:complexType>
> <xs:sequence>
> <xs:element name="field" minOccurs="0" maxOccurs="unbounded">
> <xs:complexType>
> <xs:simpleContent>
> <xs:extension base="xs:base64Binary">
> <xs:attribute name="ftype" type="fieldType" use="required" />
> </xs:extension>
> </xs:simpleContent>
> </xs:complexType>
> </xs:element>
> </xs:sequence>
> </xs:complexType>
> <!-- End Database Unknown Fields -->
> </xs:element>
> <xs:element name="entry" minOccurs="0" maxOccurs="unbounded">
> <!-- Start Database Entries -->
> <xs:complexType>
> <xs:all>
> <xs:element name="group" type="stringType" minOccurs="0" maxOccurs="1" />
> <xs:element name="title" type="stringType" minOccurs="1" />
> <xs:element name="username" type="stringType" minOccurs="0" maxOccurs="1" />
> <xs:element name="password" type="stringType" minOccurs="1" />
> <xs:element name="url" type="stringType" minOccurs="0" maxOccurs="1" />
> <xs:element name="autotype" type="stringType" minOccurs="0" maxOccurs="1" />
> <xs:element name="notes" type="stringType" minOccurs="0" maxOccurs="1" />
> <xs:element name="uuid" type="uuidType" minOccurs="0" maxOccurs="1" />
> <xs:element name="ctime" type="datetimestampType" minOccurs="0" maxOccurs="1" />
> <xs:element name="atime" type="datetimestampType" minOccurs="0" maxOccurs="1" />
> <!-- ltime is depreciated and replaced by xtime
> If both present, xtime values take precedence -->
> <xs:element name="ltime" type="datetimestampType" minOccurs="0" maxOccurs="1" />
> <xs:element name="xtime" type="datetimestampType" minOccurs="0" maxOccurs="1" />
> <xs:element name="xtime_interval" type="expirydaysType" minOccurs="0" maxOccurs="1" />
> <xs:element name="pmtime" type="datetimestampType" minOccurs="0" maxOccurs="1" />
> <xs:element name="rmtime" type="datetimestampType" minOccurs="0" maxOccurs="1" />
> <xs:element name="pwhistory" minOccurs="0" maxOccurs="1">
> <!-- Start Password History Fields -->
> <xs:complexType>
> <xs:all>
> <xs:element name="status" type="boolType" minOccurs="1" maxOccurs="1" />
> <xs:element name="max" type="pwhistoryType" minOccurs="1" maxOccurs="1" />
> <xs:element name="num" type="pwhistoryType" minOccurs="1" maxOccurs="1" />
> <xs:element name="history_entries" minOccurs="0" maxOccurs="1">
> <xs:complexType>
> <xs:sequence>
> <xs:element name="history_entry" minOccurs="0" maxOccurs="255">
> <xs:complexType>
> <xs:all>
> <xs:element name="changed" type="datetimestampType" minOccurs="1" maxOccurs="1" />
> <xs:element name="oldpassword" type="stringType" minOccurs="1" maxOccurs="1" />
> </xs:all>
> <xs:attribute name="num" type="xs:integer" use="optional" />
> </xs:complexType>
> </xs:element>
> </xs:sequence>
> </xs:complexType>
> </xs:element>
> </xs:all>
> </xs:complexType>
> <!-- End Password History Fields -->
> </xs:element>
> <xs:element name="PasswordPolicy" minOccurs="0" maxOccurs="1">
> <!-- Start Password Policy Fields -->
> <xs:complexType>
> <xs:all>
> <xs:element name="PWLength" type="passwordlengthType" minOccurs="1" />
> <xs:element name="PWUseDigits" type="boolType" minOccurs="0" maxOccurs="1" />
> <xs:element name="PWUseEasyVision" type="boolType" minOccurs="0" maxOccurs="1" />
> <xs:element name="PWUseHexDigits" type="boolType" minOccurs="0" maxOccurs="1" />
> <xs:element name="PWUseLowercase" type="boolType" minOccurs="0" maxOccurs="1" />
> <xs:element name="PWUseSymbols" type="boolType" minOccurs="0" maxOccurs="1" />
> <xs:element name="PWUseUppercase" type="boolType" minOccurs="0" maxOccurs="1" />
> <xs:element name="PWMakePronounceable" type="boolType" minOccurs="0" maxOccurs="1" />
> <xs:element name="PWLowercaseMinLength" type="passwordlengthType2" minOccurs="0" maxOccurs="1" />
> <xs:element name="PWUppercaseMinLength" type="passwordlengthType2" minOccurs="0" maxOccurs="1" />
> <xs:element name="PWDigitMinLength" type="passwordlengthType2" minOccurs="0" maxOccurs="1" />
> <xs:element name="PWSymbolMinLength" type="passwordlengthType2" minOccurs="0" maxOccurs="1" />
> </xs:all>
> </xs:complexType>
> <!-- End Password Policy Fields -->
> </xs:element>
> <xs:element name="unknownrecordfields" minOccurs="0" maxOccurs="1">
> <!-- Start Unknown Record Fields -->
> <xs:complexType>
> <xs:sequence>
> <xs:element name="field" minOccurs="0" maxOccurs="unbounded">
> <xs:complexType>
> <xs:simpleContent>
> <xs:extension base="xs:base64Binary">
> <xs:attribute name="ftype" type="fieldType" use="required" />
> </xs:extension>
> </xs:simpleContent>
> </xs:complexType>
> </xs:element>
> </xs:sequence>
> </xs:complexType>
> <!-- End Unknown Record Fields -->
> </xs:element>
> </xs:all>
> <xs:attribute name="id" type="xs:integer" use="optional" />
> <xs:attribute name="normal" type="xs:boolean" use="optional" />
> </xs:complexType>
> <!-- End Database Entries -->
> </xs:element>
> </xs:sequence>
> <!-- Start Database Attributes -->
> <xs:attribute name="delimiter" type="characterType" use="required" />
> <xs:attribute name="Database" type="stringType" use="optional" />
> <xs:attribute name="ExportTimeStamp" type="xs:dateTime" use="optional" />
> <xs:attribute name="FromDatabaseFormat" type="stringType" use="optional" />
> <xs:attribute name="WhatSaved" type="stringType" use="optional" />
> <xs:attribute name="WhoSaved" type="stringType" use="optional" />
> <xs:attribute name="WhenLastSaved" type="xs:dateTime" use="optional" />
> <xs:attribute name="Database_uuid" type="fileuuidType" use="optional" />
> <!-- End Database Attributes -->
> </xs:complexType>
> <!-- End Database -->
> </xs:element>
> </xs:schema>
> <!-- End of proper Password Safe validation XSD -->
> ---END---
> Sample XML FIle:
> ---START---
> <?xml version="1.0" encoding="UTF-8"?>
> <?xml-stylesheet type="text/xsl" href="pwsafe.xsl"?>
> <passwordsafe
> delimiter="»"
> Database="Sample123.psafe3"
> ExportTimeStamp="2008-10-18T09:13:49"
> FromDatabaseFormat="3.05"
> WhoSaved="David on KELVIN-HOME"
> WhatSaved="Password Safe V3.14"
> WhenLastSaved="2008-10-06T20:23:57"
> Database_uuid="5b9becc7-ab52-4ccc-9c16-0b24befcdddc"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xsi:noNamespaceSchemaLocation="pwsafe.xsd">
> <Preferences>
> <ShowPWDefault>1</ShowPWDefault>
> <UseDefaultUser>1</UseDefaultUser>
> <SaveImmediately>0</SaveImmediately>
> <SavePasswordHistory>1</SavePasswordHistory>
> <ShowNotesDefault>1</ShowNotesDefault>
> <PWMakePronounceable>1</PWMakePronounceable>
> <PWDigitMinLength>1</PWDigitMinLength>
> <PWLowercaseMinLength>1</PWLowercaseMinLength>
> <PWSymbolMinLength>1</PWSymbolMinLength>
> <PWUppercaseMinLength>1</PWUppercaseMinLength>
> <DefaultUsername><![CDATA[ronys]]></DefaultUsername>
> </Preferences>
> <entry id="1">
> <title><![CDATA[123]]></title>
> <password><![CDATA[092629645346]]></password>
> <uuid><![CDATA[c5bfa81622914de1ae83baf1361fc34d]]></uuid>
> <ctime>
> <date>2008-06-24</date>
> <time>20:12:53</time>
> </ctime>
> <pmtime>
> <date>2008-09-22</date>
> <time>14:31:02</time>
> </pmtime>
> <rmtime>
> <date>2008-09-22</date>
> <time>14:31:02</time>
> </rmtime>
> <pwhistory>
> <status>1</status>
> <max>4</max>
> <num>4</num>
> <history_entries>
> <history_entry num="1">
> <changed>
> <date>2008-03-31</date>
> <time>16:45:48</time>
> </changed>
> <oldpassword><![CDATA[3xing5kiN]]></oldpassword>
> </history_entry>
> <history_entry num="2">
> <changed>
> <date>2008-03-31</date>
> <time>17:56:20</time>
> </changed>
> <oldpassword><![CDATA[ol0wehaph]]></oldpassword>
> </history_entry>
> <history_entry num="3">
> <changed>
> <date>2008-09-16</date>
> <time>21:17:53</time>
> </changed>
> <oldpassword><![CDATA[stionsurst]]></oldpassword>
> </history_entry>
> <history_entry num="4">
> <changed>
> <date>2008-09-22</date>
> <time>13:44:52</time>
> </changed>
> <oldpassword><![CDATA[ansimpewal]]></oldpassword>
> </history_entry>
> </history_entries>
> </pwhistory>
> <PasswordPolicy>
> <PWLength>12</PWLength>
> <PWUseDigits>1</PWUseDigits>
> <PWDigitMinLength>12</PWDigitMinLength>
> </PasswordPolicy>
> </entry>
> <entry id="2" normal="true">
> <title><![CDATA[a]]></title>
> <username><![CDATA[user]]></username>
> <password><![CDATA[[~:123:~]]]></password>
> <url><![CDATA[http://cnn.com]]></url>
> <notes><![CDATA[nota-bene!»whaddaya whaddaya!]]></notes>
> <uuid><![CDATA[0965bd56fcdc43d8914e28269929baca]]></uuid>
> <ctime>
> <date>2008-02-07</date>
> <time>05:06:02</time>
> </ctime>
> <pmtime>
> <date>2008-10-05</date>
> <time>23:02:23</time>
> </pmtime>
> <rmtime>
> <date>2008-10-05</date>
> <time>23:02:23</time>
> </rmtime>
> <pwhistory>
> <status>1</status>
> <max>4</max>
> <num>0</num>
> </pwhistory>
> </entry>
> </passwordsafe>
> ---END---
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: c-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: c-dev-help@xerces.apache.org