On Wed, 2014-04-30 at 15:19 +0200, Patrick Ohly wrote: > It's permanently increasing repoffset. > > I've not looked further, but I suspect that this is because of using > LABEL twice, once indirectly via the group field and once via the > position field. > > I'll try applying different <property> elements, even if that means more > duplication in the profile.
That had even weirder effects, so I am back at the <position field="LABEL"> approach and trying to figure out where the endless loop comes from. Attached my current field list and profile. It hangs parsing: ADR;TYPE=HOME:PO;neighborhood;home address\n;City;State;ZIP;Country The (almost) endless loop comes from this code: // note: repArray will be updated below (if property not empty or !overwriteempty) dostore=true; // we can store do { repoffset = aRepArray[repid]*repinc; // - set flag if repeat offset should be incremented after storing an empty property or not overwriteempty = propnameextP->overwriteEmpty; // - check if target property main value is empty (must be, or we will skip that repetition) dostore = false; // if no field exists, we do not store for (sInt16 e=0; e<aPropP->numValues; e++) { if (aPropP->convdefs[e].fieldid==FID_NOT_SUPPORTED) continue; // no field, no need to check it sInt16 e_fid = aPropP->convdefs[e].fieldid+baseoffset; sInt16 e_rep = repoffset; aItem.adjustFidAndIndex(e_fid,e_rep); // - get base field TItemField *e_basefldP = aItem.getField(e_fid); TItemField *e_fldP = NULL; if (e_basefldP) e_fldP=e_basefldP->getArrayField(e_rep,true); // get leaf field, if it exists if (!e_basefldP || (e_fldP && e_fldP->isAssigned())) { // base field of one of the main fields does not exist or leaf field is already assigned // -> skip that repetition ===> dostore = false; break; } else dostore = true; // at least one field exists, we might store } // check if we can test more repetitions if (!dostore) { if (aRepArray[repid]+1<maxrep || maxrep==REP_ARRAY) { // we can increment and try next repetition aRepArray[repid]++; } else break; // no more possible repetitions with this position rule (check next rule) } } while (!dostore); It sets dostore = false at the line indicated above. Then it increments aRepArray[repid] and tried again, failing again and again. That's because the e_fid calculated for aItem.getField(e_fid) is beyond the end of my field list. Therefore e_basefldP is always going to NULL for all repetitions. I'm a bit lost about baseoffset. What does it mean? In my case, ADR is defined has having 7 values plus the extra TYPE and LABEL: <property name="ADR" values="7" groupfield="GROUP_TAG"> <value index="0" field="ADR_POBOX"/> <value index="1" field="ADR_ADDTL"/> <value index="2" field="ADR_STREET"/> <value index="3" field="ADR_CITY"/> <value index="4" field="ADR_REG"/> <value index="5" field="ADR_ZIP"/> <value index="6" field="ADR_COUNTRY"/> <position field="LABEL" repeat="array" increment="1" minshow="0" overwriteempty="no"/> <parameter name="TYPE" default="yes" positional="no" show="yes"> <value field="ADR_STREET_FLAGS" conversion="multimix" combine=","> <enum name="HOME" value="B0"/> <enum name="WORK" value="B1"/> <enum mode="ignore" value="B2"/> <!-- OTHER --> <!-- enum mode="prefix" name="X-CustomLabel-" value="1.L"/ --> <!-- enum mode="prefix" name="X-Synthesis-Ref" value="2.L"/ --> </value> </parameter> <parameter name="X-ABLabel" rule="HAVE-ABLABEL-PARAMETER"> <value field="LABEL"/> </parameter> </property> The ADR_* fields are consecutive. LABEL is somewhere else entirely (almost at the end of my field list). Here's what I see when at the dostore = false line: (gdb) p *aPropP $20 = {<sysync::noncopyable> = {<No data fields>}, next = 0x19d5c80, propname = "ADR", nameExts = 0x19d5990, groupFieldID = 90, numValues = 7, convdefs = 0x19d58d8, unprocessed = false, valuelist = false, expandlist = false, valuesep = 59 ';', altvaluesep = 0 '\000', allowFoldAtSep = false, parameterDefs = 0x19d59c0, mandatory = false, showInCTCap = true, canFilter = false, suppressEmpty = false, delayedProcessing = 0, modeDependency = sysync::numMimeModes, nextNameExt = 0, propGroup = 66, dependsOnRemoterule = false, ruleDependency = 0x0, dependencyRuleName = ""} (gdb) p e $21 = 4 (gdb) p aPropP->convdefs[0] $22 = {<sysync::noncopyable> = {<No data fields>}, fieldid = 75, enumdefs = 0x0, convmode = 0, combineSep = 0 '\000'} (gdb) p aPropP->convdefs[1] $23 = {<sysync::noncopyable> = {<No data fields>}, fieldid = 71, enumdefs = 0x0, convmode = 0, combineSep = 0 '\000'} (gdb) p aPropP->convdefs[2] $24 = {<sysync::noncopyable> = {<No data fields>}, fieldid = 70, enumdefs = 0x0, convmode = 0, combineSep = 0 '\000'} (gdb) p aPropP->convdefs[3] $25 = {<sysync::noncopyable> = {<No data fields>}, fieldid = 76, enumdefs = 0x0, convmode = 0, combineSep = 0 '\000'} (gdb) p aPropP->convdefs[4] $26 = {<sysync::noncopyable> = {<No data fields>}, fieldid = 77, enumdefs = 0x0, convmode = 0, combineSep = 0 '\000'} (gdb) p baseoffset $27 = 16 (gdb) p e_fid $28 = 93 (gdb) p *propnameextP $29 = {<sysync::noncopyable> = {<No data fields>}, next = 0x0, musthave_ids = 0, forbidden_ids = 0, addtlSend_ids = 0, fieldidoffs = 16, maxRepeat = 32767, repeatInc = 1, minShow = 0, overwriteEmpty = false, readOnly = false, repeatID = 27} This last fieldid = 77 corresponds to ADR_REG, but because we add baseoffset = 16 (from propnameextP->fieldidoffs) we end up with an invalid index. Does the code perhaps expect that the <position field> is one of the fields that the propertie's values get stored in? It seems so. And does the code check for existence of values in the fields for parameters at all? It doesn't seem so, which foils my current plan to reuse the LABEL field for multiple different properties. -- Best Regards, Patrick Ohly The content of this message is my personal opinion only and although I am an employee of Intel, the statements I make here in no way represent Intel's position on the issue, nor am I authorized to speak on behalf of Intel on this matter.
01vcard-profile.xml
Description: XML document
00vcard-fieldlist.xml
Description: XML document
- SYNCLVL : n/a maxoccur=0, maxsize=0 (unlimited) - REV : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - UID : n/a maxoccur=0, maxsize=0 (unlimited) - N_LAST : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - N_FIRST : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - N_MIDDLE : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - N_PREFIX : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - N_SUFFIX : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - NICKNAME : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - TITLE : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - FN : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - FILE_AS : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - GENDER : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - CATEGORIES : AVAILABLE maxoccur=0, maxsize=0 (unlimited) - ORG_NAME : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - ORG_DIVISION : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - ORG_OFFICE : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - ORG_TEAM : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - ROLE : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - BDAY : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - ANNIVERSARY : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - XDATE : n/a maxoccur=0, maxsize=0 (unlimited) - TEL : n/a maxoccur=0, maxsize=0 (unlimited) - TEL_FLAGS : n/a maxoccur=0, maxsize=0 (unlimited) - TEL_LABEL : n/a maxoccur=0, maxsize=0 (unlimited) - TEL_ID : n/a maxoccur=0, maxsize=0 (unlimited) - TEL_SLOT : n/a maxoccur=0, maxsize=0 (unlimited) - EMAIL : n/a maxoccur=0, maxsize=0 (unlimited) - EMAIL_FLAGS : n/a maxoccur=0, maxsize=0 (unlimited) - EMAIL_LABEL : n/a maxoccur=0, maxsize=0 (unlimited) - EMAIL_ID : n/a maxoccur=0, maxsize=0 (unlimited) - EMAIL_SLOT : n/a maxoccur=0, maxsize=0 (unlimited) - WEB : n/a maxoccur=0, maxsize=0 (unlimited) - WEB_FLAGS : n/a maxoccur=0, maxsize=0 (unlimited) - WEB_LABEL : n/a maxoccur=0, maxsize=0 (unlimited) - WEB_ID : n/a maxoccur=0, maxsize=0 (unlimited) - CALURI : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - FBURL : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - BLOGURL : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - VIDEOURL : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - RELATEDNAMES : n/a maxoccur=0, maxsize=0 (unlimited) - MANAGER : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - ASSISTANT : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - SPOUSE : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - WANTS_HTML : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - IMPP : n/a maxoccur=0, maxsize=0 (unlimited) - IMPP_SERVICE : n/a maxoccur=0, maxsize=0 (unlimited) - IMPP_SLOT : n/a maxoccur=0, maxsize=0 (unlimited) - AIM_HANDLE : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - AIM_SLOT : AVAILABLE maxoccur=0, maxsize=0 (unlimited) - GADUGADU_HANDLE : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - GADUGADU_SLOT : AVAILABLE maxoccur=0, maxsize=0 (unlimited) - GROUPWISE_HANDLE : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - GROUPWISE_SLOT : AVAILABLE maxoccur=0, maxsize=0 (unlimited) - ICQ_HANDLE : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - ICQ_SLOT : AVAILABLE maxoccur=0, maxsize=0 (unlimited) - JABBER_HANDLE : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - JABBER_SLOT : AVAILABLE maxoccur=0, maxsize=0 (unlimited) - MSN_HANDLE : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - MSN_SLOT : AVAILABLE maxoccur=0, maxsize=0 (unlimited) - YAHOO_HANDLE : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - YAHOO_SLOT : AVAILABLE maxoccur=0, maxsize=0 (unlimited) - SKYPE_HANDLE : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - SKYPE_SLOT : AVAILABLE maxoccur=0, maxsize=0 (unlimited) - SIP_HANDLE : AVAILABLE maxoccur=0, maxsize=0 (unlimited) - SIP_SLOT : AVAILABLE maxoccur=0, maxsize=0 (unlimited) - IM_ADDRESS : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - MEANWHILE_HANDLE : AVAILABLE maxoccur=0, maxsize=0 (unlimited) - IRC_HANDLE : AVAILABLE maxoccur=0, maxsize=0 (unlimited) - SMS_HANDLE : AVAILABLE maxoccur=0, maxsize=0 (unlimited) - ADR_STREET : n/a maxoccur=0, maxsize=0 (unlimited) - ADR_ADDTL : n/a maxoccur=0, maxsize=0 (unlimited) - ADR_STREET_FLAGS : n/a maxoccur=0, maxsize=0 (unlimited) - ADR_STREET_LABEL : n/a maxoccur=0, maxsize=0 (unlimited) - ADR_STREET_ID : n/a maxoccur=0, maxsize=0 (unlimited) - ADR_POBOX : n/a maxoccur=0, maxsize=0 (unlimited) - ADR_CITY : n/a maxoccur=0, maxsize=0 (unlimited) - ADR_REG : n/a maxoccur=0, maxsize=0 (unlimited) - ADR_ZIP : n/a maxoccur=0, maxsize=0 (unlimited) - ADR_COUNTRY : n/a maxoccur=0, maxsize=0 (unlimited) - NOTE : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - PHOTO : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - PHOTO_TYPE : AVAILABLE maxoccur=0, maxsize=0 (unlimited) - PHOTO_VALUE : AVAILABLE maxoccur=0, maxsize=0 (unlimited) - GEO_LAT : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - GEO_LONG : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - CRYPTOENCRYPTPREF : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - CRYPTOPROTOPREF : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - CRYPTOSIGNPREF : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - OPENPGPFP : AVAILABLE maxoccur=1, maxsize=0 (unlimited) - GROUP_TAG : n/a maxoccur=0, maxsize=0 (unlimited) - LABEL : AVAILABLE maxoccur=0, maxsize=0 (unlimited) - XPROPS : AVAILABLE maxoccur=0, maxsize=0 (unlimited)
_______________________________________________ os-libsynthesis mailing list os-libsynthesis@synthesis.ch http://lists.synthesis.ch/mailman/listinfo/os-libsynthesis